【发布时间】:2015-06-29 14:53:49
【问题描述】:
我正在使用下面的代码获取当前活动的窗口标题和 exe 文件路径
hwnd = win32gui.GetForegroundWindow()
_, pid = win32process.GetWindowThreadProcessId(hwnd)
if hwnd != 0 or pid != 0:
try:
hndl = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, 0, pid)
self.newExe = win32process.GetModuleFileNameEx(hndl, 0)
self.newWindowTitle = win32gui.GetWindowText(hwnd)
except:
self.newExe = ''
self.newWindowTitle = ''
问题在于,尽管经常如此,但窗口标题并不总是应用程序名称(用户理解为应用程序主要部分的名称),这正是我所需要的。例如从 calc.exe 获取计算器而不依赖于窗口标题。
目的是创建一个脚本,该脚本将登录一个 xml 比较使用计算机上的任何软件
这可能吗?
【问题讨论】:
-
首先你需要定义“应用程序名称”。
-
在这种情况下,它意味着用户知道应用程序的名称。例如 chrome.exe -> 谷歌浏览器
-
在这种情况下,您所要求的通常是不可能的。可执行文件没有先验理由将其官方产品名称包含在一个明确定义的位置。
-
有没有办法将 exe 与计算机上正在运行的程序列表进行比较,并从系统中获取有关该软件的信息?
-
你到底想做什么?我想您能做的最好的事情就是从可执行文件中读取版本信息资源并报告
FileDescription字段。这就是 Process Explorer 等工具的作用。