Windows Hook zu Winamp



  • Hallo zusammen,

    ich versuche fieberhaft einen Windows Hook in Winamp einzuklinken, um in meiner Applikationen die Winamp Messages zu empfangen, bekomme es aber einfach nicht hin. Meine Callback Funktion wird nie aufgerufen.

    (Das PostMessage könnt ihr erstmal vergessen; hatte eine MessageBox eingebaut; anstatt von WH_CALLWNDPROC hatte ich auch schon WH_CALLWNDPROCRET und WH_GETMESSAGE eingebaut. bei den ersten beiden ist nichts passiert, bei GetMessage hat sich in der Winamp GUI nichts mehr getan, bis ich meine Applikation geschlossen hab, die Callback-Funktion wurde trotzdem nicht aufgerufen.)

    Hier mein Code, er befindet sich in einer dll, die eigentliche Applikationen in einem anderen Projekt:

    HHOOK hWinampHook = NULL;
    HANDLE hInstance;
    HWND hTargetWnd = NULL;
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved )
    {
    	switch( ul_reason_for_call )
    	{
            case DLL_PROCESS_ATTACH:
                hInstance = (HINSTANCE)hModule; 
                break; 
            case DLL_THREAD_ATTACH:
                break; 
            case DLL_PROCESS_DETACH:
                break; 
            case DLL_THREAD_DETACH:
                break; 
    	}
    
        return TRUE;
    }
    
    LRESULT CALLBACK HookWinampWnd(
    	int nCode,      // handle to window
    	WPARAM wParam,  // first message parameter
    	LPARAM lParam   // second message parameter
    )
    {
    	PostMessage(hTargetWnd, WM_WINAMP, NULL, NULL);
    
    	// pass to next hook
    	return CallNextHookEx(NULL, nCode, wParam, lParam);
    }
    
    void SetHook(HWND hMainWnd)
    {
    	hTargetWnd = hMainWnd;
    
    	// get winamp handle
    	HWND hwndWinamp = ::FindWindow("Winamp v1.x",0);
    	if(hwndWinamp == NULL)
    	{
    		return;
    	}
    
    	DWORD dwWAThreadId = GetWindowThreadProcessId( hwndWinamp, NULL );
    
    	hWinampHook = SetWindowsHookEx(
    		WH_CALLWNDPROC,
    		(HOOKPROC) HookWinampWnd,
    		(HINSTANCE)hInstance, 
    		dwWAThreadId);
    }
    

    Wäre super wenn hier jemand einen Fehler entdeckt.

    Danke und schönen Gruß

    MrFlow


Anmelden zum Antworten