1

我使用下面的代码获取当前活动的窗口标题和 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 比较使用

这可能吗?

4

1 回答 1

2

大多数 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()给此函数。

于 2015-06-29T15:34:19.287 回答