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

2024-10-01 13:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从一个我知道标题的窗口输入一个PID。。。在

它是一个安装程序,似乎改变了重要的凭证时,第一个“下一步”按钮按在我的代码。。。在

我认为这是因为窗口淡出,然后再次淡入,但当我单击后退按钮并再次单击下一步时,它不会再这样做了。。。在

第一个“下一步”按钮,我第一次点击它,上面有一个护盾,所以我想它可能和UAC有关。。。在

我用这个代码发送一个输入键盘按下窗口:

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,也能正常工作。。。在

如果有人能找到答案或更好的解决方案,我将不胜感激

提前谢谢大家


Tags: 代码client标题timedefsleepshellwindow
1条回答
网友
1楼 · 发布于 2024-10-01 13:27:55

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使用它。在

相关问题 更多 >