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;