Крючок клавиатуры в c # - PullRequest
       3

Крючок клавиатуры в c #

1 голос
/ 04 ноября 2010

Я хочу разработать конвертер нажатий клавиш, который преобразует любое нажатие клавиш на мой местный язык. Например, если пользователь вводит «а», он будет заменен соответствующей буквой Юникода « \ u0995 »

Я использовал код, похожий на: https://stackoverflow.com/global-low-level-keyboard-hook-freezing-in-c-net-3-5 Там я отредактировал следующее:

 // MessageBox.Show("Test"); // I do not want this so commented
 int vkCode = Marshal.ReadInt32(lParam);
 Console.WriteLine((Keys)(vkCode + 2));

 SendKeys.Send("mmm"); // mmm will be my desired unicode character           

Теперь я открываю любое приложение и набираю все, что получаю, набирая букву и "ммм".

Например, если я наберу: abcd , тогда я получу вывод в виде: mmmcmmmdmmmemmmf ......... [output]


Теперь мой вопрос,

1) Как я могу отредактировать этот код, чтобы отправлять письма в юникоде вместо письма? (Я имею в виду, если я наберу «p», то я хочу, чтобы другие приложения получали символ Unicode, подобный этому символу Unicode: « 0996 »

2) Как убедиться, что в другое приложение отправляется только символ Unicode, введенный символ не должен добавляться. Я имею в виду, я не хочу, чтобы Unicode-символ и печатались английские буквы, как в выводе выше [output]

Ответы [ 4 ]

1 голос
/ 27 марта 2011

1) Как я могу отредактировать этот код, чтобы отправить буква юникод вместо буквы?

SendKeys.Send () может отправлять и символы Unicode Indic, например,

SendKeys.Send("খ");

Если вы хотите использовать код Unicode для отправки символа,

SendKeys.Send('\u0996'.ToString());

2) Как убедиться, что только юникод персонаж отправляется другому приложение?

Если код находится внутри функции события KeyDown , вы можете подавить фактический вводимый ключ, используя следующую команду сразу после SendKeys.Send () :

e.Handled == true;
0 голосов
/ 04 ноября 2010

Я не совсем уверен, но я думаю, что вы можете прервать цепочку, если вы не позвоните CallNextHookEx, а вместо этого вернете нулевой указатель.Но это то, что вы обычно не должны делать;)

С наилучшими пожеланиями,
Оливер Ханаппи

0 голосов
/ 04 ноября 2010
  1. Пропустить вызов CallNextHookEx, чтобы предотвратить распространение определенного ключевого события.

  2. Re: использование SendKeys для ввода ввода Unicode: "Если ваше приложение предназначенодля международного использования с различными клавиатурами использование Send может привести к непредсказуемым результатам, и его следует избегать ».- MSDN По сути, я думаю, что SendKeys явно не поддерживает отправку ввода Unicode.

Вы смотрели на Microsoft Text Services Framework вместо этогоподход вы пытаетесь?Я думаю, что это в основном цель, созданная для решения того, что вы пытаетесь сделать.

0 голосов
/ 04 ноября 2010

AFAIK, перехват для мониторинга, поэтому не уверен, что это правильный подход для того, что вы пытаетесь сделать. Но в вашем коде, возможно, вы можете пропустить вызов следующей ловушки "CallNextHookEx", и это может поглотить набранный ключ. Имейте в виду, что вы должны глотать условно, иначе вы можете заблокировать такие клавиши, как ALT и CTL.

...