最近、単純なキーロガーで始まるプログラミングサービスで私の手を試そうとしました。元のコードは非常に粗いですが、現在のウィンドウにフォーカスが当てられています。この問題は、ロガーをサービスに追加することでこの問題を緩和しようとしたときに始まりました。しかし、私はフックを使わずにキーを記録したい。ここにワーカースレッドがあります。基本的なキーロギングサービスがワーカースレッドにキーを記録できません
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;
}
他のすべてのコードは、サービスを開始して処理するだけです。
'kbhit'と' getch'は、ユーザーが**プログラムのコンソールウィンドウに入力したものを読み込みます**。サービスとして、プログラムにはコンソールウィンドウがありません。 – immibis
WaitForSingleObject(g_ServiceStopEvent、0)!= WAIT_OBJECT_0'は、スレッドセーフなブール値のテストにしかならないものの、少し重いです。 'while(not terminated)' – user4581301