我想监视鼠标键盘是否长时间无动作,然后锁定程序。我按照(http://www.ucnu.cn/software/p481/A48159147.shtml)的做法但是没有生效,不知和原因?

ansili 2008-03-19 10:52:03
我想监视鼠标键盘是否长时间无动作,然后锁定程序。我按照(http://www.ucnu.cn/software/p481/A48159147.shtml)的做法但是没有生效,不知和原因?
...全文
173 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小笨象 2008-03-21
  • 打赏
  • 举报
回复
。。。。

void __fastcall TKfMainForm::IdleTimerTimer(TObject *Sender)
{
//TODO:每隔5秒钟看看键盘和鼠标多久没动过了。
LASTINPUTINFO pLASTINPUTINFO = {0};
pLASTINPUTINFO.cbSize = sizeof(LASTINPUTINFO);

GetLastInputInfo(&pLASTINPUTINFO);

try
{
if((GetTickCount()- pLASTINPUTINFO.dwTime) >= 50000)//50秒
{
//已经到设置的时间了,。
}
else
{
}
}catch(...){}
}
//---------------------------------------------------------------------------

ydlchina 2008-03-19
  • 打赏
  • 举报
回复
设置Interval为1000即可
ansili 2008-03-19
  • 打赏
  • 举报
回复
你Timer的自是多大?

我在OnTimer设置有断点,发现dwtick的值较上次没有变化。
柯本 2008-03-19
  • 打赏
  • 举报
回复
我试了下,没问题,不过那个网页上的程序有大小写问题,以下是我的程序:
#include <vcl.h>
#pragma hdrstop

#include "hook.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
static HHOOK hhook = NULL;
static DWORD dwtick = GetTickCount();
LRESULT CALLBACK jourrecproc(int ncode,
WPARAM wparam, LPARAM lparam)
{
if (ncode < 0)
return CallNextHookEx(hhook, ncode,
wparam, lparam);
dwtick = GetTickCount(); return 0;
}


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
hhook = SetWindowsHookEx(WH_JOURNALRECORD,
(FARPROC)jourrecproc, HInstance, 0);

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label1->Caption = AnsiString("鼠标键盘已经有 ") +
(GetTickCount()-dwtick)/1000.0 + "秒没有动了";

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
UnhookWindowsHookEx(hhook);
}
//---------------------------------------------------------------------------
ydlchina 2008-03-19
  • 打赏
  • 举报
回复
测试了一下,没问题,有时可能与你想象的不一样,你动了,但它依然显示一个数值,你可以稍微停时间长点。如果你要判断鼠标或键盘是否动了,你不能使用0来判断,而应该使用一个范围值,例如 >0.1
ansili 2008-03-19
  • 打赏
  • 举报
回复
程序运行以后从来没有执行到回调函数里去。
LRESULT CALLBACK jourrecproc(int ncode,
WPARAM wparam, LPARAM lparam)
{
if (ncode < 0)
return CallNextHookEx(hhook, ncode,
wparam, lparam);
dwtick = GetTickCount(); return 0;
}

我鼠标不听的动也是有多长时间没触动鼠标键盘了。

你仔细看看。
ansili 2008-03-19
  • 打赏
  • 举报
回复
为什么我在OnTimer设置有断点,发现dwtick的值较上次没有变化呢?

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧