tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
331
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jmapo Tutorials.de Gastzugang
    Hallo erstmal,

    ich wollte mir mal diese Hooks, um Eingaben vor Windows abzufangen, anschauen.
    Dazu habe ich dieses Tutorial gemacht:
    http://www.tutorials.de/forum/c-c-tu...ows-hooks.html

    Ich habe die DLL und die EXE wie im Tutorial, nur funktioniert es nicht so richtig.
    Über den Debugger (Visual Studio 2008) habe ich herausgefunden, dass es wohl zuerst mal
    an der MouseProc callback methode liegt.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        // reagiert bisher immer nur wenn der mauszeiger auf dem fenster ist
        if (nCode < 0)
            return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
     
        if(nCode == HC_ACTION)
        {
            if ( (wParam == WM_LBUTTONDOWN)||(wParam == WM_NCLBUTTONDOWN) )
            {
                    MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*)lParam;
                    HWND caller = FindWindow("Pipette", NULL);
                    // caller wird von findwindow NULL zugewiesen
                    if(caller != NULL)
                        PostMessage(caller, WM_USER+123, 0, MAKELPARAM(mhs->pt.x, mhs->pt.y));
            }
        }
        return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
    }

    Diese Methode wird komischerweise nur aufgerufen, wenn sich mein Mauszeiger über dem Anwendungsfenster befindet.
    Ich habe den Hook aber so installiert, dass er global sein sollte.
    Code :
    1
    
    g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
    Aus der MSDN zu dem letzten Parameter:
    Specifies the identifier of the thread with which the hook procedure is to be associated. If this parameter is zero, the hook procedure is associated with all existing threads running in the same desktop as the calling thread.
    Und die Methode FindWindow liefert mir immer einen nullpointer, obwohl meine exe die Klasse "Pipette" besitzt.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    // Codeausschnitte
    // aus der header datei
    char szClassName[ ] = "Pipette";
     
    // aus der cpp datei
     hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Pipette",           /* Title Text */
               WS_SYSMENU|WS_MINIMIZEBOX, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               WINDOW_WIDTH,                 /* The programs width */
               WINDOW_HEIGHT,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );

    Kann mir jemand weiter helfen?
    Ich komm einfach nicht drauf warum das so reagiert.
    Danke schonmal!
     

  2. #2
    jmapo Tutorials.de Gastzugang
    HWND caller = FindWindow("Pipette", NULL);
    zu
    HWND caller = FindWindow(_T("Pipette"), NULL);
    ersetzen. #include <tchar.h> nicht vergessen.

    MouseProc wird immer global aufgerufen, nur der Debugger von VC2008 springt bei globalen aufrufen irgendwie nicht an.
     

Ähnliche Themen

  1. Hooks, Aspects und Observer
    Von ZodiacXP im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 10.05.10, 14:43
  2. Mal wieder Windows-Hooks
    Von Jellysheep im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 11.02.10, 21:44
  3. [C]Hooks
    Von jojo4ever im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 30.06.08, 15:21
  4. [VB6] Hooks?
    Von VBMichi im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 26.05.06, 13:35
  5. Hooks: Nachrichten bearbeiten
    Von Surma im Forum Delphi, Kylix, Pascal
    Antworten: 0
    Letzter Beitrag: 22.02.04, 20:40