2017-05-02 13 views
0

左マウスボタンが押されているかどうかをスキャンし、その後、左マウスボタンを送信し、それ以降もスキャンするプログラムを作成しています。問題は、左マウスボタンを送信しているので、左マウスボタンがもう押されていないため、プログラムは続行されません。左マウスボタンを送信した後、マウスの左ボタンを検出します。

if(GetKeyState(VK_LBUTTON) < 0){ 
    Sleep(10); 
    mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); 
    //Rest of code 
} 

がどのように私はこの後にダウンしているマウスの左ボタンを検出することができます:ここでは

は、いくつかの偽のですか?私はドライバーを使用する必要がありますか?

+0

_「マウスの左ボタンがもう押されていないため、プログラムは続行されません」_私は従いません。 –

+0

それはまだ物理的なマウスで押されている、私は物理的なマウスのボタンが押されていることを検出することができたかと思っていた。 – Ian

+1

'MOUSEEVENTF_LEFTUP'を送信しません。 –

答えて

0

プログラムのご説明を読んだから、ここでしか私の実装です。 のWindows APIの使用:

while (true) { 
    //check if left mouse button is down 
    if (GetKeyState(VK_LBUTTON) & 0x8000) { 
     //send left mouse button up 
     //You might want to place a delay in here 
     //to simulate the natural speed of a mouse click 
     //Sleep(140); 

     INPUT Input = { 0 }; 
     ::ZeroMemory(&Input, sizeof(INPUT)); 
     Input.type = INPUT_MOUSE; 
     Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; 
     ::SendInput(1, &Input, sizeof(INPUT)); 
    } 
} 

をあなたは他のことをしたい場合は、強制的にクリックしてドラッグから人々を停止しているときに、スレッドで呼び出す関数にこのコードを配置することができます。

void noHoldingAllowed() { 
    //insert code here used above... 
} 

int main(void) { 
    std::thread t1(noHoldingAllowed); 
    //other stuff... 

    return 0; 
{ 
+0

ありがとう、これは働いた:) – Ian

0

私はこのコードをテストしていませんが、あなたはループ再放送しながら、開催Lmouseボタンを持っている場合は、その後のmouseupをトリガするif文をトリガーする場合ので、それは

while(programIsRunning) 
{ 
    if(GetKeyState(VK_LBUTTON) < 0){ 
    Sleep(10); 
    mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); 
    // rest of the code 
} 

それが動作するはずですが動作するはずですイベント。

注: あなたはwhile(GetKeyState(VK_LBUTTON) < 0){//code here}

+0

'if(GetKeyState(VK_LBUTTON)<0)'は既に 'while(1)'ループにあります。私は 'while(GetKeyState(VK_LBUTTON)<0)'を試してみましたが、うまく動作しませんでした。if文と同じでした。 – Ian

+0

mouseUpイベントではどうしますか? –

+0

私はあなたが何を意味するか分からない、私はちょうどmouseUpを送信し、残りのifステートメントを実行したい。 – Ian

1

ちょうどフラグを使用して行うことができるかもしれない:

bool lButtonWasDown=flase; 

if(GetKeyState(VK_LBUTTON) < 0){ 
    Sleep(10); 
    lButtonWasDown = true; 
    mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); 
} 

if (lButtonWasDown) 
{ 
    // rest of the code for lButtonWasDown = true 
} 
関連する問題