从Windows文件对话框自动打开文件的Python

我做了自动化testing,并得到一个文件对话框。 我想从Windows打开文件对话框中select一个文件与Python或selenium。

注意:该对话框由其他程序给出。 我不想用Tkinter创build它。

窗口如下所示:

这个

这个怎么做?

你可以使用ctypes库。

考虑这个代码:

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) 

你循环每一个打开的窗口,并发送一个关键击中你选择的一个。

SendMessage函数获得4个参数:窗口hendler( hwnd ),要发送的物理键 – WM_KEYDOWN (0x0100), tab的虚拟键代码 ( 0x09 )和repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag第四个参数中的repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag

您也可以发送密钥,关键字,字符,返回等…使用文档的帮助。

我用它作为参考: Win32 Python:获取所有窗口标题

祝你好运!

考虑使用pywinauto包。 它有一个非常自然的语法来自动化任何GUI程序。

在这里输入图像说明

代码示例,在记事本中打开文件。 请注意,语法是依赖于语言环境的(它在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()