2015-11-19 3 views
2

Я пытаюсь имитировать пользователя, нажимая клавишу, удерживая ее на определенный промежуток времени, а затем отпуская ее. Я попытался реализовать это с помощью SendKeys.Send(), но не могу понять, как контролировать длительность нажатия клавиши.Имитирующий вход: нажатие клавиши, удерживание и отпускание

Я не хочу просто продолжать отправлять один и тот же ключ снова и снова; Я хочу одно ключевое слово и одно событие с ключом.

Например, у меня есть такой код:

//when i press this button, will sent keyboard key "A", i want to hold it until i release 

private void start_btn_Click(object sender, EventArgs e) 
{ 
    testSent(); 
} 

//how should i hold it for a timer??? 
private void testSent() 
{ 
    SendKeys.Send("A"); 
} 
+0

Извините, но я не понимаю, что вы пытаетесь сделать. Можете ли вы показать примерный код таймера того, что вы пытаетесь сделать? В одном из комментариев к коду вы сказали «я хочу держать его до тех пор, пока не выпустят», и еще один комментарий говорит «как я должен держать его за таймер?», Разве они не конфликтуют? –

+0

Простите меня! Приходи еще?! –

ответ

0

Если вы хотите, получающая программу, чтобы увидеть только событие ключа вниз с последующим ключом вверх событиями некоторого периода времени спустя, вы будете нуждаться другой API, чем SendKeys. Он передает только целые нажатия клавиш, т. Е. С помощью клавиш и клавиш. Возможно, вы сможете делать то, что хотите, p/вызывая собственную функцию Windows SendInput().

Я не использовал его, но вы можете обнаружить, что Windows Input Simulator - полезная оболочка управляемого кода для API, в которой вы нуждаетесь.

Предполагая, что вы выяснить как закончить соответствующие ключевые события, делая это на приуроченной основе тривиальна:

private static readonly TimeSpan _keyDownInterval = ...; // initialize as desired 

private async void start_btn_Click(object sender, EventArgs e) 
{ 
    SendKeyDown(); 
    await Task.Delay(_keyDownInterval); 
    SendKeyUp(); 
} 

// These two are implemented using whatever mechanism you prefer, 
// e.g. p/invoke `SendInput()`, using the Windows Input Simulator library, or whatever. 
private void SendKeyDown() { ... } 
private void SendKeyUp() { ... } 


Вот некоторые вопросы по Stack Overflow:
Send keys to WPF Browser control
C# p/Invoke How to simulate a keyPRESS event using SendInput for DirectX games

Ни один конкретный вопрос не касается вашего вопроса, но оба они включают некоторое обсуждение об использовании SendInput().

Смежные вопросы