desktop aktiv?
-
jo so klappts, danke.
GetForegroundWindow() war mir klar, aber ich musste es ja mit irgendwas vergleichen können

wusste nit dass die klasse progman heißt.
thx
-
aber da hab ich dann glei nochn problem

Eigentlich wollte ich ja prüfen, ob mit rechter oder linker maustaste auf den desktop geklickt wurde. Also hab ich mir gedacht, die klicks sollte ich mit nem windowshook abfangen:. . . switch(nCode) { case HC_ACTION: { if(wparam == WM_RBUTTONDOWN) { MessageBox(NULL, "RBUTTONDOWN", "", MB_OK); if(GetForegroundWindow() == FW) { MessageBox(NULL, "Rdown on desk", "", MB_OK); break; } } } } . . .RBUTTONDOWN kommt die ganze zeit links und rechtsklick, also kann daran was nich stimmen ... und rdown on desk kommt nie ... aber das liegt wohl an was anderem^^
-
kann mir denn niemand bitte sagen, wie ich im MouseHook der mit SetWindowsHookEx() erstellt wurde prüfen kann welche maustaste gedrückt wurde?
mfg jghj
-
jghj schrieb:
if(wparam == WM_RBUTTONDOWN) {wie's genau geht kann ich dir jetzt auch nicht sagen aber das ist jedenfalls verkehrt. in wparam steckt nur eine id (irgend so'n zahlenwert) auf die MOUSEHOOKSTRUCT pointed 'lparam'.
guckst du hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/MouseProc.asp
-
@net: ja genau eine id, irgendso ein Zahlenwert, der zufälligerweise der Maus Nachricht entspricht

MSDN schrieb:
wParam: Specifies the identifier of the mouse message.
Stimmt also so
___________________
Hast du die MouseProc in einer Dll, sonst kommen nur Messages von Fenstern aus deinem Prozess an.
-
D@niel $chumann schrieb:
@net: ja genau eine id, irgendso ein Zahlenwert, der zufälligerweise der Maus Nachricht entspricht

MSDN schrieb:
wParam: Specifies the identifier of the mouse message.
ach so ist das gemeint

na dann sorry für das verwirrende posting
-
aber warum reagiert der dann auch auf linksklick? plan ich nich o_O
-
probier mal dies:
build als console-prog und dann auf den desktop klicken...#include <windows.h> #include <stdio.h> int main() { HWND h1 = FindWindow ("progman", NULL); while (1) { if (GetForegroundWindow() == h1) { if (0x8001 & GetAsyncKeyState (VK_LBUTTON)) puts ("links"); if (0x8001 & GetAsyncKeyState (VK_MBUTTON)) puts ("mitte"); if (0x8001 & GetAsyncKeyState (VK_RBUTTON)) puts ("rechts"); } Sleep (100); } }
-
geil, funzt danke! Kann ich mir den ganzen hookscheiß sparen. GetAsyncKeyState war eben eine funktion die man in dem Fall kennen sollte

Nur versteh ich nicht ganz was das mit dem 0x8001 auf sich hat. Wenn du das in ein oder 2 sätzen erklären könntest wärs nett. Wie man auf sowas kommt interressiert mich halt

-
If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState.
Bei 0x8001 sind genau diese 2 Bits gesetzt - mit der logischen &-Verknüpfung schaust du dann (wenn ich gerade keinen Denkfehler gemacht habe), ob eines dieser beiden Bits im Rückgabewert in GetAsyncKeyState gesetzt ist

-
das hab ich mir schon gedacht, aber wie zur scheiße komm ich selbst auf sowas? -g-
-
... indem du ganz einfach die Doku genau liest und dann noch etwas C beherrscht um das entsprechend umzusetzen

-
flenders schrieb:
mit der logischen &-Verknüpfung schaust du dann (wenn ich gerade keinen Denkfehler gemacht habe), ob eines dieser beiden Bits im Rückgabewert in GetAsyncKeyState gesetzt ist

oh, da hast du sogar einen fehler gefunden. eigentlich wollte ich prüfen, ob beide gesetzt sind, funzt also nur per zufall.
so wollt' ichs haben:if ((0x8001 & GetAsyncKeyState (VK_LBUTTON)) == 0x8001) ...