在Windows里python 获取了应用程序的窗口句柄,想通过这个句柄获取这个应用程序的绝对路径(注意:不是进程里exe文件路径),有哪位帮忙指点一下,谢谢!
4条回答 默认 最新
关注 - 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7775048
- 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python生成windows可执行的exe文件
- 除此之外, 这篇博客: 【Python】防Windows锁屏中的 将python文件打包成exe可执行文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
这种博客很多,我这里就省略了,如果需要的话,可以自行搜索……
- 您还可以看一下 秦红华老师的美女讲师教你学Python第一季:基础入门课程中的 Windows系统下的Python的安装小节, 巩固相关知识点
- 以下回答由chatgpt基于相关博客总结生成:
解决方案
要获取特定应用程序的窗口句柄,并通过句柄获取其绝对路径,可以使用Python的
ctypes
库来实现。- 首先,需要使用
pywin32
库来获取特定应用程序的窗口句柄。如果尚未安装pywin32
库,可以使用以下命令进行安装:
python pip install pywin32
- 导入必要的模块:
python import win32gui import win32process import win32api import ctypes
- 通过窗口句柄获取进程ID和线程ID:
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代码,可能需要使用其他方法来获取特定应用程序的绝对路径。
- 首先,需要使用
解决 无用评论 打赏 举报
悬赏问题
- ¥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添加远程解释器报错