"I want a function that executes if the user has NOT been working on a PC for 20 mins??"
Tick Count
The user32 API function GetTickCount retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days. (The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.)
The syntax for GetTickCount looks like this.
calldll#kernel32,"GetTickCount",_
startTicks asulong'ticks since system start
GetLastInputInfo
The user32 API function GetLastInputInfo retrieves information about the last user input by keyboard or mouse. It fills a struct with the information. The struct has two members. The first is the size of the struct. This can be retrieved by Liberty BASIC with the LEN() function. The second member will be filled by the function with the tick count at the last user input in the session.
The struct looks like this:
struct LASTINPUTINFO,_
cbSize asulong,_ 'size of struct
tickCount asulong'tick count at last session input
LASTINPUTINFO.cbSize.struct=len(LASTINPUTINFO.struct)
Session Idle Time
You can discover the number of ticks the system was idle by subtracting the number retrieved from GetLastInputINfo from the value of the current tick count. The function looks like this.
calldll#user32,"GetLastInputInfo",_ 'time of last input event
LASTINPUTINFO asstruct,_ 'struct to hold data
result aslong'nonzero=success
ticksLastInput=LASTINPUTINFO.tickCount.struct
Demo
The demo instructs the user to avoid keyboard and mouse input. It uses a timer to activate the routine after five seconds. After five seconds, it retrieves the current tick count with GetTickCount. It gets information about the last user input with GetLastInputInfo. It retrieves the tick count at last user input from the struct. It subtracts the tick count at last input from the current tick count to find out how many ticks (milliseconds) the system has been idle. (Divide by 1000 to get the value in seconds instead of milliseconds.)
struct LASTINPUTINFO,_
cbSize asulong,_ 'size of struct
tickCount asulong'tick count at last session input
LASTINPUTINFO.cbSize.struct=len(LASTINPUTINFO.struct)print"Please wait and do not touch keyboard or mouse."timer5000,[getInfo]wait[getInfo]timer0calldll#user32,"GetLastInputInfo",_ 'time of last input event
LASTINPUTINFO asstruct,_ 'struct to hold data
result aslong'nonzero=success
ticksLastInput=LASTINPUTINFO.tickCount.structprint"Last input tick count: ";ticksLastInput
calldll#kernel32,"GetTickCount",_
startTicks asulong'ticks since system startprint"Ticks since system start ";startTicks
print"Idle ticks: ";startTicks-ticksLastInput
See also: Alyce's Restaurant
Tick Count | GetLastInputInfo | Session Idle Time | Demo
This demo was written in response to a question on the Community Forum.
"I want a function that executes if the user has NOT been working on a PC for 20 mins??"
Tick Count
The user32 API function GetTickCount retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days. (The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.)
The syntax for GetTickCount looks like this.
GetLastInputInfo
The user32 API function GetLastInputInfo retrieves information about the last user input by keyboard or mouse. It fills a struct with the information. The struct has two members. The first is the size of the struct. This can be retrieved by Liberty BASIC with the LEN() function. The second member will be filled by the function with the tick count at the last user input in the session.
The struct looks like this:
Session Idle Time
You can discover the number of ticks the system was idle by subtracting the number retrieved from GetLastInputINfo from the value of the current tick count. The function looks like this.
Demo
The demo instructs the user to avoid keyboard and mouse input. It uses a timer to activate the routine after five seconds. After five seconds, it retrieves the current tick count with GetTickCount. It gets information about the last user input with GetLastInputInfo. It retrieves the tick count at last user input from the struct. It subtracts the tick count at last input from the current tick count to find out how many ticks (milliseconds) the system has been idle. (Divide by 1000 to get the value in seconds instead of milliseconds.)
Tick Count | GetLastInputInfo | Session Idle Time | Demo