1

我正在尝试在 ClickOnce 应用程序中自动化一系列 GUI 控件,但是我在通过自动化代码启动应用程序时遇到问题。我想做的是用 启动应用程序CreateProcess(),这样我就可以有一个窗口句柄来执行我的控件。

这是我当前的代码(我省略了应用程序的路径):

import win32process
import win32con

path_to_app = "path_to_application\\application.appref-ms"
startupinfo = win32process.STARTUPINFO()

(hprocess, hthread, dwprocessid, dwthreadid) = win32process.CreateProcess(path_to_app, None, None, None, 0, win32con.NORMAL_PRIORITY_CLASS, None, None, startupinfo)

# Execute controls here

这是我得到的错误:

pywintypes.error: (193, 'CreateProcess', '%1 不是有效的 Win32 应用程序。')

如果我尝试直接打开.exe最终会运行的程序,它会失败并显示我应该通过快捷方式运行的消息(在本例中为.appref-ms)。

如何启动应用程序并获取其窗口句柄?

4

2 回答 2

0

这段代码对我有用:

import subprocess, time
import pywinauto

p = subprocess.Popen(['cmd.exe', '/c', r'C:\Users\<user_name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\GitHub, Inc\GitHub.appref-ms'])
time.sleep(5)
app = pywinauto.Application.connect(path='github.exe')
dlg = app.Windows_(visible_only=True)[0]
print dlg.handle

当然,你需要安装


该代码在 32 位 github 应用程序、Win7 x64、Python 2.6 32 位(pywinauto-64 克隆)上进行了测试。

于 2015-04-22T13:59:04.500 回答
0

通常,要从另一个应用程序中运行单击一次应用程序,您必须首先dfsvc.exe从 .Net 框架运行时目录运行。(见https://stackoverflow.com/a/11996812/3803708)。然后尝试运行.appref-ms,希望它会工作。

于 2015-04-02T04:49:24.820 回答