Имитация нажатия клавиш Ctrl+V с использованием результатов C# v в целевом приложении

Я написал приложение для победы, используя С#, которое автоматически связывается с другими приложениями, такими как браузеры. я хочу скопировать что-то в своем приложении win и вставить его в браузер, не привлекая пользователя для щелчка или перемещения мыши. У меня нет проблем с имитацией щелчков мышью, но у меня есть проблемы с имитацией ударов клавиатуры. Копировать (Ctrl+c) всегда работает правильно, но когда я хочу вставить что-то в буфер обмена, иногда работает правильно, а иногда нет. Следующее больше касается моей проблемы: я хочу погладить Ctrl+v с помощью C#, другими словами, я хочу вставить что-то в буфер обмена в другое приложение с помощью C#.

Я использую следующий код:

SendKeys.Send("^{v}");

Я также попробовал следующий код:

SendKeys.Send("^(v)");

Но проблема в том, что иногда это приводит к действию вставки, а иногда к простому нажатию клавиши v. Может ли кто-нибудь помочь с тем, что не так с моим приложением? и еще вопрос, есть ли проблема с доступом к буферу обмена, когда другие приложения хотят получить к нему доступ?


person user6387308    schedule 17.07.2016    source источник


Ответы (2)


При использовании SendKeys.Send вам нужно использовать круглые скобки, чтобы удерживать несколько модификаторов. Однако, поскольку у вас есть только один модификатор, вам не нужна группировка, и вы должны отправлять только "^v".

Фигурные скобки {} используются для указания специального ключа, такого как {ENTER}, полный список доступен в SendKey.Send документы

Согласно документам :

Чтобы указать, что любую комбинацию клавиш SHIFT, CTRL и ALT следует удерживать, пока нажаты несколько других клавиш, заключите код этих клавиш в круглые скобки. Например, чтобы указать удерживать SHIFT при нажатии клавиш E и C, используйте «+(EC)». Чтобы указать удерживать SHIFT, пока нажата E, а затем C без SHIFT, используйте «+EC».

person Eris    schedule 17.07.2016
comment
Я использую ^(v) для отправки Ctlr+v, но результат такой же, как и раньше. т.е. если я нажму эту клавишу 10 раз, 6 раз она работает правильно, а 4 раза пишет v - person user6387308; 17.07.2016
comment
спасибо, я опишу свою проблему подробнее, отредактировав вопрос - person user6387308; 17.07.2016

Иногда у SendKey возникают проблемы с первым символом, поэтому при отправке: SendKey.Send("^c"); или SendKey.Send("^v"); у вас будет только c или v. поэтому, чтобы предотвратить это, вы можете просто использовать все пробелы перед кодом, например: SendKey.Send(" ^v"); И не забывайте, что c и v должны быть в нижнем регистре.

person siamak    schedule 02.03.2020