当前位置: 首页 > news >正文

Python实现鼠标点击获取窗口进程信息

最近遇到挺无解的一个问题:电脑上莫名其妙出现一个白色小方块,点击没有反应,关也关不掉,想知道它和哪个软件有关还是显卡出了问题,也找不到思路,就想着要不获取一下它的进程号看看。

于是写了一个Python脚本,可以通过鼠标点击快速获取任意窗口的详细信息,包括窗口标题、进程PID和程序路径。特别适合需要快速定位窗口来源或排查异常进程的场景。 

使用方法

  1. 运行脚本后,屏幕会提示:点击任意窗口开始检测 (按Ctrl+C退出)...
  2. 将鼠标移动到目标窗口上方并点击
  3. 控制台立即显示类似以下信息:
窗口标题: 无标题 - 记事本
进程PID: 1234
程序路径: C:\Windows\System32\notepad.exe

实现原理

  1. 核心组件

    • pynput:监听全局鼠标点击事件
    • pywin32:获取窗口句柄和进程ID
    • psutil:查询进程详细信息
  2. 技术流程

    • 鼠标点击时捕获坐标位置
    • 通过WindowFromPoint获取对应窗口句柄
    • 使用GetWindowThreadProcessId提取进程ID
    • 通过psutil查询进程可执行文件路径
    • 最后输出窗口标题和进程信息

安装依赖

pip install pynput pywin32 psutil

注意事项

  1. 需要Windows系统运行
  2. 获取系统级窗口(如任务栏)可能显示路径为Unknown
  3. 某些受保护进程可能需要管理员权限运行脚本
  4. 点击速度过快可能导致坐标捕获偏差,建议点击后稍作停顿

完整代码

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!

http://www.dtcms.com/a/54249.html

相关文章:

  • UIScrollView与UIStackView的完美组合打造灵活滚动布局
  • 【项目】视频点播
  • Html常用代码
  • Apache SeaTunnel 人物专访 | 张东浩:从使用者到Committer的开源历程
  • 第七步:简单爬虫与网页测试
  • 【达梦数据库】代理用户的使用
  • 网页制作11-html,css,javascript初认识のCCS样式列表(下)
  • SD-WAN解决方案架构(SD WAN Solution Architecture)
  • 如何确保爬虫遵守1688的使用协议
  • HTML——标题标签与段落标签
  • Mac安装jdk教程
  • JavaWeb6、Servlet
  • Android 低功率蓝牙之BluetoothGattCallback回调方法详解
  • Android 低功率蓝牙之BluetoothGattCharacteristic详解
  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【一】
  • “深入浅出”系列之Linux篇:(12)C++网络编程
  • nvm 让 Node.js 版本切换更灵活
  • 记录一些面试遇到的问题
  • Linux系统之配置HAProxy负载均衡服务器
  • powermock,mock使用笔记
  • 重生之我在 CSDN 学习 KMP 算法
  • Linux——Docker容器内MySQL密码忘记了如何查看
  • 信息管理之信息的萃取方法--使用渐进归纳法逐步提取高可见性笔记
  • os-copilot安装和使用体验测评
  • PHP 矩形面积和周长的程序(Program for Area And Perimeter Of Rectangle)
  • 前端网络安全面试题及答案
  • MATLAB实现遗传算法优化风电_光伏_光热_储热优化
  • Mysql创建库、表练习
  • RoboDexVLM:基于视觉-语言模型的任务规划和运动控制,实现灵巧机器人操作
  • 中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)