Search code examples
pythonwinapipywin

Get Application Name from .exe file in python


I am getting both the currently active window title and exe filepath with the code below

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 = ''

the issue is that although it often is, the window title is not always the application name (the name the users understand as the main part of an application) and this is what I need. for example from calc.exe get Calculator withiout relying on the window title.

the purpose is to create a script that will log in an xml comparative use of any software on a computer

Is this possible?


Solution

  • Most Windows applications store information such as this inside their resource tables. There are API calls that can be used to extract this.

    The following extracts the file description from a given application:

    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"))
    

    The output is:

    Internet Explorer
    

    You could therefore pass the result of your call to win32process.GetModuleFileNameEx() to this function.