webForumDet fria alternativet

När windows är inaktivt

Programmering

8 svar · 460 visningar · startad av FreeZer

Medlem sedan jan. 2001950 inlägg
Frågan#1

Kan man med en kod kolla hur länge datorn har varit inaktiv?

------------------
^FreeZer^
------------------
"Om du läser denna mening en gång till, kommer du att ha läst den minst två gånger..."

Medlem sedan maj 20002 993 inlägg
#2

Varför inte låta programmet ta tiden?

------------------
--> Fan för snö!!!

Medlem sedan jan. 2001950 inlägg
#3

Ok, hur ska jag skriva då om jag vill känna av när senste knapptryckningen var, eller när musen rörde på sig senast?

------------------
^FreeZer^
------------------
"Om du läser denna mening en gång till, kommer du att ha läst den minst två gånger..."

Medlem sedan maj 20002 993 inlägg
#4

Jag vet inte hur men du kan ju kolla på lite delphi sidor...

------------------
--> Fan för snö!!!

Medlem sedan maj 2000192 inlägg
#5

Mouse och keyboard hooks borde göra susen...

// Global variables

var
whKeyboard: HHook = 0;
whMouse: HHook = 0;

// ***********************************************************************************************
// Mouse and Keyboard hooks resets the timer counting user inactivity
// ***********************************************************************************************

function MouseHookCallBack(Code: Integer; Msg: WPARAM; MouseHook: LPARAM): LRESULT; stdcall;
begin
if (Code >= 0) then
Timer.Reset;
Result := CallNextHookEx(whMouse, Code, Msg, MouseHook);
end;

function KeyboardHookCallBack(Code: integer; Msg: WPARAM; KeyboardHook: LPARAM): LRESULT; stdcall;
begin
if (Code >= 0) then
Timer.Reset;
Result := CallNextHookEx(whKeyboard, Code, Msg, KeyboardHook);
end;

// ***********************************************************************************************
// Set up hooks. Called from GlobalInit.
// ***********************************************************************************************

procedure SetUpHooks;

function GetModuleHandleFromInstance: THandle;
var
s: array[0..512] of Char;
begin
GetModuleFileName(hInstance, s, sizeof(s) - 1);
Result := GetModuleHandle(s);
end;

begin
whMouse := SetWindowsHookEx(
WH_MOUSE,
MouseHookCallBack,
GetModuleHandleFromInstance,
GetCurrentThreadID);
whKeyboard := SetWindowsHookEx(
WH_KEYBOARD,
KeyboardHookCallBack,
GetModuleHandleFromInstance,
GetCurrentThreadID);
end;

Glöm inte att släppa hookarna vid program avslut...

// Release hooks
UnhookWindowsHookEx(whKeyboard);
UnhookWindowsHookEx(whMouse);

------------------
winer.nu

Medlem sedan juli 200012 978 inlägg
#6

Kan du förklara dig lite närmare?
Menar du just ditt program eller operativet som sådant?
Som vanligt fler frågor än svar!!!

------------------
GvdsSfdtTddv.

Medlem sedan jan. 2001950 inlägg
#7

WiNNe: Jag får inte koden att fungera alls, har du nån sida där du hittat den som jag kan få kolla på?

Lasp: Jag skrev i första inlägget att "kolla hur länge datorn har varit inaktiv", då tänkte jag på operativsystemet om det inte fram kom.
Alltså på samma sätt som skärmsläckaren går igång, att man inte rört någonting.

------------------
^FreeZer^
------------------
"Om du läser denna mening en gång till, kommer du att ha läst den minst två gånger..."

Medlem sedan juni 2000350 inlägg
Medlem sedan maj 2000192 inlägg
#9

Kanske borde skrivit att jag inte testat ovanstående fristående, jag klippte det från ett av mina gammla program. Möjligt att där är nåt anrop som saknar referens eller liknande. Men det borde ge räcka för att hjälpa till att hitta en bra lösning. Om man får allt gjort av andra lär man ju sig inget... :)

------------------
winer.nu

278 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
137 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)