使用进程名称获取另一个程序窗口的标题

使用进程名称获取另一个程序窗口的标题,第1张

使用进程名称获取另一个程序窗口的标题

在介绍所有内容之前,我想指出一下SO:通过ctypes从Python调用的C函数返回错误值(@CristiFati的回答)。在使用_CTypes_ 之前, 请先 阅读它。

这是我在评论中的意思:

import win32guidef enumWindowsProc(hwnd, lParam):    print win32gui.GetWindowText(hwnd)win32gui.EnumWindows(enumWindowsProc, 0)

在下面,我粘贴了整个内容…由于我搞砸了安全设置(这是 XP !!!),因此无法在我现在使用的 PC 上正常工作,并且一堆 访问被拒绝(错误)代码 5 )错误,但是在这里。 __

pre00.py

#!/usr/bin/env python3import sysimport osimport tracebackimport ctypesfrom ctypes import wintypesimport win32conimport win32apiimport win32guiimport win32processdef enumWindowsProc(hwnd, lParam):    if (lParam is None) or ((lParam is not None) and (win32process.GetWindowThreadProcessId(hwnd)[1] == lParam)):        text = win32gui.GetWindowText(hwnd)        if text: wStyle = win32api.GetWindowLong(hwnd, win32con.GWL_STYLE) if wStyle & win32con.WS_VISIBLE:     print("%08X - %s" % (hwnd, text))def enumProcWnds(pid=None):    win32gui.EnumWindows(enumWindowsProc, pid)def enumProcs(procName=None):    pids = win32process.EnumProcesses()    if procName is not None:        bufLen = 0x100        _OpenProcess = ctypes.windll.kernel32.OpenProcess        _OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]        _OpenProcess.restype = wintypes.HANDLE        _GetProcessImageFileName = ctypes.windll.psapi.GetProcessImageFileNameA        _GetProcessImageFileName.argtypes = [wintypes.HANDLE, wintypes.LPSTR, wintypes.DWORD]        _GetProcessImageFileName.restype = wintypes.DWORD        _CloseHandle = ctypes.windll.kernel32.CloseHandle        _CloseHandle.argtypes = [wintypes.HANDLE]         _CloseHandle.restype = wintypes.BOOL        filteredPids = ()        for pid in pids: try:     hProc = _OpenProcess(win32con.PROCESS_ALL_ACCESS, 0, pid) except:     print("Process [%d] couldn't be opened: %s" % (pid, traceback.format_exc()))     continue try:     buf = ctypes.create_string_buffer(bufLen)     _GetProcessImageFileName(hProc, buf, bufLen)     if buf.value:         name = buf.value.depre().split(os.path.sep)[-1]         #print name     else:         _CloseHandle(hProc)         continue except:     print("Error getting process name: %s" % traceback.format_exc())     _CloseHandle(hProc)     continue if name.lower() == procName.lower():     filteredPids += (pid,) _CloseHandle(hproc)        return filteredPids    else:        return pidsdef main(args):    if args:        procName = args[0]    else:        procName = None    pids = enumProcs(procName)    #print(pids)    for pid in pids:        enumProcWnds(pid)if __name__ == "__main__":    print("Python {:s} on {:s}n".format(sys.version, sys.platform))    main(sys.argv[1:])

不用说:

  • 为了使此代码起作用,您需要以特权用户( Administrator )运行它;至少需要 SeDebugPrivilege ([MS.Docs]:Privilege Constants)。
  • 当进程以 32/64位 模式运行时(执行此代码的 python 进程以及该代码枚举的目标进程),可能会感到惊讶。

更新 #0
  • 更换了所有 的ctypes 通过电话 PyWin32
  • 改进算法
  • 修复了先前版本中的错误

pre01.py

#!/usr/bin/env python3import sysimport osimport tracebackimport win32con as wconimport win32api as wapiimport win32gui as wguiimport win32process as wproc# Callbackdef enum_windows_proc(wnd, param):    pid = param.get("pid", None)    data = param.get("data", None)    if pid is None or wproc.GetWindowThreadProcessId(wnd)[1] == pid:        text = wgui.GetWindowText(wnd)        if text: style = wapi.GetWindowLong(wnd, wcon.GWL_STYLE) if style & wcon.WS_VISIBLE:     if data is not None:         data.append((wnd, text))     #else:         #print("%08X - %s" % (wnd, text))def enum_process_windows(pid=None):    data = []    param = {        "pid": pid,        "data": data,    }    wgui.EnumWindows(enum_windows_proc, param)    return datadef _filter_processes(processes, search_name=None):    if search_name is None:        return processes    filtered = []    for pid, _ in processes:        try: proc = wapi.OpenProcess(wcon.PROCESS_ALL_ACCESS, 0, pid)        except: #print("Process {0:d} couldn't be opened: {1:}".format(pid, traceback.format_exc())) continue        try: file_name = wproc.GetModuleFileNameEx(proc, None)        except: #print("Error getting process name: {0:}".format(traceback.format_exc())) wapi.CloseHandle(proc) continue        base_name = file_name.split(os.path.sep)[-1]        if base_name.lower() == search_name.lower(): filtered.append((pid, file_name))        wapi.CloseHandle(proc)    return tuple(filtered)def enum_processes(process_name=None):    procs = [(pid, None) for pid in wproc.EnumProcesses()]    return _filter_processes(procs, search_name=process_name)def main(*args):    proc_name = args[0] if args else None    procs = enum_processes(process_name=proc_name)    for pid, name in procs:        data = enum_process_windows(pid)        if data: proc_text = "PId {0:d}{1:s}windows:".format(pid, " (File: [{0:s}]) ".format(name) if name else " ") print(proc_text) for handle, text in data:     print("    {0:d}: [{1:s}]".format(handle, text))if __name__ == "__main__":    print("Python {0:s} {1:d}bit on {2:s}n".format(" ".join(item.strip() for item in sys.version.split("n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))    main(*sys.argv[1:])    print("nDone.")

输出

[cfati@CFATI-5510-0:e:WorkDevStackOverflowq031278590]>

“e:WorkDevVEnvspy_pc064_03.07.06_test0scriptspython.exe” pre01.py
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916
64 bit (AMD64)] 64bit on win32

PId 8048 windows:    131462: [Program Manager]PId 10292 windows:    133738: [Skype]PId 5716 windows:    89659824: [python - Get the title of a window of another program

using the process name - Stack Overflow - Google Chrome]
132978: [Service Name and Transport Protocol Port Number Registry -
Google Chrome]
329646: [CristiFati/Prebuilt-Binaries: Various software built on
various platforms. - Google Chrome]
133078: [unittest — Unit testing framework — Python 3.8.2
documentation - Google Chrome]
263924: [libssh2/libssh2 at libssh2-1.9.0 - Google Chrome]
264100: [WNetAddConnection2A function (winnetwk.h) - Win32 apps |
Microsoft Docs - Google Chrome]
525390: [Understanding 4D – The Tesseract - YouTube - Google
Chrome]
198398: [Workaround for virtual environments (VirtualEnv) by
CristiFati · Pull Request #1442 · mhammond/pywin32 - Google Chrome]
591586: [struct — Interpret bytes as packed binary data — Python
3.8.2 documentation - Google Chrome]
263982: [Simulating an epidemic - YouTube - Google Chrome]
329312: [SetHandleInformation function (handleapi.h) - Win32 apps |
Microsoft Docs - Google Chrome]
263248: [studiu functie faze - Google Search - Google Chrome]
198364: [Lambda expressions (since C11) - cppreference.com -
Google Chrome]
PId 13640 windows:
984686: [Total Commander (x64) 9.22a - NOT REGISTERED]
44046462: [Lister - [c:cpula.txt]]
4135542: [Lister -
[e:WorkDevCristiFatiBuildsWinOPSWpython27srcpywin32-b222win32srcwin32process.i]]
3873800: [Lister -
[e:WorkDevCristiFatiBuildsWinOPSWpython27srcpywin32-b222win32srcPyHANDLE.cpp]]
29825332: [Lister -
[E:WorkDevProjectsDevTelifmyosemiteGitLabAyoseissuesbuildnrdependencies_200412.json]]
8329240: [Lister -
[e:WorkDevProjectsDevTelifmyosemitesrcsvnyosemiteCFATI_TRUNK_2srcresicpVerAppX.h]]
985026: [Lister -
[e:WorkDevCristiFatiBuildsWinOPSWpython27srcpywin32-b222win32srcwin32apimodule.cpp]]
PId 10936 windows:
264744: [Junk - cristian.fati@devtelsoftware.com - Mozilla
Thunderbird]
PId 10848 windows:
1115842: [Registry Editor]
PId 6164 windows:
264756: [Rocket.Chat]
PId 2716 windows:
854508: [Skype]
199310: [New tab and 5 more pages ‎- Microsoft Edge]
PId 14936 windows:
655466: [Administrator: C:WindowsSystem32cmd.exe]
PId 15132 windows:
526852: [Administrator: Cmd (064) -
“e:WorkDevVEnvspy_pc064_03.07.06_test0scriptspython.exe”]
PId 15232 windows:
133918: [Microsoft Edge]
PId 9748 windows:
68492: [Microsoft Edge]
PId 14968 windows:
134146: [Microsoft Edge]
68634: [Microsoft Edge]
PId 15636 windows:
134208: [Microsoft Edge]
PId 16348 windows:
1379450: [Microsoft Edge]
PId 15568 windows:
68828: [Microsoft Edge]
68788: [Microsoft Edge]
PId 16040 windows:
265406: [Administrator: Cmd (032)]
PId 5792 windows:
2034532: [e:WorkDevStackOverflowq031278590pre00.py - Notepad

[Administrator]]
PId 12032 windows:
69134: [Microsoft Edge]
PId 16200 windows:
69146: [Microsoft Text Input Application]
PId 16224 windows:
69184: [Microsoft Edge]
PId 5288 windows:
265806: [Administrator: Cmd (064) -
“e:WorkDevVEnvspy_pc032_03.07.06_test0scriptspython.exe”]
PId 16476 windows:
265814: [Administrator: Cmd (064) -
“e:WorkDevVEnvspy_pc064_03.08.01_test0scriptspython.exe”]
PId 16612 windows:
331388: [Administrator: Cmd (064) - python]
PId 16796 windows:
592540: [Administrator: Cmd (064)]
PId 16880 windows:
264894: [Administrator: C:WindowsSystem32cmd.exe]
PId 17156 windows:
69284: [Console1 - Microsoft Visual Studio (Administrator)]
PId 16636 windows:
69396: [QtConsole0 - Microsoft Visual Studio (Administrator)]
PId 18380 windows:
69522: [Console0 - Microsoft Visual Studio (Administrator)]
PId 18108 windows:
200528: [BlackBird - Microsoft Visual Studio (Administrator)]
PId 19476 windows:
1052868: [pcbuild - Microsoft Visual Studio (Administrator)]
PId 16680 windows:
200924: [Yosemite - Microsoft Visual Studio (Administrator)]
PId 16020 windows:
201030: [-bash]
PId 6532 windows:
200996: [-bash]
PId 13140 windows:
266602: [-bash]
PId 6032 windows:
790834: [-bash]
PId 8496 windows:
8130950: [-bash]
PId 3208 windows:
4198878: [-bash]
PId 19088 windows:
528856: [-bash]
PId 12744 windows:
266770: [-bash]
PId 3896 windows:
201370: [-bash]
PId 11512 windows:
1315422: [Yosemite - Microsoft Visual Studio (Administrator)]
PId 20660 windows:
267028: [Yosemite - Microsoft Visual Studio (Administrator)]
PId 20684 windows:
70554: [Microsoft Visual Studio (Administrator)]
PId 14808 windows:
201692: [Dependency Walker]
PId 13056 windows:
5509836: [Oracle VM VirtualBox Manager]
PId 17756 windows:
70802: [TIC2Vone.pdf - Adobe Acrobat Reader DC]
PId 14572 windows:
267868: [Select Administrator: Powershell (064)]
PId 25588 windows:
332550: [Administrator: Cmd (064)]
PId 20504 windows:
463448: [Administrator: C:WindowsSystem32cmd.exe]
PId 24740 windows:
2298466: [Administrator: C:WindowsSystem32cmd.exe -
“e:WorkDevVEnvspy_pc064_03.07.06_test0scriptspython.exe”]
PId 25960 windows:
2430020: [Utils [E:WorkDevUtils] - …currentifmpe_ver.py -
PyCharm (Administrator)]
PId 28836 windows:
332582: [E:WorkDevProjectsDevTelifmyosemitesrcsvnyosemite -
Log Messages - TortoiseSVN]
PId 29796 windows:
4724788: [Administrator: C:WindowsSystem32cmd.exe]
PId 26344 windows:
2883688: [Dependency Walker]
PId 34124 windows:
242746876: [Administrator: C:WindowsSystem32cmd.exe]
PId 21972 windows:
1317748: [Administrator: Cmd (064)]
PId 35060 windows:
2563162: [Administrator: C:WindowsSystem32cmd.exe -
“e:WorkDevVEnvspy_pc064_03.07.06_test0scriptspython.exe” pre00.py]
PId 14692 windows:
102695792: [Device Manager]
PId 35776 windows:
990338: [Process Explorer - Sysinternals: www.sysinternals.com
[CFATI-5510-0cfati] (Administrator)]
PId 33524 windows:
656408: [PE Explorer - 30 day evaluation version]
25368616: [PE Explorer]
PId 29488 windows:
3218206: [Microsoft Edge]
PId 13184 windows:
267896: [cfati-ubtu16x64-0 [Running] - Oracle VM VirtualBox]
PId 33716 windows:
3932934: [Cheat Engine 7.0]
73098: [Cheat Engine 7.0]

Done.[cfati@CFATI-5510-0:e:WorkDevStackOverflowq031278590]>[cfati@CFATI-5510-0:e:WorkDevStackOverflowq031278590]>

“e:WorkDevVEnvspy_pc064_03.07.06_test0scriptspython.exe” pre01.py
“notepad++.exe”
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916
64 bit (AMD64)] 64bit on win32

PId 5792 (File: [C:Installpc064NP++NP++Versionnotepad++.exe])

windows:
2034532: [e:WorkDevStackOverflowq031278590pre00.py - Notepad++
[Administrator]]

Done.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存