2016-04-22 10 views
-1

私は、プログラムの外でマウスクリックを無視できるバックグラウンドで座っているプログラムを作ろうとしています。Windowsでマウスクリックを無視するにはどうすればよいですか? (C++)

WindowsにこれをC++でどう伝えますか? 私は既にプログラムをマウスのクリックに認識させました。ちょうどそれを無視する方法ではありません。

なぜなら、私のマウスには、一度だけクリックすると誤ってダブルクリック(またはそれ以上)する欠陥があるからです。

基本的に、私がマウスでクリックしたプログラムを登録すると、最初のクリックスルーが行われますが、そのボタンを(約200ミリ秒後には無視されます)無効にします。

可能であれば、私は外部ライブラリの使用を避けたいと考えています。 Visual Studioに付属の標準のもののみ。

ありがとうございました!

+0

@bku_drytt私は十分に明確ではないことを申し訳ありません。私はWindowsがマウスクリックを無視できるようにする方法を知りたいだけです。私はプログラム方法を知っており、私は自分自身でプログラムを作ります。私はちょうど問題を解決するために出かける方法を知らない。 – CandyCreep

+0

@ニッキーC私はそれが解決策であることは知っていますが、とにかくそのようなプログラムを手にすることは良いことです。それが他の状況で必要な場合は、これを行うための知識を持っていることも良いでしょう。 – CandyCreep

答えて

2

あなたはlow-level mouse hookを使用することができます。

// Variable to store the hook handle 
HHOOK miHook; 

// This is the hook procedure 
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { 
    if(nCode == HC_ACTION) { 
     MSLLHOOKSTRUCT &msll = *(reinterpret_cast<MSLLHOOKSTRUCT*>(lParam)); // In there is more context if you need it 

     if(wParam == WM_LBUTTONDOWN) { 
      // Do your logic here 
      if(letsIgnoreThisClick) { 
       return -1; // This will make the click be ignored 
      } 
     } 
    } 

    return CallNextHookEx(miHook, nCode, wParam, lParam); // Important! Otherwise other mouse hooks may misbehave 
} 

// This is how you install the hook 
SetWindowsHookEx(WH_MOUSE_LL, reinterpret_cast<HOOKPROC>(&LowLevelMouseProc), hInstance, 0); 

// And this is how you would remove the hook again 
UnhookWindowsHookEx(miHook); 

このコード例のように、あるもちろん、しかし、あなたのニーズに調整する必要があり、個々の部品が右に配置する必要が使用することはできませんあなたのコード内の場所。

SetWindowsHookExの備考欄もお読みください。関数がある場所にDLLを作成する必要があります(メインコードから読み込むことができます)。私の例のhInstanceは、フックプロシージャを含むモジュールのインスタンスハンドルでなければなりません。また、フックが正しく機能するように、メッセージをポンピングする必要があります!

+0

完璧!私はいくつかの異なる試行の後に動作するようになった。本当にコメントも大好きです。それは仕事を非常に簡単にしました。あなたの助けをありがとう! – CandyCreep

+0

ようこそ。申し訳ありませんが、私はコードで2つの間違いがあったことに気付きました(WM_L はありません.msllは宣言されていません)。 – CherryDT

関連する問題