2011-08-16 10 views
5

En python, enumero ventanas de nivel superior a través de EnumWindows, y también enumero los procesos a través de EnumProcesses.¿Cómo puedo obtener el control de la ventana principal en Python?

Luego, en la secuencia de comandos python, puse todos los identificadores de ventana que pertenecen al mismo pid en una lista (lo hice a través de GetWindowThreadProcessId).

Más tarde descubrí algo: hay 3 identificadores de ventana que pertenecen a notepad.exe, pero solo abro un archivo de texto.

¿Por qué?

Además, traté de establecer la ventana de texto como la ventana de primer plano a través de SetForegroundWindow, pasé los tres controles de ventana a esta función, y dos funcionan.

¿Cómo podría ser esto?

Respuesta

5

Los procesos a veces crean ventanas invisibles para sus propios fines. Debe ignorarlos (use la función IsWindowVisible).

+0

lo tengo. gracias – Alcott

4

Para investigar este tipo de cosas, su mejor amigo es Spy ++, que viene con varias versiones de Visual Studio, si puede obtenerlo.

De acuerdo con ello, el Bloc de notas crea tres ventanas de nivel superior:

  1. La ventana principal visible, nombre de clase "Bloc de notas", se superponen.
  2. Una ventana emergente oculta, desactivada, nombre de clase "MSU de MSCTFIME", título "M".
  3. Otra ventana emergente oculta, deshabilitada, nombre de clase "IME", título "IME predeterminado".

Las dos ventanas ocultas se usan internamente mediante un bloc de notas para implementar el IME (Input Method Editor), la GUI para escribir scripts complejos.

Muchos programas crean ventanas ocultas de alto nivel para muchas cosas. Para lo que pretende, puede ignorarlos a todos y usar solo los visibles.

+0

su respuesta es bastante clara, gracias., – Alcott

Cuestiones relacionadas