2012-01-04 60 views
3

我一直在使用一些P/Invoke代碼來模擬按鍵,但我無法解決如何一次按多個鍵的問題。我試圖模擬按下並按住CTRL,然後按C然後按V,所以只需複製並粘貼。C#P /調用keyboard_event

我使用至今的代碼是這樣的,但到目前爲止,我只能設法按CTRL,握不住它,然後按下C和V:

[DllImport("user32.dll", SetLastError = true)] 
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 

public const int VK_LCONTROL = 0xA2; 

static void Main(string[] args) 
{ 
    keybd_event(VK_LCONTROL, 0, 0, 0); 
} 

我會很感激的任何建議。謝謝。

+0

順便說一句:最後一個參數是一個'UIntPtr'。 – ordag 2012-01-04 13:07:45

回答

6

dwFlags控制是否釋放密鑰。

嘗試以下操作:

keybd_event(VK_CONTROL, 0, 0, 0);// presses ctrl 
keybd_event(0x43, 0, 0, 0); // presses c 
keybd_event(0x43, 0, 2, 0); //releases c 
keybd_event(VK_CONTROL, 0, 2, 0); //releases ctrl 
+0

如何獲得第二個參數? – deadfish 2012-03-28 18:03:54

4

keybd_event應該爲每個按鍵調用兩次,一次按下,一次釋放它,第三個參數包括位KEYEVENTF_KEYUP。在釋放之前,您當然應該按下兩個鍵。有關使用.NET Compact Framework上的keybd_event按下「SHIFT + TAB」的示例,請參閱here(可能略有不同)。

請注意,keybd_event已被SendInput取代,但仍應可用。

+0

+1'SendInput'調用起來比較棘手。更容易堅持'keybd_event'。 – 2012-01-04 13:28:51