我试图在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
)。
如何启动应用程序并获取其窗口句柄?
答案 0 :(得分:0)
通常,要从另一个应用程序中运行一次应用程序,您必须首先从.Net框架运行时目录运行dfsvc.exe
。 (见https://stackoverflow.com/a/11996812/3803708)。然后尝试运行.appref-ms
,希望它能够正常运行。
答案 1 :(得分: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 clone)上进行了测试。