¿Cómo consigo un HWND desde el interior de un archivo DLL?
-
16-10-2019 - |
Pregunta
Tengo una DLL que quiero reproducir sonidos usando sonido directo. Con el fin de reproducir sonidos, necesito el HWND del ejecutable. No tengo un HWND del ejecutable que se carga el archivo DLL. ¿Cómo consigo que en la DLL sin pasarlo desde el ejecutable?
Solución
Se puede usar GetCurrentProcessId para obtener el ID del proceso actual.
A continuación, puede llamar EnumWindows, y comprobar cada ventana con GetWindowThreadProcessId encontrar una ventana asociada con el proceso.
Sin embargo, una opción más fácil podría ser simplemente generar su propia ventana. Puede crear una ventana de 1x1 píxeles que no es visible, y usarlo con sonido directo.
Esto tiene la ventaja de trabajar incluso si su proceso de llamada no tiene una ventana utilizable (o elimina identificadores de ventana regularmente).
Otros consejos
GetGUIThreadInfo
en el hilo principal . Esto se consigue un montón de HWNDs. Si necesita un HWND de nivel superior, elegir cualquier válida (no todos los valores se pueden rellenar) y encontrar su ancestro nivel superior con GetAncestor(GA_ROOT)
.