2016-05-04 4 views
-1

最近、単純なキーロガーで始まるプログラミングサービスで私の手を試そうとしました。元のコードは非常に粗いですが、現在のウィンドウにフォーカスが当てられています。この問題は、ロガーをサービスに追加することでこの問題を緩和しようとしたときに始まりました。しかし、私はフックを使わずにキーを記録したい。ここにワーカースレッドがあります。基本的なキーロギングサービスがワーカースレッドにキーを記録できません

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; 
} 

他のすべてのコードは、サービスを開始して処理するだけです。

+3

'kbhit'と' getch'は、ユーザーが**プログラムのコンソールウィンドウに入力したものを読み込みます**。サービスとして、プログラムにはコンソールウィンドウがありません。 – immibis

+1

WaitForSingleObject(g_ServiceStopEvent、0)!= WAIT_OBJECT_0'は、スレッドセーフなブール値のテストにしかならないものの、少し重いです。 'while(not terminated)' – user4581301

答えて

0

しかし、フックを使わずにキーをログに記録します。

申し訳ありませんが、サービスでは、あなたはそれがバックグラウンドで実行されている非視覚的なプロセスであるため、それ以外の場合は、ユーザ入力を検出することができない、キーボードフックを使用するを持っている。サービスに直接関連付けられているユーザーは、入力する必要はありません。

+0

申し訳ありません、それは私がちょうど洞窟とフックを使用する場合がありますので、ありがとう。 – ACpp8165b

関連する問題