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 に答える