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

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


person DeveloperInToronto    schedule 31.05.2012    source источник
comment
Попробуйте это, вы должны найти ответ stackoverflow.com /questions/4705428/c-sharp-is-ctrl-key-down   -  person Taldir    schedule 31.05.2012


Ответы (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);
}
person Douglas    schedule 31.05.2012

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

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

person Max    schedule 26.02.2013