Как отправить коды сканирования клавиатуры вручную? - PullRequest
4 голосов
/ 14 апреля 2009

Я работаю над проектом, который должен эмулировать нажатие клавиши Windows. Я пробовал SendKeys.Send безрезультатно.

В частности, клавиша Windows должна быть согласована с кнопкой. То есть я хочу отправить ключ Windows и плюс / минус.

Ответы [ 4 ]

6 голосов
/ 16 апреля 2009

Я бы добавил, что часто маловероятно, что вы найдете функции более низкого уровня, подобные этим, в .NET Framework . Если вы не понимаете, почему оба предложения указывают на функции, не относящиеся к C #, то вы, вероятно, могли бы использовать некоторые детали в P / Invoke .

По сути, существуют способы определения функций C #, которые «привязывают» их к функциям Windows API, которых нет в сборках .NET (вместо этого они обычно реализуются в C ++ и доступны как стандартная DLL). Этот процесс считается «(Windows) Platform Invoking» (таким образом, P / Invoke).

Поначалу может быть немного неуверенно совмещать все типы данных между вызовами в стиле C ++ и C #, но, к счастью, есть другие, которые проложили путь.

Предлагаемая функция, SendInput , имеет PInvoke-оболочку over PInvoke.net . Этот класс-обёртка, когда он доступен в вашей сборке, позволит вам вызывать SendInput, как если бы это была функция C #.

PInvoke.net - это, по сути, вики-страница PInvoke для хорошо известных вызовов API в окнах, и обычно имеет оболочку вызовов API C # / VB.NET.

2 голосов
/ 14 апреля 2009

Я думаю, что ваша лучшая ставка - использовать keybd_event keydown (называемый ExtendedKey) со значением LWin перечисления System.Windows.Forms.Keys , затем второй символ (+) и нажмите обе клавиши.

Я не верю, что SendKeys работает с ключом Windows в качестве модификатора.

1 голос
/ 16 апреля 2009

Это может быть излишним, но вы можете попробовать использовать AutoItX , который является способом использования AutoIt в качестве DLL. Я написал только отдельные сценарии, но я знаю, что AutoIt позволяет легко имитировать нажатие клавиши Windows.

Например, чтобы открыть диалог запуска, просто:

Отправить ("# r"); Win + R = запустить

1 голос
/ 14 апреля 2009

Попробуйте SendInput или более старый keybd_event

...