Python:将F3,F10作为Windows中exe文件的输入

时间:2012-09-28 08:46:21

标签: python windows subprocess popen

我需要使用python将输入作为F3(0x72)给windows中的exe文件。我使用Popen命令在其中发出命令。谁能指导我?

您可以在此处找到该计划的详细信息: How do I get all of the output from my .exe using subprocess and Popen?

1 个答案:

答案 0 :(得分:0)

答案取决于“exe文件”是Win32 GUI应用程序还是控制台应用程序。

如果它是一个GUI应用程序,你不仅需要“在运行时输入F3和F10到exe文件”,你需要将它们输入应用程序的主窗口,而它是活性。如果它是一个控制台应用程序,您需要知道它正在阅读键盘的各种不同方式中的哪一个并执行相应的操作 - 或者您可以在活动时将它们键入控制台窗口。

如果您可以假设相应的窗口处于活动状态,请查看SendKeys,这是一个低级模块,除了将击键组合发送到前台的任何窗口之外什么都不做:

SendKeys('{F3}')

如果你需要更多的控制 - 例如,如果你需要工作,即使应用程序不在前台 - 有大约六个左右的“窗口自动化库”用于Python。它们都不像AutoIt那样漂亮,但是如果你需要使用Python,它们也不错。例如,对于pywinauto,您想要做的伪代码是这样的:

app = application.find("foo.exe")
wnd = app.TheAppWindow # assuming the app's main window has a title similar to "The App Window"
wnd.TypeKeys('{F3}')

当然,除非您需要与GUI交互,否则您不会从这样的库中获得太多好处 - 打开名为“编辑|查找”的菜单项,在“第一个编辑框中输入”foo“找到“窗口,单击标有”下一步“的按钮,在主窗口中获取所选文本等

最后,您始终可以下拉到较低级别并通过PyWin32进行Win32API调用。伪代码是:

hwnd = win32gui.FindWindowEx(0, 0, 'TheAppClass', 'The App Window')
win32gui.PostMessage(hwnd, WM_KEYDOWN, VK_F3, 0)
win32gui.PostMessage(hwnd, WM_KEYUP, VK_F3, 0)

除了现在你需要确切的窗口名称和窗口类之外,并没有那么复杂。 (要找到它,请使用任何免费的“窗口浏览器”工具;我认为Visual C ++ Express仍然附带一个。)

这里的优点是你确切知道发生了什么,这可以使问题更容易调试 - 这也意味着你可以利用MSDN上的详细文档(尽管PyWin32本身附带了一些相当不错的文档,所以你通常不必)。