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

ansili 万立科技 技术经理  2008-03-19 10:52:03
我想监视鼠标键盘是否长时间无动作,然后锁定程序。我按照(http://www.ucnu.cn/software/p481/A48159147.shtml)的做法但是没有生效,不知和原因?
...全文
123 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
小笨象 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的值较上次没有变化呢?
回复
相关推荐
发帖
Windows SDK/API
创建于2007-08-02

1208

社区成员

C++ Builder Windows SDK/API
申请成为版主
帖子事件
创建了帖子
2008-03-19 10:52
社区公告
暂无公告