【问题标题】:How do I get a PID from a window title in windows OS using Python?如何使用 Python 从 Windows 操作系统中的窗口标题获取 PID?
【发布时间】:2015-01-21 13:44:18
【问题描述】:

我需要从一个我知道标题的窗口中提供一个 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 也可以。

【问题讨论】:

    标签: python windows pid win32com


    【解决方案1】:

    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,但如果您尝试驱动 UI。我没有尝试通过 Python 使用它。

    【讨论】:

    • 这适用于从窗口标题传递 PID,但它仍然无法达到我的目的,我现在将按照您的建议看一下 UI 自动化...我将您的答案标记为正确,感谢您在这方面的帮助。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    相关资源
    最近更新 更多