检测是否按下键盘或鼠标,如果超过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 dbnavigator1 模拟点击

Delphi 多线程 开始、暂停、继续、停止

Delphi开发的app如何调用外部app

Delphi 修改exe应用程序图标

Delphi延时

Delphi cxgrid应用笔记

Delphi的rtti实现数据集的简单对象化

Delphi抓屏代码

Delphi jpg和bitmap互转转换的方法

Delphi 计算文件与当前时间差(天小时分钟秒)

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



打赏

取消

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

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

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

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

评论

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