从 python 中的 .exe 文件获取应用程序名称

Get Application Name from .exe file in python

我正在使用以下代码获取当前活动的 window 标题和 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 = ''

问题是,尽管经常如此,但 window 标题并不总是应用程序名称(用户理解为应用程序主要部分的名称),而这正是我所需要的。例如,从 calc.exe 获取计算器而不依赖 window 标题。

目的是创建一个脚本,该脚本将登录 xml 比较计算机上任何软件的使用情况

这可能吗?

大多数 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() 的结果传递给此函数。