¿Cómo puedo obtener la aplicación HWND, si conozco la ID del proceso? ¿Alguien podría publicar una muestra, por favor? Estoy usando MSV C++ 2010. Encontré Process :: MainWindowHandle pero no sé cómo usarlo.Obtener hwnd por identificación del proceso C++
Respuesta
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}
EnumWindows(EnumWindowsProcMy,m_ProcessId);
Esto funciona para mí como el queso .. – Nadun
Es necesario señalar que 'PID' debe pertenecer al mismo escritorio (o sesión de usuario/inicio de sesión interactivo) como el proceso al que llama este método. De lo contrario, 'EnumWindows' no enumerará su identificador de ventana. Por ejemplo, no puede usar este método desde un servicio, o si el proceso en cuestión se ejecuta bajo una cuenta de usuario diferente, o recuperar el HWND para un protector de pantalla si la estación de trabajo está bloqueada, etc. – c00000fd
Acaba de convertir este código gratis Pascal y funciona como queso para mí también :) – Jako
Puede usar las funciones EnumWindows y GetWindowThreadProcessId() como se menciona en este MSDN article.
Un único PID (ID de proceso) se puede asociar con más de una ventana (HWND). Por ejemplo, si la aplicación está usando varias ventanas.
El siguiente código ubica los identificadores de todas las ventanas por un PID dado.
void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> &vhWnds)
{
// find all hWnds (vhWnds) associated with a process id (dwProcessID)
HWND hCurWnd = NULL;
do
{
hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
DWORD dwProcessID = 0;
GetWindowThreadProcessId(hCurWnd, &dwProcessID);
if (dwProcessID == dwProcessID)
{
vhWnds.push_back(hCurWnd); // add the found hCurWnd to the vector
wprintf(L"Found hWnd %d\n", hCurWnd);
}
}
while (hCurWnd != NULL);
}
- 1. Cómo obtener la identificación de abuelos del proceso
- 2. cómo obtener el identificador del proceso desde la identificación del proceso?
- 3. Incrustar HWND en proceso externo usando SetParent
- 4. ¿Cómo puedo obtener un stdin de proceso por una identificación de proceso?
- 5. Cómo obtener hWnd de la ventana abierta por ShellExecuteEx .. hProcess?
- 6. Obtener nombre del proceso por PID
- 7. ¿Cómo obtener el ID del proceso del nombre del proceso?
- 8. long para HWND (VS8 C++)
- 9. Obtener el objeto Excel.Application desde Process o hwnd en .NET
- 10. obtener pid del proceso hijo
- 11. ms C++ get pid del proceso actual
- 12. Cómo registrar la identificación del proceso usando Log4cxx o log4j
- 13. Cómo indicar la identificación del proceso dentro de Python
- 14. en Python y Linux cómo obtener la identificación del usuario
- 15. Cómo obtener el nombre del proceso en C++
- 16. log4net información de identificación de proceso
- 17. Obtener vista de contenedores del fragmento de Identificación del
- 18. ¿Se puede representar una ventana de Direct3D para un proceso en otro proceso 'HWND?
- 19. HWND Creation Time
- 20. C++ Obtener nombre de usuario Proceso De
- 21. De HWND para controlar
- 22. obtener el nombre del proceso desde el proceso id (win32)
- 23. Obtener pid del proceso que ha activado alguna señal
- 24. Obtener salida en vivo del proceso
- 25. Obtener stacktrace del proceso de python atascado
- 26. Win32API - ¿Cómo obtener el nombre de archivo del proceso desde el control del proceso?
- 27. Cómo obtener la identificación MAC de un sistema usando C#
- 28. Prevenir la aplicación C# del proceso kill
- 29. C# Obtener el directorio de trabajo de otro proceso
- 30. ¿podemos obtener la id del subproceso del subproceso en la salida rápida del proceso multiproceso?
Un proceso no está limitado a 1 ventana. – chris
Un proceso puede tener varias ventanas, y esto tiene varios hwnds. –
Entonces, ¿es posible obtener todos los HWND y seleccionarlos, que tienen este ID de proceso? – Luke