win32gui obtenir le nom de l’application active en cours

Je ne fais qu’apprendre le python et je suis relativement nouveau. J’ai créé le script suivant pour obtenir le titre Windows actif et l’imprimer dans la fenêtre.

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

L’extrait de code ci-dessus fonctionne. Je n’essaie pas d’obtenir le nom de l’application pour la fenêtre active (fenêtre de premier Foreground Window )

Ma question est:

  • Comment obtenez-vous le nom de l’application Windows active au premier plan en python?

modifier

Par exemple: si un utilisateur passe d’une calculasortingce (calc.exe) à Google Chrome (chrome.exe), je souhaite savoir comment est appelée l’application utilisée. Le problème avec le titre est que toutes les applications ne préfixent pas le titre avec le nom de l’application. Par exemple, Google Chrome place le titre de la page comme titre de la fenêtre. Je veux savoir ce que l’application à laquelle l’utilisateur a basculé est appelé.

 calc.exe chrome.exe 

Installez d’abord le package WMI (et pywin32 de cause):

 pip install wmi 

Alors:

 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 

Pense que cela va faire l’affaire

 import psutil, win32process, win32gui, time def active_window_process_name(): pid = win32process.GetWindowThreadProcessId(win32gui.GetForegroundWindow()) #This produces a list of PIDs active window relates to print(psutil.Process(pid[-1]).name()) #pid[-1] is the most likely to survive last longer time.sleep(3) #click on a window you like and wait 3 seconds active_window_process_name() 

en supposant que vous avez installé des modules psutil et win32

Exécutez ce programme pour mieux comprendre

 import threading, win32gui, win32process, psutil from tkinter import * root = Tk() s = SsortingngVar() def active_window_process_name(): try: pid = win32process.GetWindowThreadProcessId(win32gui.GetForegroundWindow()) return(psutil.Process(pid[-1]).name()) except: pass def to_label(): global s while True: s.set(active_window_process_name()) return Label(root,textvariable=s).pack() if __name__ == "__main__": t = threading.Thread(target = to_label) t.start() root.mainloop()