Эмуляция клавишь в C#
Как реализовать нажатие клавишь?
Не понятно, что надо? Реализовать нажатие клавиши можно путём применения пальца. Если говорить об аппаратной части, т.е. вызвать прерывание с клавиатуры и обработать соответствующим драйвером, то в C# никак - ведь это язык программирования под платформу .NET и компилится в IL-код. Для .NET-приложений прозрачна аппаратная часть, так как в конечном итоге они выполняются средой CLR. Таким образом, для .NET-приложений, не использующих Native-код, нет доступа к аппаратной части. Например, .NET-приложение, написанное на компьютере класса IBM PC, без проблем переносится на PocketPC. Если бы аппаратная часть не была бы прозрачна, тогда такой перенос не был бы возможен, так как на мобильных устройствах совершенно другие ассемблерные команды и прерывания, а на некоторых КПК даже клавы нет, она программно эмулируется.
тогда ещё такой вопрос, если вызывать нельзя, то хотя бы запрещать или блокировать можно?
На чистом C# ничего этого не сделаешь. НО! Ты можешь написать на C++ или Delphi хуки (Hooks) для перехвата Windows-событий на события клавиш. Поместить эту процедуру в DLL, незабудь объявить эту процедуру на экспорт. Затем в коде на C# создаёшь одноимённый метод (его тело не описываешь), применяешь атрибут DllImport и теперь из управляемого кода будет вызываться Native-функция, которая выполняет эти задачи. Если ты хочешь реализовать это именно так, то я тебе исходники подкину:)
Подкинь плз, а на обычном Си у тебя сурсов нету? я его получше знаю, но всё равно пасиб. И на ту самую эмуляцию у тя исходников не найдётся?
На 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.