C++ 日志记录密钥的问题
我正在尝试制作一个程序,使用低级键盘挂钩将击键记录到文本文件中。我遇到的问题是,虽然它记录字母,但文本文件只包含最后一个按下的字母 例如,如果输入单词“hello”,文本文件将只包含“o” 这是我的密码。再次感谢你的帮助C++ 日志记录密钥的问题,c++,C++,我正在尝试制作一个程序,使用低级键盘挂钩将击键记录到文本文件中。我遇到的问题是,虽然它记录字母,但文本文件只包含最后一个按下的字母 例如,如果输入单词“hello”,文本文件将只包含“o” 这是我的密码。再次感谢你的帮助 #include <windows.h> #include <stdio.h> #include <tchar.h> #include <iostream> #include <fstream> // func
#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;
LRESULT回调LowLevelKeyboardProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM);
int main()
{
HINSTANCE appInstance=GetModuleHandle(NULL);
SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,appInstance,0);
味精;
while(GetMessage(&msg,NULL,0,0)>0)
{
翻译信息(&msg);
发送消息(&msg);
}
返回0;
}
LRESULT回调LowLevelKeyboardProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
流文件;
myfile.open(“log.txt”);
KBDLLHOOKSTRUCT*pKeyBoard=(KBDLLHOOKSTRUCT*)LPRAM;
交换机(wParam)
{
案例WM_KEYUP:
{
开关(pKeyBoard->vkCode)
{
案例VK_返回:
默认情况下,myfile不会以追加模式打开文件;您需要使用std::ios::app
标志来构建它
因此:
或者简单地说:
ofstream myfile("log.txt", std::ios::app);
您必须养成阅读所使用工具的文档的习惯。您不需要所有这些代码来重现问题。这是一个文件处理问题。因此,所有的密钥处理代码都可以使用,所有Windows特定的cruft也可以使用。请学着生成a:在这里这样做时,您会在需要之前发现问题您可以在每次调用proc时打开该文件,但不能追加。
ofstream myfile("log.txt", std::ios::app);