delphi 检测是否按下键盘或鼠标,如果超过5分钟没有操作则认为用户已经离开  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 检测是否按下键盘或鼠标,如果超过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;


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.043312072753906 seconds