在Windows里python 获取了应用程序的窗口句柄,想通过这个句柄获取这个应用程序的绝对路径(注意:不是进程里exe文件路径),有哪位帮忙指点一下,谢谢!
这种博客很多,我这里就省略了,如果需要的话,可以自行搜索……
要获取特定应用程序的窗口句柄,并通过句柄获取其绝对路径,可以使用Python的ctypes
库来实现。
pywin32
库来获取特定应用程序的窗口句柄。如果尚未安装pywin32
库,可以使用以下命令进行安装:python pip install pywin32
python import win32gui import win32process import win32api import ctypes
python hwnd = # 窗口句柄 thread_id, process_id = win32process.GetWindowThreadProcessId(hwnd)
OpenProcess
函数打开进程:python process_handle = ctypes.windll.kernel32.OpenProcess( win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, 0, process_id )
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
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.OpenProcess
和ctypes.windll.kernel32.CloseHandle
函数时,传入正确的参数,并且对应的窗口句柄有效。
以上是一种基于Windows操作系统的解决方案。如果是在其他操作系统上运行Python代码,可能需要使用其他方法来获取特定应用程序的绝对路径。
是进程里exe文件路径那么你说的是进程的当前路径?
用os.path.realpath(file)方法可获取绝对路径。
python 代码
#!/sur/bin/nve python
# coding: utf-8
import os
print('\n当前路径(绝对):\n', os.path.realpath(__file__))
不是的exe的文件路径。比如我打开了pdf,用PDF打开了一个文件,我想获取的是PDF打开的具体那个文件的路径,而不是pdf.exe的路径。我知道获取窗口标题是文件名还有句柄,但是怎么获取通过这个句柄来打开的具体某个文件的路径?