c++,  delphi

delphi,c++获取windows空闲时间

获取windows计算机空闲时间,

这样就不需要去hook鼠标和键盘,比较方便,但此方法是全局的,如果只是监听自己的程序是否空闲,则任然需要hook 鼠标,键盘的HC_ACTION消息

 delphi

解释function GetLastInput: integer; //获取闲置时间var  linput: TLastInputInfo;begin  Result := 0;try    linput.cbSize := SizeOf(TLastInputInfo);    GetLastInputInfo(linput);    Result := ((GetTickCount - linput.dwTime) div1000);exceptend;end;procedure TForm1.tmr2Timer(Sender: TObject);begin  Edit1.Text := IntToStr(GetLastInput());end;

c++

解释int GetLastInput(){	PLASTINPUTINFO input= nullptr;	div_t itime = {0};input->cbSize  = sizeof(PLASTINPUTINFO);if (GetLastInputInfo(input))	itime = div((GetTickCount() - input->dwTime), 1000);return itime.quot;}

———————————————————————————-

hook方法

解释dwLastInputTick: DWORD;    dwLastInitDateTick: DWORD;    dwLastMyTick: DWORD;    hHookKbd: HHOOK;    hHookMouse: HHOOK;function MyKbdHook(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; export;beginif (iCode = HC_ACTION) thenbegin    dwLastInputTick := GetTickCount;    dwLastMyTick := dwLastInputTick;end;  Result := CallNextHookEx(hHookKbd, iCode, wParam, lParam);end;function MyMouseHook(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall; export;beginif (iCode = HC_ACTION) thenbegin    dwLastInputTick := GetTickCount;    dwLastMyTick := dwLastInputTick;end;  Result := CallNextHookEx(hHookMouse, iCode, wParam, lParam);end;procedure TForm1.Hook;begin  hHookKbd := SetWindowsHookEx(WH_KEYBOARD, MyKbdHook, HInstance, GetCurrentThreadId);  hHookMouse := SetWindowsHookEx(WH_MOUSE, MyMouseHook, HInstance, GetCurrentThreadId);  dwLastInputTick := GetTickCount;  Timer.Enabled := True;end;procedure TForm1.UnHook;begin  Timer.Enabled := False;if hHookKbd <> 0then    UnhookWindowsHookEx(hHookKbd);if hHookMouse <> 0then    UnhookWindowsHookEx(hHookMouse);  hHookKbd := 0;  hHookMouse := 0;end;//窗口创建的时候  hook();//窗口关闭的时候unhook();

AI相关的一切

留言

您的邮箱地址不会被公开。 必填项已用 * 标注