2016-10-29 26 views
0

特定のキーが押されたときにマウスのクリックをシミュレートしようとしています。マウスをシミュレートするキーが押されたときにクリックします。

が、私はこれを試してみました:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo); 

private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
private const int MOUSEEVENTF_LEFTUP = 0x04; 
private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
private const int MOUSEEVENTF_RIGHTUP = 0x08; 

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.Insert: 

      Point pt = Cursor.Position; 
      int X = Cursor.Position.X; 
      int Y = Cursor.Position.Y; 

      mouse_event(MOUSEEVENTF_RIGHTDOWN, X, Y, 0, 0); 
      break; 
    } 

それは動作しているようだしない、と私は他の解決策を見つけることができませんでした。

+0

アプリケーションがフォアグラウンドにある場合にのみ呼び出されますイベント。それはあなたの意図ですか? – SimpleVar

+0

クリックをシミュレートするには、おそらく 'MOUSEEVENTF_RIGHTDOWN'の後に' MOUSEEVENTF_RIGHTUP'を実行する必要があります。そして、上のものは '0x08'の代わりに' 0x10'です – Jim

+0

キーハンドラからマウスクリックハンドラメソッドを呼び出すことはできませんか?そうしなければならない特別な理由はありますか? –

答えて

0

まずフォームKeyPreviewプロパティは、あなたがそうのようMOUSEEVENTF_RIGHTDOWNMOUSEEVENTF_RIGHTUPを呼び出す必要があり、クリックのシミュレーションを行うには真の

enter image description here

に設定されていることを確認してください。 (また、私は道に沿ってUINT使用気づか)

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); 

private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
private const int MOUSEEVENTF_LEFTUP = 0x04; 
private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
private const int MOUSEEVENTF_RIGHTUP = 0x10; 

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.Insert: 

      int X = Cursor.Position.X; 
      int Y = Cursor.Position.Y; 

      mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, (uint)X, (uint)Y, 0, 0); 
      break; 
    } 
} 
関連する問題