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

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

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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代码,可能需要使用其他方法来获取特定应用程序的绝对路径。

是进程里exe文件路径那么你说的是进程的当前路径?

  • 用os.path.realpath(file)方法可获取绝对路径。

    img

  • python 代码

#!/sur/bin/nve python
# coding: utf-8
import os


print('\n当前路径(绝对):\n', os.path.realpath(__file__))

不是的exe的文件路径。比如我打开了pdf,用PDF打开了一个文件,我想获取的是PDF打开的具体那个文件的路径,而不是pdf.exe的路径。我知道获取窗口标题是文件名还有句柄,但是怎么获取通过这个句柄来打开的具体某个文件的路径?

img