日志记录键问题
Issue with logging keys
我正在尝试制作一个程序,使用低级键盘钩子将击键记录到文本文件中。我遇到的问题是,虽然它确实记录了字母,但文本文件只包含已按下的最后一个字母。
例如,如果我输入单词"hello",则文本文件将仅包含"o"。
这是我的代码。再次感谢您的帮助。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
// function declaration.
using namespace std;
LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam );
int main()
{
HINSTANCE appInstance = GetModuleHandle(NULL);
SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, appInstance, 0 );
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
ofstream myfile;
myfile.open("log.txt");
KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
switch( wParam )
{
case WM_KEYUP:
{
switch( pKeyBoard->vkCode )
{
case VK_RETURN:
myfile<<"Enter n";
break;
case 0x41:
myfile<<"A n";
break;
case 0x42:
myfile<<"B n";
break;
case 0x43:
myfile<<"C n";
break;
case 0x44:
myfile<<"D n";
break;
case 0x45:
myfile<<"E n";
break;
case 0x46:
myfile<<"F n";
break;
case 0x47:
myfile<<"G n";
break;
case 0x48:
myfile<<"H n";
break;
case 0x49:
myfile<<"I n";
break;
case 0x4A:
myfile<<"J n";
break;
case 0x4B:
myfile<<"K n";
break;
case 0x4C:
myfile<<"L n";
break;
case 0x4D:
myfile<<"M n";
break;
case 0x4E:
myfile<<"N n";
break;
case 0x4F:
myfile<<"O n";
break;
case 0x50:
myfile<<"P n";
break;
case 0x51:
myfile<<"Q n";
break;
case 0x52:
myfile<<"R n";
break;
case 0x53:
myfile<<"S n";
break;
case 0x54:
myfile<<"T n";
break;
case 0x55:
myfile<<"U n";
break;
case 0x56:
myfile<<"V n";
break;
case 0x57:
myfile<<"W n";
break;
case 0x58:
myfile<<"X n";
break; case 0x59:
myfile<<"Y n";
break;
case 0x5A:
myfile<<"Z n";
break;
case 0x30:
myfile<<"0 n";
break;
case 0x31:
myfile<<"1 n";
break;
case 0x32:
myfile<<"2 n";
break;
case 0x33:
myfile<<"3 n";
break;
case 0x34:
myfile<<"4 n";
break;
case 0x35:
myfile<<"5 n";
break;
case 0x36:
myfile<<"6 n";
break;
case 0x37:
myfile<<"7 n";
break;
case 0x38:
myfile<<"8 n";
break;
case 0x39:
myfile<<"9 n";
break;
}
}
default:
return CallNextHookEx( NULL, nCode, wParam, lParam );
}
myfile.close();
return 0;
}
默认情况下std::ofstream
不会在追加模式下打开文件;您需要使用 std::ios::app
标志构造它才能执行此操作。
所以:
ofstream myfile;
myfile.open("log.txt", std::ios::app);
或者简单地:
ofstream myfile("log.txt", std::ios::app);
您必须养成阅读所用工具的文档的习惯。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 使用 #define 进行跟踪日志记录以避免性能问题
- 通过 ODBC C++将带有日期时间的记录插入 SQL Server 2014 的问题
- 在添加新记录和访问记录时有一个问题
- 自我记录代码是否值得潜在的性能问题
- 使日志记录运算符过载<<设计的潜在问题
- 日志记录键问题
- 提升记录器链接问题
- 关于NTFS更改日志USN记录的问题
- C++我的文件记录器类有什么问题?
- 简单记录器的问题
- 在随机访问文件中创建新记录问题