A
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