Maison >développement back-end >C++ >Comment obtenir le handle de la fenêtre principale à partir d'un ID de processus en C ?
Comment récupérer le handle de la fenêtre principale à partir d'un ID de processus
Question :
Comment pouvez-vous récupérer le handle de la fenêtre principale à partir d’un ID de processus donné ? Vous souhaitez mettre cette fenêtre particulière au premier plan, et Process Explorer semble effectuer cette action de manière transparente.
Réponse :
Enquêter sur le mécanisme utilisé par .NET pour déterminer la fenêtre principale a révélé qu'elle utilise la fonction EnumWindows(). Le code C suivant fournit une implémentation similaire :
struct handle_data { unsigned long process_id; HWND window_handle; }; HWND find_main_window(unsigned long process_id) { handle_data data; data.process_id = process_id; data.window_handle = 0; EnumWindows(enum_windows_callback, (LPARAM)&data); return data.window_handle; } BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) { handle_data& data = *(handle_data*)lParam; unsigned long process_id = 0; GetWindowThreadProcessId(handle, &process_id); if (data.process_id != process_id || !is_main_window(handle)) return TRUE; data.window_handle = handle; return FALSE; } BOOL is_main_window(HWND handle) { return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle); }
Ce code parcourt toutes les fenêtres de niveau supérieur et vérifie si l'ID de processus de la fenêtre correspond à l'ID de processus souhaité. Si c'est le cas, il vérifie en outre si la fenêtre est une fenêtre principale (n'a pas de propriétaire et est visible) et renvoie son handle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!