WM_XBUTTONDOWN Problem
-
1. Solltest Du aktuelle SDKs zu Deinem Compiler verwenden!
2. Wenn die entsprechenden HIWORD Daten nicht gesetzt werden liegt das evtl. an Deinem Maustreiber, der evtl. eben nur mit der entsprechenden Maussoftware zusammenarbeitet, die mitgeliefert wird.
Mein Maustreiber verhält sich korrekt...
-
Hallo Martin,
also das ist die aktuelle Version von cygwin.
Müsste mir wohl mal das orginal Package von MS runterladen.
Und mein Maustreiber ist eigentlich richtig installiert und sonstwas. Ist standard Logitech Mouseware. Andere Programme reagieren ja auch auf die Maustasten korrekt... irgendwas mach ich falsch ..
-
Ich habe keine Ahnung was mit cygwin installiert wird. Wenn WM_XBUTTONDOWN nicht dabei ist muss uraltes Zeug dabei sein!
Was meinst Du damit? Wenn Du die Funktionen über die Mouseware von Logitech definierst dan ist doch klar, das auch andere Programme darauf reagieren, weil die Logitech Software es eben so macht.
Starte Notepad, besorge Dir Spy++ und beobachte was für Mausnachrichten in dem Notepad Fenster ankommen...
Wenn eben das HIWORD nicht korrekt definiert ist, beschwere Dich beim Hersteller des Treibers
-
Ich versteh das einfach nich.
Habs jetzt mal so gemacht, wie du gesagt hast. Also Notepad aufgemacht und mir die Messages angeschaut.
Notepad bekommt die WM_XBUTTONDOWN Messages, die ich ja auch überwachen möchte. In Spy++ steht folgendes:P WM_XBUTTONDOWN fwKeys:MK_XBUTTON1 [wParam: 00010020]
P WM_XBUTTONDOWN fwKeys:MK_XBUTTON2 [wParam: 00020040]so, das ist genau die Unterscheidung, die ich brauche. Also wParam ist unterschiedlich. Wenn ich in meinem MouseHook aber mir die wParam ausgeben lasse, bekomm ich immer nur "523", für beide Tasten.
Irgendwas läuft beimir mit dem HIWORD und LOWORD falsch. Wenn ich HIWORD(wParam) ausgebe, bekomm ich immer 0. Bei LOWORD(wParam) immer "523". In der MSDN steht folgendes drin für die Werte von wParamMK_XBUTTON1 = &H20
MK_XBUTTON2 = &H40Gibts doch nicht!

Und wie kommt der immer auf 523, auf den Wert komme ich über diese Werte da oben niemals...erbitte nochmal um Hilfe

Danke
-
Dein schmeiß mal bitte den Header Deiner Window Proc und ein Stück mehr Code rüber.
BTW: Du kannst Spy++ auch auf Deine Anwednung anwenden...

-
Hi Martin,
also ich hab das ganze in einer DLL.
#define WM_XBUTTONDOWN 0x020B #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) //Die beiden Sachen hab ich aus den orginal Windows Header Dateien, da bei mir alles was mit XBUTTON zu tun hat, nix drin war. LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam){ JNIEnv * env; MSLLHOOKSTRUCT * m = (MSLLHOOKSTRUCT*)lParam; int a; if(nCode < 0) return CallNextHookEx(NULL, nCode, wParam, lParam); if (jvm->AttachCurrentThread((void **)&env, NULL) >= 0) { if(nCode == HC_ACTION){ switch (wParam){ case WM_MOUSEWHEEL: a = env->CallIntMethod(hookObj, processKeyID, (int)m->mouseData, false); break; case WM_LBUTTONUP: env->CallVoidMethod(hookObj, onHotKeyID, -10, false); break; case WM_RBUTTONUP: env->CallVoidMethod(hookObj, onHotKeyID, -30, false); break; case WM_MBUTTONUP: env->CallVoidMethod(hookObj, onHotKeyID, -20, false); break; case WM_XBUTTONDOWN: printf("%d", (WORD)HIWORD(wParam)); //Hier kommt immer 0 bei HIWORD und 523 bei LOWORD. env->CallVoidMethod(hookObj, onHotKeyID, (int)GET_KEYSTATE_WPARAM(wParam), false); break; default: break; } } } return CallNextHookEx(NULL, nCode, wParam, lParam); }So das ist die Funktion. Leider bekomm ich immer 523...
-
Obwohl Du nicht gesagt hast, dass es ein Hook ist sehe ich keinerlei Probleme.
Warum hast Du WM_XBUTTONDOWN selbst definiert? Der Wert ist korrekt.
Hast Du evtl. vergessen _WIN32_WINNT aus einen Wert größer 0x0500 zu setzen?
-
_WIN32_WINNT war auf 0x0400 und deshalb kannte er keine XBUTTON Message udn dergleichen. Habs jetzt auf 0x0501 gesetzt und jetzt kennt er die ganzen Macros und Messages. Danke für den Hinweis, darauf wäre ich glaub ich niemals gekommen.
Aber mein Problem besteht immernoch. Ich bekomm einfach keine Unterscheidung zwischen den beiden Maustasten. Aber es gibt sie, in Wordpad und Spy++ hab ich es ja mitbekommen...
hab mal grade Spasseshalber lParam ausgeben lassen (dadrin soll die Mausposition stecken). Naja bekomme den gleichen Wert, egal welche Taste von den zwei und egal wo der Mauszeiger steht... gibts doch nicht, irgendwas stimmt doch nicht
Edit: ha!
ich lasse mir grade mal "m->mouseData" ausgeben in meinem case WM_XBUTTONDOWM und siehe da, ich habs !
einmal bekomm ich 131072 und einmal 65536! Nach auflösen nach HIWORD bekomm ich eine 2 und eine 1, genau wie es sein soll.
Na endlich ...
-
Jo! Logisch!
Da war ich blind. Ist ja klar, dass der wParam werd der von MouseProc ist und da steht in der Doku klar:wParam
[in] Specifies the identifier of the mouse message.Und das ist eben 523==WM_XBUTTONDOWN!
-
jo stimmt. Ich hab das total verpeilt ...
Naja jetzt bin ich schlauer und man lernt doch am besten wenn man stundenlang rumprobiert und dann kommt endlich die Erleuchtung. Das werd ich jedenfalls nicht mehr vergessen