如何在ctypes中使用Win32 API的SendMessageA,Python

2 投票
1 回答
2812 浏览
提问于 2025-04-18 12:37

我遇到了一个问题,这个函数的原型是这样的:

LRESULT WINAPI SendMessage(
    _In_  HWND hWnd,
    _In_  UINT Msg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
);

我在Python中做了这个:

SendMessageA = ctypes.windll.user32.SendMessageA
# hwnd here is already got by EnumWindows or FindWindowA

SendMessageA(hwnd, KEY, 0, 0)

补充一下:

有没有人能根据我提供的代码做个例子?

看起来这个SendMessageA函数是一次发送一个按键。

那么,如何用ctypes来做到这一点呢?

补充:

我真正想做的是:

我遍历了所有窗口,找到了一个特定的窗口,那是浏览器中Flash弹出的文件打开对话框。

所以我找到了这个对话框窗口,并获取了它的句柄(窗口的标识符)。

现在我想操作这个窗口,选择我想要的文件。

我能想到的第一件事就是在窗口中输入文件的完整路径,然后按下回车,这有点像模拟我们选择文件的方式。

所以,这就是我解决这个问题的方法,如果你有更好的解决方案,我完全没问题。

如果你能提供任何提示,我非常感谢。

1 个回答

0

你真正想做的是自动化一个Windows文件对话框。Python有很多自动化的工具。对于这个任务,使用pywinauto是个不错的选择。另一个选择是使用平台的自动化库,叫做UI Automation。通过COM来实现这个也相对简单。

撰写回答