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

时间:2015-06-29 14:53:49

标签: python winapi pywin

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

这可能吗?

1 个答案:

答案 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()此功能。