Obtenir HWND du processus actuel
J'ai un processus en c++ dans lequel je suis à l'aide de la fenêtre de l'API. Je veux obtenir le HWND de la propre processus. De bien vouloir me guider comment puis-je la rendre possible.
source d'informationauteur Siddiqui
Vous devez vous connecter pour publier un commentaire.
Vous êtes (à tort) en supposant qu'un processus n'a qu'un seul HWND. Ce n'est généralement pas vrai, et c'est pourquoi Windows ne peut pas offrir une API pour l'obtenir. Un tel programme permettrait de créer deux fenêtres, et ont deux Hwnd. Otoh, que, si votre programme ne crée qu'une seule fenêtre, il peut stocker que HWND dans une variable globale.
Si vous parlez d'obtenir un processus poignée, puis ce n'est pas une
HWND
(qui est un wjendux hmanipulez), mais unHANDLE
(c'est à dire, un objet de noyau poignée); pour récupérer une pseudo-poignée relative à la procédure en cours, vous pouvez utiliserfonction getcurrentprocess
comme d'autres l'ont expliqué.D'autre part, si vous voulez obtenir un
HWND
(un fenêtre poignée) de la fenêtre principale de votre application, puis vous avez à marcher, les fenêtres avecEnumWindows
et de vérifier leur propriété avecGetWindowThreadProcessId
en comparant le retour de l'ID de processus avec celui retourné parGetCurrentProcessId
. Encore, dans ce cas, vous feriez mieux de sauvegarder votre fenêtre principale de la poignée dans une variable lors de sa création plutôt que de faire tout ce gâchis.De toute façon, gardez toujours à l'esprit que toutes les poignées sont les mêmes:
HANDLE
s etHWND
s, en particulier, sont complètement différents des bêtes: les premiers sont le noyau des poignées (=poignées de noyau d'objets gérés) et sont manipulés par des génériques du noyau gère les fonctions de manipulation (DuplicateHandle
CloseHandle
...), tandis que les seconds sont des poignées par rapport à la fenêtre du gestionnaire, ce qui est complètement différent de ce morceau de l'OS, et sont manipulés par un autre ensemble de fonctions.En fait, dans la théorie de la
HWND
peut avoir le même "numérique" de la valeur d'unHANDLE
mais ils se réfèrent à complètement différents objets.La
fonction getcurrentprocess()
fonction renvoie une pseudo-poignée qui se réfère au processus actuel. Cette poignée peut être utilisé dans la plupart des fonctions de l'API Win32 qui prennent une poignée de processus de paramètre.La documentation contient plus d'informations à propos de cette pseudo-poignée, y compris la façon de convertir en un véritable poignée si vous en avez besoin.
Obtenir votre fenêtre de console
"La valeur de retour est un handle de la fenêtre utilisée par la console associé au processus appelant, ou NULL si il n'y a pas de telles console."
https://msdn.microsoft.com/en-us/library/windows/desktop/ms683175(v=vs. 85).aspx
Obtenir d'autres fenêtres
GetActiveWindow()
pourrait PAS être la réponse, mais il pourrait être utile"La valeur de retour est le handle de la fenêtre active attaché à le thread appelant file d'attente de messages. Sinon, la valeur de retour est NULLE." > msdn GetActiveWindow() docs
Cependant les fenêtres ne sont pas seulement popping up - de sorte que vous devriez récupérer le handle de l'endroit où vous/votre app avons créé la fenêtre... par exemple
CreateWindow()
retourneHWND
poignée de sorte que tous vous avez besoin est de sauver&le récupérer...Vous pouvez utiliser
HANDLE WINAPI GetCurrentProcess(void);
de Kernel32.dll.Voir MSDN entrée ici.
Mon exemple n'est pas de traiter avec le processus, mais peut-être vous avez besoin de ceci:
Cela renvoie HWND du contrôle spécifié par son
IDCL_COMBOBOX
.