| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Как сделать глобальный хук? |
| Автор: Snoofie 14.9.2004, 23:17 |
| Приветствую! Модет у кого есть примерчик как сделать глобальный хук клавиатуры? Например для создания keylog'erа. Это вообще возможно? Помогите с примерчиком плз. |
| Автор: Kurt 15.9.2004, 00:51 |
| Глобальный хук? Это надо смотреть в сторону WinAPI, имхо, на .NET такого не сделаешь.. хм.. разве что вызов native dll'ей, но смысла тут использовать .NET вообще нет. |
| Автор: seagull 16.9.2004, 09:48 |
| В данный момент я делаю подобную систему на VS C#.NET. И тут все выглядет абсолютно аналогично программирование не под .NET. Самые необходимые вам функции SetWindowsHookEx и UnhookWindowsHookEx. В МСДН на эти функции есть примеры. PS. Для того чтобы хук был глобальным обязательным условием есть то, что функция которая вызывается в хук-цепочка должна находится в ДЛЛ. Snoofie, если Вы подскажете интересный способ как пересылать назад эту информацию в основное тело программы буду очень признателен. |
| Автор: Kurt 16.9.2004, 10:40 | ||
...Виноват, не понял, о какой информации идет речь.. |
| Автор: seagull 16.9.2004, 10:51 |
| Kurt простите за мутную формулировку. Имеется ввиду что при установке хука мы передаем функции-обаботчик из ДЛЛ. Но проблема в том, как передать информацию из этой функции в саму програму. Ведь реально эту функция запускается с адресным пространством процесса, которому назначается это сообщение, а следовательно ни функции нашей программы, которая создала хук, ни область данных не доступны. Пока что мне на ум приходит лишь возможность использовать Pipe. Но все же хотелось бы какое-то более элегантное решение. |
| Автор: stab 18.9.2004, 05:00 |
| seagull, не думаю что, что-то элегантное найдется... можно конечно WM_COPYDATA использовать или через сокеты слать |
| Автор: Vaulter 21.9.2004, 09:45 |
| а как же делают глобальные горячие клавиши????? если нет никакой dll ? |
| Автор: seagull 21.9.2004, 10:43 | ||
Через ВинАпи сделать глобальный хук (в том числе и на клавиатуру), который был бы в теле программы невозможно. Так как процедура хука по определению должна быть доступна всем процессм. |
| Автор: Solnishka 3.10.2005, 10:21 |
| Народ!!! Такой вопрос: как при помощи хука заставить символьную клавишу производить действие стрелки? Вроде и подменяется клавиша на стрелку, но не передвигается курсор, хоть ты че хошь с ним делай!!! |
| Автор: oleg1973 3.10.2005, 11:01 |
| ну дык поиск рулит по форуму ) уже писали про хук без длл (в ехешнике) только по любому он там будет в виде отдельной процедуры естественно |
| Автор: #Sage 4.10.2005, 08:32 |
| Snoofie (да и всем), думаю стоит глянуть эти две ссылки: http://www.codeproject.com/csharp/GlobalSystemHook.asp http://www.codeproject.com/csharp/globalhook.asp |