Ich versuche, einen Windows-Hook zu erstellen, speziell um HSHELL_WINDOWCREATED Nachrichten abzufangen.
Allerdings wird mein Hook-Prozess nie aufgerufen.Problem mit WH_SHELL
My dll hat eine Funktion, um den Haken zu installieren:
hHook = SetWindowsHookEx(WH_SHELL, (HOOKPROC)CreateWindowHook, hinst, 0);
hInst wurde von DllMain(), am DLL_PROCESS_ATTACH Nachricht ausgefüllt.
CreateWindowHook ist definiert als:
LRESULT CALLBACK CreateWindowHook(int code, WPARAM wParam, LPARAM lParam) {
if (code == HSHELL_WINDOWCREATED) {
// snip
}
return CallNextHookEx(0, code, wParam, lParam);
}
Ich erwarte, dass die proc immer dann, wenn ein neues Fenster oberste Ebene aufgerufen werden, erstellt, aber es wird nie genannt. Was vermisse ich? Danke.
Weitere Informationen:
Laut diesem Artikel - http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx - die App, die WH_SHELL Nachrichten empfangen will, muss sich über Systemparameters registrieren():
MINIMIZEDMETRICS st;
st.cbSize = sizeof(MINIMIZEDMETRICS);
st.iArrange = ARW_HIDE;
BOOL ret;
ret = SystemParametersInfo(
SPI_SETMINIMIZEDMETRICS,
sizeof(MINIMIZEDMETRICS),
&st,
0);
dass Anruf in der dll gemacht wird, oder die App, die die dll lädt, die den hook enthält, oder spielt es keine Rolle?
Danke für die Antwort. WinXP, mein Konto ist ein Admin-Konto. – Number8
Eigentlich kann ein globaler Hook als Nicht-Admin gesetzt werden, aber nur Nicht-Admin-Prozesse werden gehakt. – Andy