2016-08-15 15 views
-1

私は、キーを画面上の別の位置に移動させてから、すぐに非常に速い速度(毎秒50回以上)で戻すようにしようとしています。これは現在のコードです。それはちょうど私が入れた場合は(私は私のマウスの自由な動きを持っているだけで周りの0,0 /でそれを保持していない)、その後、私のマウスの位置を変更することがあった場所へと更新されます。このコードでマウスの位置を最初の位置に戻す

#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); 
} 
} 

最後に睡眠(100)しても一貫して動作しますが、10秒ごとにマウスが0,0に戻ってくるでしょう。

編集 Visual Studioでコンソールアプリ

+0

マウスはC++カテゴリではありません。あなたは、OS環境についてもっと教えてくださいと思いますか? – harper

+1

どのフレームワークを使用していますか?与えたコードは有効なC++ではありません。 [mvce](http://stackoverflow.com/help/mcve)を提供してください。 –

+0

前に[[(質問する)](http://stackoverflow.com/help/how-to-ask)と[this(mcve)](http://stackoverflow.com/help/mcve)をお読みくださいあなたが地域社会からより多くのより良い答えを得るのを助けるものとして、尋ねる。これはWindowsの実行可能ファイルのようですが、 'GetAsyncKeyState'はそのスタックに"プッシュ "されている可能性が高く、呼び出し回数が多すぎます。この関数は、一時的な値を生成して保持し、リフレッシュされるのを待ちます。 [ドキュメントに従って](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v = vs.85).aspx)、変更を確実にするために関数呼び出しに頼るべきではありません – Bonatti

答えて

0

参照ドキュメント

GetAsyncKeyStateの戻り値

タイプ:関数が成功した場合SHORT

、戻り値はかどうかを指定しますキー が最後にGetAsyncKeyStateを呼び出してから押され、 r キーは現在上下にあります。最上位ビットが設定されている場合は、 キーがダウンし、最下位ビットが設定されている場合は、前のGetAsyncKeyStateの呼び出し後にキーが になりました。しかし、 はこの最後の動作に頼るべきではありません。詳細については、 備考を参照してください。

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

SetCursorPos(0,0)SetCursorPos(p.x, p.y)が戻ってあなたがGetCursorPosを呼び出したときにそれがあった場所にカーソルを移動させながら、左上隅にカーソルを移動します。マウスの位置は変更されません。

これらのWinAPI関数をコンソールプログラムで使用するのは一般的ではありません。