检测是否按下键盘或鼠标,如果超过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 随鼠标移动的十字线的快速画法

Delphi 使用tnethttprequest / tnethttpclient访问web服务器

Delphi 全局键盘钩子(wh_keyboard)

Delphi 四舍五入保留一位或两位小数

Delphi 排列桌面图标

Delphi中的字符串

Delphi中使用内联变量(inline variables) 的5个理由

Delphi hextoint32

Delphi嵌入循环汇编

Delphi removewhitespaces 过滤字符串所有空格

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



打赏

取消

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

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

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

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

评论

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