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

问题描述 投票:1回答:1

我需要从我知道标题的窗口中输入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个回答
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,即使您试图驱动UI。我没有尝试通过Python使用它。

© www.soinside.com 2019 - 2024. All rights reserved.