Как удерживать клавишу Ctrl в коде

Я пишу модульный тест, и определенная функция будет вызываться в глубине стека, если (Control.ModifierKeys == Keys.Control).. Я могу добавить флаг или что-то для конкретного случая выполнения модульного теста, но это было бы слишком грязно! Как я могу установить ModifierKeys для Ctrl через код? Я использую C#.Net 4.0.

2 ответа

Решение

Вы можете использовать P/Invoke для вызова keybd_event функция для синтеза нажатий клавиш.

Сначала объявите следующее:

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

public const uint KEYEVENTF_KEYUP = 0x02;
public const uint VK_CONTROL = 0x11;

Затем в своем тесте используйте:

// Press the Control key.
keybd_event(VK_CONTROL, 0, 0, 0);

try
{
    // Perform test.
}
finally
{
    // Release the Control key.
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}

Удерживать нажатой: Keyboard.PressModifierKeys(ModifierKeys.Control);

Релиз: Keyboard.ReleaseModifierKeys(ModifierKeys.Control);

Другие вопросы по тегам