keyboard
小于 1 分钟cpp
打印键盘按键
创建控制台应用程序,写入下面代码(完整代码)即可,使用了键盘 hook
// keyboardHook.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <windows.h>
#include <sstream>
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION) {
KBDLLHOOKSTRUCT *pKeyboard = (KBDLLHOOKSTRUCT *)lParam;
std::ostringstream oss;
oss << std::hex << pKeyboard->vkCode;
std::string hexString = oss.str();
// 打印虚拟键码
std::cout << "虚拟键十进制: " << pKeyboard->vkCode << ",十六进制:" << hexString;
// 打印 ASCII 码(如果有)
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
BYTE keyboardState[256];
GetKeyboardState(keyboardState);
wchar_t buffer[5];
if (ToUnicode(pKeyboard->vkCode, pKeyboard->scanCode, keyboardState, buffer, 4, 0) == 1) {
std::wcout << " (ASCII: " << buffer[0] << ")";
}
}
std::cout << std::endl;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main() {
HHOOK keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, NULL, 0);
if (keyboardHook == NULL) {
std::cerr << "Failed to install hook!" << std::endl;
return 1;
}
std::cout << "Press keys to see their virtual key codes and ASCII values. Press Esc to quit." << std::endl;
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
// 按下 Esc 键退出
if (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE) {
break;
}
}
UnhookWindowsHookEx(keyboardHook);
return 0;
}
