好的,首先让我从背景信息和参考资料开始。
我将使用的模块是pywin32 下载here,特别是win32gui,API 参考here。
现在,在您可以操作对话框之前,您必须“导航”到窗口句柄,以下使用 win32.FindWindow API 参考 here,看起来像这样,其中两个输入是 lpclassName 在这种情况下#32770(代表对话)引用 here 和 lpWindowName,在这种情况下是 File Upload,
HWND WINAPI FindWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName
);
定位文件句柄的代码:
import win32gui
control = win32gui.FindWindow("#32770", "File Upload")
它存储句柄,在我的例子中是721470。
下一步是在对话框中定位 GUI 对象的句柄,我将展示一个 Cancel 按钮的示例。为了找到句柄,我将在这里使用FindWindowEx API 参考,
import win32con
import win32api
ButtonHandle = win32gui.FindWindowEx(control, 0, "Button", "Cancel");
win32api.SendMessage(ButtonHandle, win32con.BM_CLICK, 0, 0)
BM_CLICK 参考 here,SendMessage 参考 here。
最终代码:
import win32gui
import win32api
import win32con
window = win32gui.GetForegroundWindow()
title = win32gui.GetWindowText(window)
control = win32gui.FindWindow("#32770", "File Upload")
ButtonHandle = win32gui.FindWindowEx(control, 0, "Button", "Cancel")
win32api.SendMessage(ButtonHandle, win32con.BM_CLICK, 0, 0)
另一种方法是使用watsup.winGuiAuto模块,here,示例如下:
from watsup.winGuiAuto import *
optDialog = findTopWindow(wantedText="File Upload")
CancelButton = findControl(optDialog,wantedClass="Button", wantedText="Cancel")
clickButton(SaveButton)
但我相信最简单的方法是使用autoithere,我之前在pyqt中使用过它,用于射出命令。
希望这会有所帮助!
其他参考资料(pywin32 版本):
win32guihere
win32apihere