Search code examples
pythonwindowswin32gui

win32gui get the current active application name


I am just learning python and I am relativity new to it. I created the following script that will get the current active windows title and print it to the window.

import win32gui
windowTile = ""; 
while ( True ) :
    newWindowTile = win32gui.GetWindowText (win32gui.GetForegroundWindow());        
    if( newWindowTile != windowTile ) :
        windowTile = newWindowTile ; 
        print( windowTile ); 

The above code snippet works. I am now trying to get the application name for the active window (Foreground Window)

My question is:

  • How do you get the foreground active windows application name in python?

Edit

For example: If a user switches from a Calculator (calc.exe) to Google Chrome (chrome.exe) I want to see what the application that they switched to is called. The problem with the title is that not all applications prefix the title with the application name. For example google chrome puts the page title as the window title. I want to know what the application that the user switched to is called.

calc.exe
chrome.exe

Solution

  • Install WMI package first (and pywin32 of cause):

    pip install wmi
    

    Then:

    import win32process
    import wmi
    
    
    c = wmi.WMI()
    
    
    def get_app_path(hwnd):
        """Get applicatin path given hwnd."""
        try:
            _, pid = win32process.GetWindowThreadProcessId(hwnd)
            for p in c.query('SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = %s' % str(pid)):
                exe = p.ExecutablePath
                break
        except:
            return None
        else:
            return exe
    
    
    def get_app_name(hwnd):
        """Get applicatin filename given hwnd."""
        try:
            _, pid = win32process.GetWindowThreadProcessId(hwnd)
            for p in c.query('SELECT Name FROM Win32_Process WHERE ProcessId = %s' % str(pid)):
                exe = p.Name
                break
        except:
            return None
        else:
            return exe