momo932 2023-07-15 10:52 采纳率: 0%
浏览 17

python 通过句柄获取文件路径,不是exe文件路径,是任务管理器应用程序路径

在Windows里python 获取了应用程序的窗口句柄,想通过这个句柄获取这个应用程序的绝对路径(注意:不是进程里exe文件路径),有哪位帮忙指点一下,谢谢!

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-15 12:02
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7775048
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python生成windows可执行的exe文件
    • 除此之外, 这篇博客: 【Python】防Windows锁屏中的 将python文件打包成exe可执行文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 这种博客很多,我这里就省略了,如果需要的话,可以自行搜索……

    • 您还可以看一下 秦红华老师的美女讲师教你学Python第一季:基础入门课程中的 Windows系统下的Python的安装小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      解决方案

      要获取特定应用程序的窗口句柄,并通过句柄获取其绝对路径,可以使用Python的ctypes库来实现。

      1. 首先,需要使用pywin32库来获取特定应用程序的窗口句柄。如果尚未安装pywin32库,可以使用以下命令进行安装:

      python pip install pywin32

      1. 导入必要的模块:

      python import win32gui import win32process import win32api import ctypes

      1. 通过窗口句柄获取进程ID和线程ID:

      python hwnd = # 窗口句柄 thread_id, process_id = win32process.GetWindowThreadProcessId(hwnd)

      1. 使用OpenProcess函数打开进程:

      python process_handle = ctypes.windll.kernel32.OpenProcess( win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, 0, process_id )

      1. 使用GetModuleFileNameEx函数获取进程的模块文件名:

      python MAX_PATH = 260 buffer = ctypes.create_unicode_buffer(MAX_PATH) ctypes.windll.psapi.GetModuleFileNameExW(process_handle, None, buffer, MAX_PATH) file_path = buffer.value

      1. 最后,关闭进程句柄:

      python ctypes.windll.kernel32.CloseHandle(process_handle)

      完整代码示例:

      import win32gui
      import win32process
      import win32api
      import ctypes
      
      def get_application_path(hwnd):
          thread_id, process_id = win32process.GetWindowThreadProcessId(hwnd)
          process_handle = ctypes.windll.kernel32.OpenProcess(
              win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, 0, process_id
          )
          MAX_PATH = 260
          buffer = ctypes.create_unicode_buffer(MAX_PATH)
          ctypes.windll.psapi.GetModuleFileNameExW(process_handle, None, buffer, MAX_PATH)
          file_path = buffer.value
          ctypes.windll.kernel32.CloseHandle(process_handle)
          return file_path
      
      # 使用示例
      hwnd = # 窗口句柄
      file_path = get_application_path(hwnd)
      print(file_path)
      

      请确保在使用ctypes.windll.kernel32.OpenProcessctypes.windll.kernel32.CloseHandle函数时,传入正确的参数,并且对应的窗口句柄有效。

      以上是一种基于Windows操作系统的解决方案。如果是在其他操作系统上运行Python代码,可能需要使用其他方法来获取特定应用程序的绝对路径。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月15日

悬赏问题

  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错