Недавно я попытался попробовать свои силы в службах программирования, начиная с простого регистратора ключей. Оригинальный код очень сырой, но работает, если текущее окно сфокусировано. Проблема началась, когда я попытался облегчить эту проблему, добавив регистратор в службу. Однако я хочу регистрировать ключи без использования хуков. Вот рабочая нить:
DWORD WINAPI ServiceWorkerThread(LPVOID lpParam){
std::ofstream File("Info.txt");
char C = 0;
// Periodically check if the service has been requested to stop
while (WaitForSingleObject(g_ServiceStopEvent, 0) != WAIT_OBJECT_0){
if(kbhit()){
C = getch();
File.open("Info.txt", std::fstream::out | std::fstream::app);
File << C;
File.close();
Sleep(100);
//The thread needs to sleep so that it won't eat CPU
//Additionally people cannot type as fast as a computer can process data
}
}
return ERROR_SUCCESS;
}
Весь остальной код просто запускает и обрабатывает сервис.
Однако я хочу регистрировать ключи без использования хуков.
Извините, но в сервисе вы иметь использовать хук клавиатуры, иначе он не сможет обнаружить ввод пользователя, так как это невизуальный процесс, работающий в фоновом режиме. Пользователь не может вводить ничего, что непосредственно связано со службой.
Других решений пока нет …