0

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

您可以在此处找到该程序的详细信息: 如何使用子进程和 Popen 从我的 .exe 获取所有输出?

4

1 回答 1

0

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

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

如果您可以假设适当的窗口处于活动状态,请查看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 交互,否则您不会从这样的库中获得太多好处——打开名为“Edit | Find”的菜单项,在“Find”窗口的第一个编辑框中键入“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 本身带有一些相当不错的文档,所以你经常不这样做'不必)。

于 2012-09-28T18:40:47.630 回答