2011-08-16 1 views
5

In python, enumero le finestre di livello superiore tramite EnumWindows e inoltre enumero i processi tramite EnumProcesses.Come posso ottenere l'handle della finestra principale in Python?

Quindi nello script python, ho inserito tutti gli handle di finestra che appartengono allo stesso pid in un elenco (l'ho fatto tramite GetWindowThreadProcessId).

Successivamente ho scoperto qualcosa: ci sono 3 maniglie di finestra che appartengono a notepad.exe, ma apro solo un file di testo.

Perché?

Inoltre, ho provato a impostare la finestra di testo come finestra in primo piano tramite SetForegroundWindow, ho passato i tre handle di finestra a questa funzione e due funzionano.

Come potrebbe essere?

risposta

5

I processi talvolta creano finestre invisibili per i propri scopi. Dovresti ignorarli (usa la funzione IsWindowVisible).

+0

capito. grazie – Alcott

4

Per indagare su questo tipo di cose il tuo migliore amico è Spy ++, fornito con diverse versioni di Visual Studio, se riesci a ottenerlo.

In base ad esso, notepad.exe crea tre finestre di primo livello:

  1. La finestra principale visibile, nome della classe "Blocco note", sovrapposti.
  2. Una finestra pop-up nascosta, disabilitata, nome classe "MSCTFIME UI", didascalia "M".
  3. Un'altra finestra nascosta, disabilitata, a comparsa, nome di classe "IME", didascalia "IME predefinito".

Le due finestre nascoste sono utilizzate internamente dal blocco note per implementare IME (Input Method Editor), la GUI per digitare script complessi.

Molti programmi creano finestre nascoste di livello superiore per un sacco di cose. Per quello che intendi, puoi ignorarli tutti e usare solo quelli visibili.

+0

la tua risposta è abbastanza chiara, grazie., – Alcott