Пытаюсь написать сервис для перехвата нажатия клавиш. Когда простое приложение всё работает отлично, а когда сервис то не вызываеться KeyboardHook функция из моей библиотеки при нажатии клавиш. Вот пример: void WINAPI MyServiceStart (DWORD argc, LPTSTR *argv) { ...... hWS = OpenWindowStation("Winsta0", FALSE, GENERIC_ALL); SetProcessWindowStation(hWS); hDT = OpenDesktop("default", 0, FALSE, GENERIC_ALL); SetThreadDesktop(hDT); HMODULE Logger = LoadLibraryA("Logger.dll"); SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)GetProcAddress(Logger,"Keyboard Hook"),Logger,0); MessageBox(0,"OK","OK",0); ...... }; API Ф-и ошибок не выдают, всё успешно. MessageBox выводиться. А Ф-я KeyboardHook из Logger.dll при нажатии клавиш не вызываеться. Может кто встречался с такой проблеммой, или знает какой-нить кейлоггер который сделан в виде сервиса. Заранее Спасибо!
без пробела! Как я уже говорил Api выполняються без ошибок, LoadLibraryA("Logger.dll"); выполняеться успешно и GetProcAddress(Logger,"KeyboardHook") возвращает правильный адрес. Библиотека Logger.dll должна подгружаться к другим процессам (либо при запуске либо при нажатии клавиши, по моему это зависит от того что выбрать WH_KEYBOARD или WH_KEYBOARD_LL) но этого не происходит, когда программа установлена как сервис. Интересное наблюдение: Есть программа nncron она может запускать процессы от имени другого пользователя и как сервис, и от имени залогиневшегося пользователя. Так вот если с помощью него запустить программу как сервис, то KeyboardHook не вызываеться, а если от имени любого или залогиневшегося пользователя с загрузкой профиля, то всё работает. Как это можно объяснить? И как вообще можно запустить процесс от имени залогиневшегося пользователя?
Есть мнение, что если охота сервис писать, то лучше уж тогда драйвер-фильтр наваять, ибо логить клаву хуками - это не модно Про сервисы и фильтры можно почитать у Four-F (цикл статей на этом сайте есть).
А как в случае с драйвером фильтром узнать раскладку клавиатуры? Или может кто даст ссылочку на что-нить похожее с раскладкой. Я совсем не много знаю о программировании драйверов!
Ещё одно интересное наблюдение, создаю сервис, этот сервис при старте запускает программу которая устанавливает hook и всё работает. Мой сервис просто CreateProcess(myprogrammpath, "", 0, 0, 0, 0, 0, 0, &si, &pi). Почему же не работает установка хука в самом сервисе? Все варианты испробовал, не знаю что делать.