Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Эмуляция клавишь в C#

15K
14 февраля 2006 года
adfree
3 / / 14.02.2006
Как реализовать нажатие клавишь?
273
14 февраля 2006 года
3A3-968M
1.2K / / 22.12.2005
Не понятно, что надо? Реализовать нажатие клавиши можно путём применения пальца. Если говорить об аппаратной части, т.е. вызвать прерывание с клавиатуры и обработать соответствующим драйвером, то в C# никак - ведь это язык программирования под платформу .NET и компилится в IL-код. Для .NET-приложений прозрачна аппаратная часть, так как в конечном итоге они выполняются средой CLR. Таким образом, для .NET-приложений, не использующих Native-код, нет доступа к аппаратной части. Например, .NET-приложение, написанное на компьютере класса IBM PC, без проблем переносится на PocketPC. Если бы аппаратная часть не была бы прозрачна, тогда такой перенос не был бы возможен, так как на мобильных устройствах совершенно другие ассемблерные команды и прерывания, а на некоторых КПК даже клавы нет, она программно эмулируется.
15K
01 марта 2006 года
adfree
3 / / 14.02.2006
тогда ещё такой вопрос, если вызывать нельзя, то хотя бы запрещать или блокировать можно?
273
02 марта 2006 года
3A3-968M
1.2K / / 22.12.2005
На чистом C# ничего этого не сделаешь. НО! Ты можешь написать на C++ или Delphi хуки (Hooks) для перехвата Windows-событий на события клавиш. Поместить эту процедуру в DLL, незабудь объявить эту процедуру на экспорт. Затем в коде на C# создаёшь одноимённый метод (его тело не описываешь), применяешь атрибут DllImport и теперь из управляемого кода будет вызываться Native-функция, которая выполняет эти задачи. Если ты хочешь реализовать это именно так, то я тебе исходники подкину:)
15K
02 марта 2006 года
adfree
3 / / 14.02.2006
Подкинь плз, а на обычном Си у тебя сурсов нету? я его получше знаю, но всё равно пасиб. И на ту самую эмуляцию у тя исходников не найдётся?
273
05 марта 2006 года
3A3-968M
1.2K / / 22.12.2005
Ну вот примерно накидал.
На C# пишем приложение и приписываем:
[DllImport("Keybrdhk.dll")]
public static extern IntPtr KeyBoardProc(int code, uint wParam, uint lParam);

На C++ пишем так:
LRESULT KeyboardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
HHOOK g_hhk;
...Делаешь то что надо
return CallNextHookEx(g_hhk, nCode, wParam, lParam);
}

Дальше тебе надо будет зарегить данный хук в системе. Делается это WinAPI функцией SetWindowsHookEx, например SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);
Можно это сделать при заргузке Native-библиотеки, разместив вызов данной функции на стартовую точку, получить hinstDLL можно путём получения hInstance WinAPI функцией GetModuleHandle. Читай WinAPI SDK. Примерчик подправь как тебе надо. Keybrdhk.dll - это твоя библиотека с функцией KeyboardProc.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог