Господа, проясните пожалуйста ситуацию по поводу локальных и глобальных хуков. В литературе и в форумах пишут о том, что поставить глоб. хук можно только из DLL. Но приведённый ниже код ставит хук на клавиатуру и Beep-ает везде — это разве не глобальный хук ? (про NextWindowHook я знаю и про обмен между процессами с пом. файлмаппинга тоже)
Саму теорию я под сомнение не ставлю, просто хотелось бы понять в чём разница между указанным хуком и хуком из DLL.
Здравствуйте Sarkisov Sergei, Вы писали:
SS>Господа, проясните пожалуйста ситуацию по поводу локальных и глобальных хуков. В литературе и в форумах пишут о том, что поставить глоб. хук можно только из DLL. Но приведённый ниже код ставит хук на клавиатуру и Beep-ает везде — это разве не глобальный хук ? (про NextWindowHook я знаю и про обмен между процессами с пом. файлмаппинга тоже) SS>Саму теорию я под сомнение не ставлю, просто хотелось бы понять в чём разница между указанным хуком и хуком из DLL.
SS>LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { SS> Beep(20,20); SS> return 0; SS>}
SS>int APIENTRY WinMain(HINSTANCE hInstance, SS> HINSTANCE hPrevInstance, SS> LPSTR lpCmdLine, SS> int nCmdShow) SS>{ SS> MSG msg; SS> SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,NULL); SS> while (GetMessage(&msg,0,0,0)) { SS> } SS> return 0; SS>}
А у меня не Beep-ает. Под Win XP Pro. Единственное изменение — добавил строчку #include <windows.h>. Или в этом и был секрет ?
Здравствуйте SergH, Вы писали:
SH>А у меня не Beep-ает. Под Win XP Pro. Единственное изменение — добавил строчку #include <windows.h>. Или в этом и был секрет ?
Секрет конечно не в этом (у меня строчка #include "stdafx.h")
Может разница в windows, у меня win98 ?
Здравствуйте SergH, Вы писали:
SH>Дома посмотрю. Но если верить MSDN, работать и не должно. Из теории это тоже следует. Если Win 9x такое пропускает — это его глюк.
Здравствуйте Dr_Sh0ck, Вы писали:
DS>Здравствуйте SergH, Вы писали:
SH>>Дома посмотрю. Но если верить MSDN, работать и не должно. Из теории это тоже следует. Если Win 9x такое пропускает — это его глюк.
DS>Где-то когда-то читал, что так и есть :
Что значит так и усть? глюк win9x или должно работать?? и почему вообще работает???
Здравствуйте Sarkisov Sergei, Вы писали:
SS>Может разница в windows, у меня win98 ?
Действительно, работает. Нестабильно и с побочными эффектами, но тем не менее. Странно. Кстати, если бы это работало так, как должно (т.е. работало, но KeyboardProc выполнялась бы правильно), сообщения от клавиатуры никому бы не приходили, т.к. CallNextHookEx не вызывается. А они приходят. Вобщем
Здравствуйте SergH, Вы писали:
SH>Здравствуйте Sarkisov Sergei, Вы писали:
SS>>Может разница в windows, у меня win98 ?
SH>Действительно, работает. Нестабильно и с побочными эффектами, но тем не менее. Странно. Кстати, если бы это работало так, как должно (т.е. работало, но KeyboardProc выполнялась бы правильно), сообщения от клавиатуры никому бы не приходили, т.к. CallNextHookEx не вызывается. А они приходят. Вобщем
SegH, Я коректно прописывал return CallNextHookEx и у меня вызывалась другая ловушка (после того как отработает моя), а какие побочн. эффекты?
Здравствуйте Sarkisov Sergei, Вы писали:
SS>SegH, Я коректно прописывал return CallNextHookEx и у меня вызывалась другая ловушка (после того как отработает моя), а какие побочн. эффекты?
Ну я то CallNextHookEx не прописывал, запускал как есть. И все равно работало.
Побочные эффекты — сначала повис Windows Commander, потом Exel странно стал себя вести. Я списал всё на эту программку. Но вообще-то я в Win98 редко загружаюсь, может это вполне нормальные явления .
Нестабильность — не всегда пищит. Т.е. один раз не пищала. Я не долго эксперементировал, подробностей не знаю.
Здравствуйте Sarkisov Sergei, Вы писали:
DS>>Где-то когда-то читал, что так и есть :
SS>Что значит так и усть? глюк win9x или должно работать?? и почему вообще работает???