delphi,c++获取windows空闲时间
获取windows计算机空闲时间,
这样就不需要去hook鼠标和键盘,比较方便,但此方法是全局的,如果只是监听自己的程序是否空闲,则任然需要hook 鼠标,键盘的HC_ACTION消息
解释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();