J'essaie de créer un hook Windows, spécifiquement pour intercepter les messages HSHELL_WINDOWCREATED.
Cependant, mon proc de hook n'est jamais appelé.Problème avec WH_SHELL
Mon dll a une fonction d'installer le crochet:
hHook = SetWindowsHookEx(WH_SHELL, (HOOKPROC)CreateWindowHook, hinst, 0);
hinst a été rempli par DllMain(), au message DLL_PROCESS_ATTACH.
CreateWindowHook est défini comme:
LRESULT CALLBACK CreateWindowHook(int code, WPARAM wParam, LPARAM lParam) {
if (code == HSHELL_WINDOWCREATED) {
// snip
}
return CallNextHookEx(0, code, wParam, lParam);
}
Je pense que le proc à appeler chaque fois qu'une nouvelle fenêtre de niveau supérieur est créé, mais il est jamais appelé. Qu'est-ce que je rate? Merci.
Plus d'informations:
Selon cet article - http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx - l'application qui veut recevoir des messages WH_SHELL doit se faire enregistrer par SystemParametersInfo():
MINIMIZEDMETRICS st;
st.cbSize = sizeof(MINIMIZEDMETRICS);
st.iArrange = ARW_HIDE;
BOOL ret;
ret = SystemParametersInfo(
SPI_SETMINIMIZEDMETRICS,
sizeof(MINIMIZEDMETRICS),
&st,
0);
Est-ce que l'appel fait dans la dll, ou l'application qui charge la DLL contenant le crochet, ou n'est-ce pas important?
Merci pour la réponse. WinXP, mon compte est un compte admin. – Number8
En fait, un hook global peut être défini comme non-admin, mais seuls les processus non-admin seront hookés. – Andy