C # P / Invoke keyboard_event - PullRequest
       5

C # P / Invoke keyboard_event

3 голосов
/ 04 января 2012

Я использовал некоторый код P / Invoke для имитации нажатия клавиши, но я не могу понять, как нажимать более одной клавиши одновременно. Я пытаюсь смоделировать нажатие и удерживание клавиши CTRL, а затем нажатие клавиши C, а затем V, поэтому просто скопируйте и вставьте.

Код, который я использую до сих пор, таков, но пока мне удается только нажать 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);
}

Буду очень признателен за любые предложения. Спасибо.

Ответы [ 2 ]

6 голосов
/ 04 января 2012

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
4 голосов
/ 04 января 2012

keybd_event следует вызывать дважды для каждого нажатия клавиши, один раз, чтобы нажать его, и один раз, чтобы отпустить, с третьим аргументом, включая бит KEYEVENTF_KEYUP.Вы должны, конечно, нажать обе клавиши, прежде чем отпустить.См. здесь для рабочего примера нажатия клавиши «SHIFT + TAB» с помощью keybd_event в .NET Compact Framework (могут быть небольшие различия).

Обратите внимание, что keybd_event было заменено на SendInput , но все равно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...