2016-10-29 2 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_RIGHTUP» после «MOUSEEVENTF_RIGHTDOWN». И верхний - это '0x10', а не' 0x08' – Jim

+0

Не можете ли вы просто вызвать метод обработчика мыши с помощью обработчика ключей или есть особая причина сделать это таким образом? –

ответ

0

Сначала убедитесь, что свойство формы KeyPreview устанавливается в Истинного

enter image description here

Для имитации щелчка нужно вызвать MOUSEEVENTF_RIGHTDOWN и MOUSEEVENTF_RIGHTUP вот так. (также заметить, я использую 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; 
    } 
} 
Смежные вопросы