Bereiche für Child Windows begrenzen



  • Ich möchte hier einen Zwischenbericht abgeben.
    Bin der Sache schon näher gekommen. Ich arbeite momentan mit Hook-Funktionen. Auf diese Weise kann ich Fensternachrichten eines anderen Prozesses abfangen. Hier mein Code:

    #include "stdafx.h"
    
    HHOOK hWndProc;
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    		hWndProc = NULL;
    		break;
    
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		if(hWndProc != NULL)
    			UnhookWindowsHookEx(hWndProc);
    		break;
    	}
    	return TRUE;
    }
    
    // Funktionsprototypen
    extern "C" __declspec(dllexport) int CatchWindowMessage(HWND *ptargetWnd);
    LRESULT WINAPI WndProc(int nCode, WPARAM wParam, LPARAM lParam);
    
    extern "C" __declspec(dllexport) int CatchWindowMessage(HWND *ptargetWnd)
    {
    	DWORD targetThread = GetWindowThreadProcessId(ptargetWnd, NULL);
    	hWndProc = SetWindowsHookEx(WH_GETMESSAGE, &WndProc, NULL, targetThread);
    	return 0;
    }
    
    /**************************************************************** 
      Hook procedure 
     ****************************************************************/ 
    
    LRESULT WINAPI WndProc(int nCode, WPARAM wParam, LPARAM lParam) 
    {
    	MSG *msg = (MSG*)lParam;
    	if (nCode < 0)  // do not process message 
            return CallNextHookEx(hWndProc, nCode, wParam, lParam); 
    
        switch (nCode) 
        { 
            case HC_ACTION:
    			switch(msg->message)
    			{
    				case WM_RBUTTONDOWN:
    					MessageBox(NULL, "Right mouse button down", "WM Info", MB_OK);
    					break;
    
    				case WM_MOUSEMOVE:
    					// Wird hineingesprungen [X]
    					break;
    				case WM_MOVING:
    					MessageBox(NULL, "Wnd moved", "WM Info", MB_OK);
    			}
                break; 
    
            default: 
                break;
        } 
    
        return CallNextHookEx(hWndProc, nCode, wParam, lParam); 
    }
    

    Einen Mouseklick, sowie das Maus über das Fenster hinwegbewegen bekomme ich als Message abgefangen. Aber die Nachricht WM_MOVING komischerweise nicht. Hat jemand eine Erklärung? In der Onlinehilfe steht leider nicht welche NAchrichten mit der Hook-Funktion abgefangen werden können.

    Danke 🙂


Anmelden zum Antworten