最近遇到挺无解的一个问题:电脑上莫名其妙出现一个白色小方块,点击没有反应,关也关不掉,想知道它和哪个软件有关还是显卡出了问题,也找不到思路,就想着要不获取一下它的历程号看看。
于是写了一个Python脚本,可以通过鼠标点击快速获取恣意窗口的详细信息,包罗窗口标题、历程PID和程序路径。特别适合必要快速定位窗口来源或排查非常历程的场景。
利用方法
- 运行脚本后,屏幕会提示:点击恣意窗口开始检测 (按Ctrl+C退出)...
- 将鼠标移动到目标窗口上方并点击
- 控制台立刻表现类似以下信息:
- 窗口标题: 无标题 - 记事本
- 进程PID: 1234
- 程序路径: C:\Windows\System32\notepad.exe
复制代码 实现原理
- 核心组件 :
- pynput:监听全局鼠标点击变乱
- pywin32:获取窗口句柄和历程ID
- psutil:查询历程详细信息
- 技能流程 :
- 鼠标点击时捕获坐标位置
- 通过WindowFromPoint获取对应窗口句柄
- 利用GetWindowThreadProcessId提取历程ID
- 通过psutil查询历程可执行文件路径
- 最后输出窗口标题和历程信息
安装依赖
- pip install pynput pywin32 psutil
复制代码 注意事项
- 必要Windows体系运行
- 获取体系级窗口(如使命栏)大概表现路径为Unknown
- 某些受保护历程大概必要管理员权限运行脚本
- 点击速率过快大概导致坐标捕获偏差,建议点击后稍作停顿
完备代码
- import win32gui
- import win32process
- import psutil
- import signal
- import sys
- from pynput import mouse
- def signal_handler(sig, frame):
- print("\n程序已退出")
- sys.exit(0)
- def get_window_info(x, y):
- hwnd = win32gui.WindowFromPoint((x, y))
- _, pid = win32process.GetWindowThreadProcessId(hwnd)
-
- try:
- process = psutil.Process(pid)
- exe_path = process.exe()
- except psutil.NoSuchProcess:
- exe_path = "Unknown"
-
- title = win32gui.GetWindowText(hwnd)
- return pid, exe_path, title
- def on_click(x, y, button, pressed):
- if pressed:
- pid, exe, title = get_window_info(x, y)
- print(f"窗口标题: {title}")
- print(f"进程PID: {pid}")
- print(f"程序路径: {exe}\n")
- # 注册信号处理
- signal.signal(signal.SIGINT, signal_handler)
- with mouse.Listener(on_click=on_click) as listener:
- print("点击任意窗口开始检测 (按Ctrl+C退出)...")
- try:
- listener.join()
- except KeyboardInterrupt:
- pass
复制代码 于是破案:PowerToys!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |