Hi,
bist du dir schon sicher, dass dein WndProc richtig definiert ist? Hooks habe ich ehrlichgesagt erst einmal gebraucht (um TerminateProcess zu hooken), ist aber schon lange her, deswegen weiss ich da nicht mehr so gut bescheid.
In Delphi habe ich das WndProc auch noch nie wirklich gebraucht, in C++ geht es aber soo:
Code:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Bei dir sind die Parameter ja etwas anders:
WndProc(nCode : Integer; wParam: longint; lParam : longint): LRESULT
Und so würde auf das Systemmenü zugreifen:
Code:
hMenu = GetSystemMenu (hwnd, FALSE) ;
AppendMenu (hMenu, MF_SEPARATOR, 0, NULL) ;
AppendMenu (hMenu, MF_STRING, IDM_SYS_ABOUT, TEXT ("Info über...")) ;
AppendMenu (hMenu, MF_STRING, IDM_SYS_HELP, TEXT ("Hilfe...")) ;
AppendMenu (hMenu, MF_STRING, IDM_SYS_REMOVE, TEXT ("Erweiterungen recyceln")) ;
....
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_SYSCOMMAND:
switch (LOWORD (wParam))
{
case IDM_SYS_ABOUT:
MessageBox (hwnd, TEXT ("Ein Menü für arme Leute\n")
TEXT ("(c) Charles Petzold, 1998"),
szAppName, MB_OK | MB_ICONINFORMATION) ;
return 0 ;
case IDM_SYS_HELP:
MessageBox (hwnd, TEXT ("Hilfestellung noch nicht implementiert!"),
szAppName, MB_OK | MB_ICONEXCLAMATION) ;
return 0 ;
case IDM_SYS_REMOVE:
GetSystemMenu (hwnd, TRUE) ; // zurück zum Original
return 0 ;
}
break ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
(aus dem Buch "Windows Programmierung - 5. Auflage")