2016-10-29 49 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。最後一個是'0x10'而不是'0x08' – Jim

+0

難道你不能只從鍵處理程序調用鼠標單擊處理程序方法,還是有特殊原因這樣做? –

回答

0

首先確保表單KeyPreview屬性設置爲

enter image description here

要做到你需要調用MOUSEEVENTF_RIGHTDOWNMOUSEEVENTF_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; 
    } 
} 
相關問題