Есть ли способ поймать событие клавиатуры в DLL? - PullRequest
2 голосов
/ 29 апреля 2011

Мне нужно выполнить определенный код, когда пользователь нажимает некоторые клавиши с клавиатуры.

Ничего сложного до сих пор, я должен делать это в типе проекта dll, библиотеке классов, и не использовать какие-либо конкретные элементы управления форм Windows.

Может ли это быть достигнуто? , если да, предоставьте мне несколько примеров или учебных материалов.

Спасибо.

Ответы [ 5 ]

1 голос
/ 29 апреля 2011

Вы можете использовать функцию API GetKeyboardState.

[DllImport ("user32.dll")]
public static extern int GetKeyboardState( byte[] keystate );


private void Form1_KeyDown( object sender, KeyEventArgs e )
{
   byte[] keys = new byte[255];

   GetKeyboardState (keys);

   if( keys[(int)Keys.Up] == 129 && keys[(int)Keys.Right] == 129 )
   {
       Console.WriteLine ("Up Arrow key and Right Arrow key down.");
   }
}
0 голосов
/ 29 апреля 2011

Невозможно даже с помощью P / Invoke написать глобальный хук в C #, только низкоуровневые хуки для клавиатуры и мыши.Таким образом, вы можете, вероятно, P / Invoke или весь хук, или только самописанную DLL C ++, но в любом случае это большая работа.не нужен крючок.

Удачи, Алекс

0 голосов
/ 29 апреля 2011

Вы можете использовать клавиши hooks , чтобы получить глобальный ввод с клавиатуры. Поскольку выполнение этого в C # потребует от вас P / Invoke почти всех функций из нативного API в любом случае, вы также можете написать DLL на C / C ++ и удалить зависимость .NET.

0 голосов
/ 29 апреля 2011

Нет, этого нельзя достичь с помощью библиотек управляемого кода, если вы не хотите захватывать ключевые события из элементов управления Windows Form (System.Windows.Forms.Control). В противном случае вам придется импортировать собственный код для обработки перехватов событий клавиатуры.

0 голосов
/ 29 апреля 2011

Вы ищете кейлоггер ?

...