如何使用Python从Windows操作系统中的窗口标题获取PID?

时间:2015-01-21 13:44:19

标签: python windows pid win32com

我需要从一个我知道...的标题的窗口提供一个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

shell.AppActivate()也可以带一个pid所以我想知道如果我拥有的唯一信息是windows标题我会怎么做...

我已经尝试过使用pywinauto并遇到同样的问题,除了pywinauto中不应该访问的许多成员之外,对于我需要做什么来使用它非常不直观,所以我宁愿避开它直到代码被清理......

我还注意到窗口的句柄发生了变化,如果我能以某种方式从窗口标题中获取句柄,然后从句柄中获取PID也会起作用...

如果有人有答案或更好的解决方案,我将非常感激

提前谢谢大家

1 个答案:

答案 0 :(得分:2)

GetWindowThreadProcessId函数似乎可以执行从HWND获取PID所需的功能。 FindWindow是使用其标题查找窗口的常用方法。所以以下内容得到了

import win32gui,win32process
def get_window_pid(title):
    hwnd = win32gui.FindWindow(None, title)
    threadid,pid = win32process.GetWindowThreadProcessId(hwnd)
    return pid

我想知道你是否应该尝试使用UI Automation,但是如果你想要推动用户界面。我没试过通过Python使用它。

相关问题