我正在使用下面的代码获取当前活动的窗口标题和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比较用途
这可能吗?
答案 0 :(得分:0)
大多数Windows应用程序在其资源表中存储此类信息。有一些API调用可用于解压缩。
以下从给定的应用程序中提取文件描述:
import win32api
def getFileDescription(windows_exe):
try:
language, codepage = win32api.GetFileVersionInfo(windows_exe, '\\VarFileInfo\\Translation')[0]
stringFileInfo = u'\\StringFileInfo\\%04X%04X\\%s' % (language, codepage, "FileDescription")
description = win32api.GetFileVersionInfo(windows_exe, stringFileInfo)
except:
description = "unknown"
return description
print getFileDescription(r"C:\Program Files\Internet Explorer\iexplore.exe")
输出结果为:
Internet Explorer
因此,您可以将调用结果传递给win32process.GetModuleFileNameEx()
此功能。