2016-08-15 3 views
-1

Ich versuche, Schlüssel die Maus an eine andere Position auf dem Bildschirm bewegen und dann sofort zurück, mit einer sehr schnellen Rate (50 + mal pro Sekunde) Dies ist mein derzeitiger Code .Bewegen Mausposition dann zurück zur Anfangsposition

#include "stdafx.h" 
#include <iostream> 
#include <windows.h> 

int main() 
{ 
POINT p; 

for(; ;) 
{ 

if (GetAsyncKeyState(0x57) < 0) 
{ 
    GetCursorPos(&p); 
    std::cout << "W key pressed";   
    SetCursorPos(0, 0); 
    SetCursorPos(p.x, p.y); 
    Sleep(100); 
} 
} 

Mit diesem Code meiner Mausposition, es wird nur dann aktualisieren, zu ändern, wo es war (ich habe keine freie Bewegung meiner Maus und halte sie nur auf/um 0,0) Wenn ich setze Schlaf (100) am Ende dann klappt es ziemlich durchgängig, aber alle ~ 10 Sekunden bleibt meine Maus bei 0,0 stecken, je mehr ich den Schlaf aufstelle, desto weniger passiert das, aber warum?

bearbeiten Konsolenanwendung in Visual Studio

+0

Maus ist keine C++ - Kategorie. Denkst du, du solltest mehr über die Betriebssystemumgebung erzählen? – harper

+1

Welchen Rahmen verwenden Sie? Weil der Code, den Sie geben, C++ nicht gültig ist. Stellen Sie eine [mvce] (http://stackoverflow.com/help/mcve) bereit. –

+0

Bitte lesen Sie [diese (wie Sie fragen)] (http://stackoverflow.com/help/how-to-ask) und [diese (mcve)] (http://stackoverflow.com/help/mcve) vorher fragen, da diese Ihnen helfen werden, mehr und bessere Antworten von der Gemeinschaft zu bekommen. Dies scheint Windows-ausführbare Datei zu sein, der 'GetAsyncKeyState' wird wahrscheinlich auf seinen Stack zurückgeschoben und es werden zu viele Anrufe getätigt. Die Funktion würde dann einen temporären Wert liefern und behalten, der darauf wartet, aktualisiert zu werden. [Laut Dokumentation] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293 (v = vs.85) .aspx) sollten Sie sich nicht auf den Funktionsaufruf verlassen, um Änderungen zu gewährleisten – Bonatti

Antwort

0

Siehe Dokumentation für GetAsyncKeyState

Rückgabewert

Typ: KURZ

Wenn die Funktion erfolgreich ist, gibt der Rückgabewert, ob die Der Schlüssel wurde seit dem letzten Aufruf von GetAsyncKeyState gedrückt r Der Schlüssel ist momentan auf oder ab. Wenn das höchstwertige Bit gesetzt ist, ist der Schlüssel inaktiv, und wenn das niedrigstwertige Bit gesetzt ist, wurde der Schlüssel nach dem vorherigen Aufruf von GetAsyncKeyState gedrückt. Sie sollten sich jedoch nicht auf dieses letzte Verhalten verlassen: ; Weitere Informationen finden Sie unter Bemerkungen.

Beispiel

if (GetAsyncKeyState('W') & 0x8000) 
{ 
    std::cout << "W key pressed\n"; 
} 

SetCursorPos(0,0) bewegt den Cursor nach links oben, während SetCursorPos(p.x, p.y) den Cursor bewegt sich zurück, wo es war, als Sie GetCursorPos genannt. Sie werden keine Änderungen an der Mausposition sehen.

Es ist nicht üblich, diese WinAPI-Funktionen in einem Konsolenprogramm zu verwenden.

Verwandte Themen