如何在ctypes、Python中使用win32 api SendMessageA

如何在ctypes、Python中使用win32 api SendMessageA,python,windows,winapi,ctypes,pywin32,Python,Windows,Winapi,Ctypes,Pywin32,我遇到了这个问题,这个函数的原型是这样的 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 F

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

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弹出的文件打开对话框

所以我找到了这个对话窗口,得到了它的hwnd(窗口的处理程序)

现在我想操纵这个窗口来选择我想要它选择的文件

我能想到的第一件事是在窗口中输入文件的完整路径,然后按enter键,这有点像我们选择文件的方式

所以,这就是我处理这个问题的方式,如果你有更好的解决方案,我完全同意


如果您能提供任何提示,请提前感谢。

您真正想做的是自动执行Windows文件对话框。Python有各种自动化框架。你可能做得比使用更糟糕。另一个选项是绑定到平台自动化库UI automation。使用COM相对容易。

也许函数的文档会有所帮助。@JonathanPotter我已经阅读了文档,但如何在python中使用Ctypest实现这一点似乎是个问题。看起来你真正想做的是假输入。您需要的是
SendMessage
,这一点还很不清楚。事实上,你需要的是伪造输入,这一点还远远不清楚。这往往是错误的解决方案。最后,如果您想了解
SendMessage
的参数,您需要阅读文档。你认为
Msg
是一个字符串这一事实表明你不可能阅读和理解文档。我刚刚编辑了这个问题,你们能告诉我如何在pythonWell中使用ctypes实现这一点吗,
Msg
不是字符串。除非你把错误的理解弄清楚,否则继续下去是没有意义的。没有人可以告诉您如何发送
Msg
参数为字符串的消息,因为这不是消息的工作方式。您的主要问题是尚未理解Windows消息。在理解它们之前,你不能继续。这样做首先要阅读文档。最好是读一下佩佐德的书。在皮维那托的下面,它使用了我一直在追求的技巧。那么为什么要麻烦使用一个大模块呢。我所需要的只是其中的一段代码。我会调查pywinauto并找到我需要的。谢谢你自己。我想你最清楚。