检测是否按下键盘或鼠标,如果超过5分钟没有操作则认为用户已经离开


本文整理自网络,侵删。

 procedure TForm1.Timer1Timer(Sender: TObject);
var
vLastInputInfo: TLastInputInfo;
begin
vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
GetLastInputInfo(vLastInputInfo);
if GetTickCount - vLastInputInfo.dwTime > 5000 then
begin
timer1.Enabled:= false;
showmessage('超过5秒,用户未动鼠标!');
end;
end;


function TForm1.GetHandle: integer;
var
hD : hwnd;
buffer: array[0..254] of char;
begin
FillChar(buffer,254,#0);
hd := FindWindow('Tform1',nil);
hd := FindWindowEx(hd,0,'MDIClient',nil);
Result := FindWindowEx(hd,0,'TForm2',nil);
end;


另附: WM_CopyData

procedure TForm5.Button1Click(Sender: TObject);
var
cds: TCOPYDATASTRUCT;
s:string;
vHandle:THandle;
begin
vHandle:=FindWindow('TForm123',nil); //寻找MDI主窗体
vHandle:=FindWindowEx(vHandle,0,'MDIClient',nil);//寻找MDI容器区域
vHandle:=FindWindowEx(vHandle,0,'TForm2',nil);//寻找MDI子窗体
s:='消息测试';
cds.dwData := 1;
cds.cbData := Length(S) + 1;
cds.lpData := nil;
GetMem(cds.lpData, cds.cbData); //为传递的数据区分配内存
try
if cds.lpData <> nil then
begin
try
StrCopy(cds.lpData, PChar(S));
Windows.SendMessage(vHandle, WM_COPYDATA, 0, integer(@cds));
except
end;
end;
finally
if cds.lpData <> nil then
begin
FreeMem(cds.lpData); //释放资源end;
end;
end;
end;

相关阅读 >>

Delphi用多媒体库 bass.dll 播放 mp3 - 打开、播放、暂停、停止

Delphi 关于 tregex.split()

Delphi 万能模糊查询

Delphi 返回程序执行参数的例子

Delphi下遍历文件夹下所有文件的递归算法

Delphi getmodulefilename函数的用法(可以获取项目的路径,桌面的路径,我的文档的路径)

idhttp访问网页出现socket error #10054错误

Delphi ado 连接 excel (附excel各个版本的版本号)

Delphi 得到一个cuid用户唯一标识

Delphi filecreate 建立新文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...