Einzelnen Beitrag anzeigen

Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#4

Re: WH_CALLWNDPROC-Hook // SystemMenu-Items

  Alt 12. Apr 2008, 16:45
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")
  Mit Zitat antworten Zitat