Pixelz Posted April 30, 2009 Share Posted April 30, 2009 (edited) Using the following script, I get a negative value returned: #include <Timers.au3> $idle = _Timer_GetIdleTime() ConsoleWrite($idle & @CRLF) My understanding is that this is supposed to return a positive value? This is on xp. I've done some searching for this but I haven't found anyone with the same problem Edit: I tried it on a different computer, and it seems to work fine there. The box I tried it on initially has a rather long uptime, perhaps that's related? Edited April 30, 2009 by Pixelz Link to comment Share on other sites More sharing options...
trancexx Posted April 30, 2009 Share Posted April 30, 2009 PsaltyDS is using signed integer as a return type of GetTickCount function thus causing wrong return value of that function under some conditions (if > ~24,855 days passed) ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Pixelz Posted April 30, 2009 Author Share Posted April 30, 2009 (edited) PsaltyDS is using signed integer as a return type of GetTickCount function thus causing wrong return value of that function under some conditions (if > ~24,855 days passed)How do I change it to something that works for higher uptimes?Edit: I change it to dword which seems to at least return a positive value, I'm not sure if it breaks anything else though.. Edited April 30, 2009 by Pixelz Link to comment Share on other sites More sharing options...
trancexx Posted April 30, 2009 Share Posted April 30, 2009 How do I change it to something that works for higher uptimes? Edit: I change it to dword which seems to at least return a positive value, I'm not sure if it breaks anything else though..This is the function: ; #FUNCTION#;=============================================================================== ; Name...........: _Timer_GetIdleTime ; Description ...: Returns the number of ticks since last user activity (i.e. KYBD/Mouse) ; Syntax.........: _Timer_GetIdleTime() ; Parameters ....: None ; Return values .: Success - integer ticks since last (approx. milliseconds) since last activity ; Failure - Sets @extended = 1 if rollover occurs (see remarks) ; Author ........: PsaltyDS at http://www.autoitscript.com/forum ; Modified.......: ; Remarks .......: The current ticks since last system restart will roll over to 0 every 50 days or so, ; which makes it possible for last user activity to be before the rollover, but run time ; of this function to be after the rollover. If this happens, @extended = 1 and the ; returned value is ticks since rollover occured. ; Related .......: ; Link ..........; ; Example .......; Yes ;;========================================================================================== Func _Timer_GetIdleTime() ; Get ticks at last activity Local $tStruct = DllStructCreate("uint;dword"); DllStructSetData($tStruct, 1, DllStructGetSize($tStruct)); DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($tStruct)) ; Get current ticks since last restart Local $avTicks = DllCall("Kernel32.dll", "int", "GetTickCount") ; Return time since last activity, in ticks (approx milliseconds) Local $iDiff = $avTicks[0] - DllStructGetData($tStruct, 2) If $iDiff >= 0 Then ; Normal return Return $iDiff Else ; Rollover of ticks counter has occured Return SetError(0, 1, $avTicks[0]) EndIf EndFunc ;==>_Timer_GetIdleTime Change Local $avTicks = DllCall("Kernel32.dll", "int", "GetTickCount") to Local $avTicks = DllCall("Kernel32.dll", "dword", "GetTickCount") and try. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Pixelz Posted April 30, 2009 Author Share Posted April 30, 2009 Change Local $avTicks = DllCall("Kernel32.dll", "int", "GetTickCount") to Local $avTicks = DllCall("Kernel32.dll", "dword", "GetTickCount") and try. Done & done. Seems to work. This might be something that shoud be considered changing in the UDF though since I can imagine there's more people than me who have an uptime higher than 25 days... Link to comment Share on other sites More sharing options...
KaFu Posted April 30, 2009 Share Posted April 30, 2009 Look at help-file, GetLastInputInfo will return wrong result after > 49 days anyhow (even with the correction above). Do an additional check on @extended if you expect the uptime might be higher then that. OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
trancexx Posted April 30, 2009 Share Posted April 30, 2009 PsaltyDS is known to be very pedantic. I'm sure it will be fixed.Btw, I'm more concern about him not checking errors after the DllCall() there. He checks errors after almost anything (he passed this behaviour to me actually). ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
PsaltyDS Posted May 6, 2009 Share Posted May 6, 2009 (edited) PsaltyDS is known to be very pedantic. I'm sure it will be fixed.I'm sure you meant that in a constructive, supportive, affirming way... Using dword return type would be better (and would more acurately reflect the type shown in MSDN). I didn't make a call one way or the other, however, as that call was lifted straight out of Date.au3 in the _Date_Time_GetTickCount() function. Probably should be tweaked in both places.Btw, I'm more concern about him not checking errors after the DllCall() there. He checks errors after almost anything (he passed this behaviour to me actually).I looked through the UDFs and didn't find the Devs checking for errors from DLLs that should never fail. If Kernel32.dll isn't available or the system timer can't be accessed then you don't even have a working instance of Windows running, let alone your AutoIt script. The MSDN description of GetTickCount doesn't show any status returned at all. So I copied that behavior where low-level functions that MUST work (if Windows does) are involved.I'm not a "real" programmer myself, just pick that up from the UDFs and this forum. So it could be wrong, but leaves me in good company. Edited May 6, 2009 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
trancexx Posted May 6, 2009 Share Posted May 6, 2009 I'm sure you meant that in a constructive, supportive, affirming way... I tend to be misinterpreted lately. To be on the safe side here... yes.Other part of your post is based on argumentum ad verecundiam and that makes it not worth commenting. Appeal to authority is just another logical fallacy. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
PsaltyDS Posted May 7, 2009 Share Posted May 7, 2009 I tend to be misinterpreted lately. To be on the safe side here... yes.My reply was only meant to be humorous, I didn't think your comment was meant badly and the reply wasn't meant to make you feel defensive. Other part of your post is based on argumentum ad verecundiam and that makes it not worth commenting. Appeal to authority is just another logical fallacy.I wasn't aware we were engaged in argument, let alone a formalized one. That seems a strange place to go on an all-volunteer forum for a freeware scripting language. To speak with the same jargon: Informal discourse would be more appropriate to the context and venue than formal dialectics.I've been away from the forum for a little while. Are you having some issues? Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now