Estoy construyendo una aplicación que, dada otra aplicación mainWindowhandle, recopila información sobre el estado de la ventana. No tengo problemas para recopilar información sobre las ventanas secundarias, pero no puedo acceder a las otras ventanas abiertas de una aplicación o incluso a los menús. ¿Hay alguna forma de obtener todos los identificadores de ventanas de una aplicación?Obtiene las Manillas de la ventana de la aplicación
Respuesta
Puede hacer lo que parece hacer Process.MainWindowHandle
: use P/Invoke para llamar a la función EnumWindows
, que invoca un método de devolución de llamada para cada ventana de nivel superior en el sistema.
En su devolución de llamada, llame al GetWindowThreadProcessId
, y compare el identificador de proceso de la ventana con Process.Id
; si los ID de proceso coinciden, agregue el identificador de ventana a una lista.
En primer lugar, tendrá que obtener la ventana de la ventana principal de la aplicación.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
IntPtr hWnd = (IntPtr)FindWindow(windowName, null);
A continuación, puede utilizar este identificador para obtener todos childwindows:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
private List<IntPtr> GetChildWindows(IntPtr parent)
{
List<IntPtr> result = new List<IntPtr>();
GCHandle listHandle = GCHandle.Alloc(result);
try
{
EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
}
finally
{
if (listHandle.IsAllocated)
listHandle.Free();
}
return result;
}
Mez el problema ISN' t obtener ventanas hijas, puedo hacerlo fácilmente, lo que no puedo hacer es acceder a otras ventanas además de mainWindow y sus hijos ... – user361526
Esto funciona para cualquier ventana, también para ventanas que no pertenecen a la propia aplicación. Lo siento si malinterpreté tu pregunta. – Mez
¿De dónde viene 'EnumWindowProc'? –
- 1. Obtiene el título activo de la ventana en X
- 2. Obtiene el título actual de la ventana activa en Java
- 3. Obtiene el título actual activo de la ventana en C
- 4. Obtiene el evento de desinstalación de la aplicación en android
- 5. ¿Obtiene la selección actual en WindowsExplorer desde una aplicación C#?
- 6. Establecer el orden de tabulación en la ventana de la aplicación Mac
- 7. ¿Encontrar las dimensiones de la ventana X11?
- 8. java swing cerrar la ventana sin salir de la aplicación
- 9. ¿Código para minimizar la ventana de la aplicación en Mac?
- 10. ¿Cómo acelerar la ventana "Verificar los requisitos de la aplicación"?
- 11. ¿Cómo se obtiene la escala de ventana gráfica después de pellizcar/acercar en una aplicación web de iPhone?
- 12. ¿Cómo puedo enfocar una ventana modal de WPF cuando se hace clic en la ventana principal de la aplicación?
- 13. ¿Obtiene la posición de la "ventana gráfica" en el safari móvil?
- 14. centro de la ventana de dicom, ancho de la ventana
- 15. Cómo registrar la posición de la ventana en la configuración de la aplicación Windows Forms
- 16. Aplicación externa de alojamiento en la ventana de WPF
- 17. ¿Cómo establecer una ventana de aplicación de consola para ser la ventana más alta (C#)?
- 18. aplicación de Mac sin ventana
- 19. Obtiene el estado de ventana de otro proceso
- 20. Obtiene el texto de la ventana activa (y le envía más texto)
- 21. Abrir la ventana WPF en la aplicación WindowsForm
- 22. ¿Obtiene la velocidad de enlace mediante programación?
- 23. obtiene la hora actual
- 24. Buscar y activar la ventana de una aplicación
- 25. ¿Cómo se puede ocultar una ventana de la aplicación win32?
- 26. X11 - Cómo subir la ventana de otra aplicación usando Python
- 27. Ocultar ventana de comandos en la aplicación C#
- 28. ¿Cómo guardar las opciones de la aplicación antes de salir? .
- 29. Mostrar/Ocultar la ventana de la consola de una aplicación de consola C#
- 30. La ventana de la aplicación WPF aparece en la parte superior de SplashScreen
Echa un vistazo a esta solución de trabajo: http://stackoverflow.com/a/28055461/1274092 –