WM_MOUSEWHEEL mit HOOK

giniman

Grünschnabel
Hi Leute,
ich versuche verzweifelt seit 2 Tagen meine Mausradereignisse mit einem systemweiten Hook abzufangen, jedoch bekomme ich es nicht gebacken. Mausklicks funktionieren einwandfrei (WM_LBUTTONDOWN, WM_RBUTTONDOWN, ...), aber sobald ich abfragen will, ob die "message == WM_MOUSEWHEEL" ist, bekomme ich eine Fehlermeldung, dass WM_MOUSEWHEEL ein nichtdeklarierter Bezeichner ist. Das verstehe ich absilut nicht.

Hier mal mein Code meiner MouseHook.dll
Code:
// MouseHook.cpp : Definiert den Einsprungpunkt für die DLL-Anwendung.
//
#include "stdafx.h"
#include "MouseHook.h"

#pragma data_seg(".HOOKDATA")
HHOOK hook = NULL;
HWND hwnd = NULL;
char ClassN[100];
char WTitle[100];
#pragma data_seg()

#pragma comment(linker, "/SECTION:.HOOKDATA,RWS")

MOUSEHOOK_API void InstallHook(HWND h,char *c, char *w)
{
    hook = NULL;
    hwnd = h;
    strcpy(ClassN,c);
    strcpy(WTitle,w);
    
    hook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle("MouseHook.dll"), NULL);
    if(hook==NULL)
         MessageBox(NULL,"Unable to install hook","Error!",MB_OK);
}

MOUSEHOOK_API void RemoveHook()
{
    UnhookWindowsHookEx(hook);
}

MOUSEHOOK_API LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    if(nCode < 0)
	return CallNextHookEx(hook, nCode, wParam, lParam);

	if(nCode == HC_ACTION)
	{
	    switch (wParam)
                {
		case WM_LBUTTONDOWN:
		case WM_NCLBUTTONDOWN:
			PostMessage(hwnd, WM_LBUTTONDOWN, wParam, lParam);
			break;
                                case WM_MBUTTONDOWN:
			break;
                                case WM_RBUTTONDOWN:
		case WM_NCRBUTTONDOWN:
			PostMessage(hwnd, WM_RBUTTONDOWN, wParam, lParam);
			break;
                                case WM_LBUTTONDBLCLK:
			break;
                                case WM_MBUTTONDBLCLK:
			break;
                                case WM_RBUTTONDBLCLK:
			break;
                                case WM_MOUSEWHEEL:
                                                PostMessage(hwnd, WM_MOUSEWHEEL, wParam, lParam);
                                                break;
		default:
		                break;
                }
	}

	return CallNextHookEx(hook, nCode, wParam, lParam);
}

Ich bin für jegliche Hilfe dankbar.

greetz giniman
 
Zuletzt bearbeitet:
moin


Was für einen Compiler benutzt du denn?

Und normalerweise benutzt man in der Callback Routine return 0 statt break.


mfg
umbrasaxum
 
Hi umbrasaxum,

wow, das ist mal ne schnelle Antwort.

Also ich benutze VisualStudio 6.0 auf Win2k mit SP4.

greetz giniman
 
Für WM_MOUSEWHEEL musst du im Projekt WINVER=0x0400 setzen. Das Mousewheel gab es erst ab 98 vernünftig.
Alternativ kannst du WM_MOUSEWHEEL auch selbst definieren:

#define WM_MOUSEWHEEL 0x020A
 
Hi Endurion,

super danke!
Habe es grad auch selber herausgefunden gehabt, aber danke für die Hilfe.

greetz giniman
 
Zurück