Linke Maustaste außerhalb der Konsole abfragen
-
Hallo,
ich möchte außerhalb der Konsole eine linke Maustastenklick abfangen.
Sobald ich also außerhalb der Konsole einen linksklick mache, soll etwas passieren.Folgenden Code habe ich bis jetzt, aber der klappt irgendwie nicht.
Das GetAsyncKeyState(VK_LBUTTON); speichert beim Mausclick keine 1, sodass ich nicht in die erste If-Anweisung reinkomme. Es klappt nur direkt am Anfang einmal, wenn ich die Zahl bestätige.#include <iostream> #include <Windows.h> #include <conio.h> using namespace std; int main () { int befehl; cout << "Zahl eingeben und Enter druecken"; cin >> befehl; short u; while (true) { u = GetAsyncKeyState(VK_LBUTTON); if (u == 1) { if (befehl == 1) { // .. tue etwas } u = 1; } } }
-
Vielleicht solltest du die Doku zu GetAsyncKeyState nochmal lesen:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspxSpeziell
Return value
Type: SHORT
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. 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. However, you should not rely on this last behavior; for more information, see the Remarks.
-
hustbaer schrieb:
Vielleicht solltest du die Doku zu GetAsyncKeyState nochmal lesen:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspxSpeziell
Return value
Type: SHORT
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. 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. However, you should not rely on this last behavior; for more information, see the Remarks.
Danke für deine Antwort.
Was genau kann ich nun tun, um das was beschrieben wurde zu verhindern?
Oder gibt es eine Alternative um einen Mausklick (in einer Schleife) festzustellen?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du GetAsyncKeyState verwenden willst, dann solltest du auf jeden Fall die Bits maskieren an denen du interessiert bist.
Üblicherweise nimmt man da nur eines, entweder das "ist gerade gedrückt" Bit oder das "wurde seit dem letzten GetAsyncKeyState Aufruf gedrückt" Bit, aber nicht beide.Ansonsten kannst du es mal mit Raw Input versuchen. Das sollte auch mit einer Konsolenapplikation gut funktionieren.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645543(v=vs.85).aspx
Wenn du WM_INPUT empfangen willst brauchst du natürlich ein Fenster. Das muss aber nicht sichtbar sein.
-
hustbaer schrieb:
Wenn du GetAsyncKeyState verwenden willst, dann solltest du auf jeden Fall die Bits maskieren an denen du interessiert bist.
Üblicherweise nimmt man da nur eines, entweder das "ist gerade gedrückt" Bit oder das "wurde seit dem letzten GetAsyncKeyState Aufruf gedrückt" Bit, aber nicht beide.Ansonsten kannst du es mal mit Raw Input versuchen. Das sollte auch mit einer Konsolenapplikation gut funktionieren.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645543(v=vs.85).aspx
Wenn du WM_INPUT empfangen willst brauchst du natürlich ein Fenster. Das muss aber nicht sichtbar sein.Danke. Wie sehe das genau aus?
-
...
-
Swordfish schrieb:
infopauer schrieb:
Danke. Wie sehe das genau aus?
In Visual Studio viel Schwarz und ein wenig Blau und Rot auf weißem Grund.
Wäre nett, wenn es mir jemand demonstrieren könnte.
-
VIel besser:
ReadConsoleInput
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961(v=vs.85).aspx
-
infopauer schrieb:
Danke. Wie sehe das genau aus?
Lern C++
-
#include <iostream> #include <Windows.h> using namespace std; int main () { while(1) { Sleep(1); // Ohne Sleep 100% CPU Auslastung bei älteren Computern if ( GetAsyncKeyState(VK_LBUTTON) { cout<<"Link Maustaste wurde gedrueck\n"; } } }
-
fenster position und größe deines wnd abfragen und dann checken ob die maus sich auserhalb befindet.
stichwort GetWindowRect. obs mit consolen wins funct kA