我正在尝试创建一个程序,用于在 Windows 上安装应用程序(如果尚未安装)。我知道可执行文件的文件名,但一无所知。我想查询操作系统以检查该操作系统上是否安装了已知名称或文件名的应用程序。
到目前为止我所拥有的只是以下内容:
def IsProgramInstalled(ProgramName):
"""Check whether ProgramName is installed."""
Run Code Online (Sandbox Code Playgroud)
如果有人知道这个问题的答案,我将不胜感激,因为我在任何地方都找不到它。
我需要从我知道标题的窗口提供 PID。
这是一个安装程序,当在我的代码中以编程方式按下第一个“下一步”按钮时,它似乎会更改重要凭据。
我认为这样做是因为窗口逐渐消失然后再次消失,但是当我单击后退按钮并再次单击下一步时,它不会再次执行此操作。
第一个“下一步”按钮,我第一次点击它时,上面有一个盾牌,所以我认为它可能与 UAC 有关。
我正在使用以下代码向窗口发送 ENTER 键盘按键:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
def setwindowfocus(windowname): # can be the window title or the windows PID
shell.AppActivate(windowname)
def sendkeypresstowindow(windowname, key):
setwindowfocus(windowname)
shell.SendKeys(key)
time.sleep(0.1)
sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5) # Wait for next window
sendkeypresstowindow(u'Some Known Window Title', '{ENTER}')
time.sleep(5) # Wait for next window
Run Code Online (Sandbox Code Playgroud)
在shell.AppActivate()可采取的pid也所以我想知道我怎么会得到,如果我拥有的唯一信息是窗口标题。
我尝试使用 pywinauto 并遇到了同样的问题,除了许多不应该在 pywinauto 中访问的成员之外,它对于我需要做什么来使用它非常不直观,所以我宁愿避开它,直到代码被清理了。。
我还注意到窗口的句柄发生了变化,所以如果我能以某种方式从窗口标题中获取句柄,然后从句柄中获取 PID 也可以使用。