Hook wird nicht gesetzt, wieso?

tag'chen.
ich wollte mich eigentlich erst mal an etwas ganz leichtes ran machen, und zwar mit einen hook die WM_QUIT message eines processes abfangen.
hier mal die DLL.
Code:
/******************************************************************************* 

    File    : funcDLL.cpp 
    Remark  : This file contains definitions of hook function. 

*******************************************************************************/ 


//--- Includes ----------------------------------------------------------------- 

#include <windows.h> 
#include "funcDLL.h" 

//--- Globals ------------------------------------------------------------------ 

#pragma argsused 
HINSTANCE hDLLInst; 
HHOOK hHook; 

//--- Prototypes --------------------------------------------------------------- 

LRESULT CALLBACK MessageProc( int, WPARAM, LPARAM ); 

//--- DllMain ------------------------------------------------------------------ 

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { 

    switch( fwdreason ) { 

        case DLL_PROCESS_ATTACH: { 

            hDLLInst = hinstDLL; 
            break; 
        } 

        case DLL_THREAD_ATTACH: { 

            break; 
        } 

        case DLL_PROCESS_DETACH: { 

            break; 
        } 

        case DLL_THREAD_DETACH: { 

            break; 
        } 
    } 
    return true; 
} 

//--- Definition --------------------------------------------------------------- 

LRESULT CALLBACK MessageProc( int nCode, WPARAM wParam, LPARAM lParam ) { 

    MSG *msg = (MSG*)lParam; 

    switch( msg->message ) { 

        case WM_QUIT: { 

            MessageBox( 0, "WM_QUIT was hooked :)", "Atantion!", MB_OK | MB_ICONERROR ); 
            break; 
        } 
    } 
    return( CallNextHookEx( hHook, nCode, wParam, lParam ) ); 
} 

EXPORT bool setHook( DWORD processID ) { 

    hHook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)MessageProc, hDLLInst, processID ); 

    if( !hHook ) { 

        return false; 
    } 
    return true; 
} 

EXPORT bool removeHook( ) { 

    if( ( UnhookWindowsHookEx( hHook ) ) == 0 ) { 

        return false; 
    } 
    return true; 
} 

//--- EXIT ---------------------------------------------------------------------

und hier die anwendung die den hook in einem anbderen setzen soll
Code:
//--- Includes ----------------------------------------------------------------- 

#include <windows.h> 
#include <iostream> 
#include <conio.h> 
#include "funcDLL.h" 
    using namespace std; 

//--- Globals ------------------------------------------------------------------ 

#pragma hdrstop 
#pragma argsused 

#define ESCAPE 27 

char szWindowName[ 128 ]; 
HWND hWnd; 
DWORD dwProcessID; 
int vKey; 

//--- Prototypes --------------------------------------------------------------- 

//--- Main --------------------------------------------------------------------- 

int main(int argc, char* argv[]) { 

    cout << " Enter the name of running window, which you want to hook!" << endl; 
    cout << " WindowName :  "; 
    cin.getline( szWindowName, sizeof( szWindowName ) ); 

    hWnd = FindWindow( 0, szWindowName ); 
    if( !hWnd ) { 

        cout << "\n\n Couldn't found window named \"" << szWindowName << "\"."; 
        Sleep( 2000 ); 
        return 0; 
    } 

    GetWindowThreadProcessId( hWnd, &dwProcessID ); 

    if( (setHook( dwProcessID ) ) ) { 

        cout << "\n\n The MessageHook was successful loaded in process of \"" << szWindowName << "\"."; 
    } 
    else { 

        cout << "\n\n Hooking failed!"; 
        Sleep( 2000 ); 
        return 0; 
    } 

    cout << "\n\n To unhook the prcoess press escape ..."; 
    do { 

        if( kbhit( ) ) { 

            vKey = getch( ); 
        } 
        
    } while( vKey != ESCAPE ); 

    if( ( removeHook( ) ) ) { 

        cout << "\n\n The MessageHook was successful removed from process of \"" << szWindowName << "\"."; 
    } 
    else { 

        cout << "\n\n The MessageHook couldn't successfully removed from process of \"" << szWindowName << "\"."; 
    } 
    Sleep( 2000 ); 
    return 0; 
} 

//--- Definitions -------------------------------------------------------------- 

//--- EXIT ---------------------------------------------------------------------
also das problem ist: er fliegt IMMER bei "Hooking failed " raus.
GetLastError() sagt, "Falscher Parameter"
die dll lade ich statisch ins project, die dllmain wird auch durchlaufen

ich weiss echt nicht wo es hackt...

Gruß Tobi.
 
hi

nur mal so ne Frage.
Koenntest du mir sagen wie EXPORT definiert ist?
 
#ifdef _cplusplus
#define EXPORT extern "C" __declspec( dllexport )
#else
#define EXPORT __declspec( dllexport )
#endif
 
hmm ok komisch also SetWindowsHookEx gibt dir immer NULL zurueck.
hast du schon mal die PID auf korrektheit ueberprueft die du uebergibst?
 
joa, hab mir mal die PID direkt aus dem taskmanager geholt, und reingeschrieben... schlägt jedooch immer noch fehl....

Ideen ???
 
hmm das ist komisch.
Hast schon mal versucht die PID und die andren relevanten Daten in der DLL mit MessageBox auszugeben?, nur um diesen Fehler vollkommen auszuschliessen.
Hab ansonsten grad auch keine Ideen und arbeite leider grad nur unter Linux also hab unter Win kein VisualStudio konfiguriert.
Werd aber wenns sich bis in 2 Wochen nich geloest hab fix installieren, weil ich dann endlich frei hab.
Bis dahin gl und ich hoffe wir koennen es auch so leosen aber wie gesagt ich arbeit zur Zeit ziemlich viel.
 
im cplusplus forum meinten se, es liegt daran das ich ne process id uebergebe, aber es muss ne thread id sein....
wie ermittle ich nun die korekte thread id ???

Gruß Tobi.
 
Zurück
Oben