Abra o arquivo do diálogo de arquivo do windows com o python automaticamente

Eu faço testes automatizados e obtenho um diálogo de arquivo. Eu quero escolher um arquivo do diálogo de arquivo aberto do windows com python ou selenium.

NOTA: O diálogo é dado por outro programa. Eu não quero criá-lo com o Tkinter.

A janela parece com:

ISTO .

Como fazer isso?

Você pode usar a biblioteca de ctypes.

Considere este código:

import ctypes EnumWindows = ctypes.windll.user32.EnumWindows EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)) GetWindowText = ctypes.windll.user32.GetWindowTextW GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW SendMessage = ctypes.windll.user32.SendMessageW IsWindowVisible = ctypes.windll.user32.IsWindowVisible def foreach_window(hwnd, lParam): if IsWindowVisible(hwnd): length = GetWindowTextLength(hwnd) buff = ctypes.create_unicode_buffer(length + 1) GetWindowText(hwnd, buff, length + 1) if(buff.value == "Choose File to Upload"): #This is the window label SendMessage(hwnd, 0x0100, 0x09, 0x00000001 ) return True EnumWindows(EnumWindowsProc(foreach_window), 0) 

Você faz um loop em todas as janelas abertas e envia um toque de tecla para o que você escolher.

A function SendMessage obtém 4 parâmetros: o hendler de janela ( hwnd ), a chave física para enviar – WM_KEYDOWN (0x0100), o código de tab virtual ( 0x09 ) e a repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag no 4º argumento.

Você também pode enviar chaves para cima, para baixo, caracteres, retornos e etc … Use a documentação para obter ajuda.

Eu usei isso como uma referência: Win32 Python: Obtendo todos os títulos de janela

Boa sorte!

Considere usar o pacote pywinauto . Tem uma syntax muito natural para automatizar qualquer programa GUI.

insira a descrição da imagem aqui

Exemplo de código, abrindo um arquivo no bloco de notas. Observe que a syntax é localmente dependente (usa os títulos de janela visíveis / labels de controle em seu programa GUI):

 from pywinauto import application app = application.Application().start_('notepad.exe') app.Notepad.MenuSelect('File->Open') # app.[window title].[control name]... app.Open.Edit.SetText('filename.txt') app.Open.Open.Click() 
Intereting Posts