Anybody know VB Scripting? Trying to fix an obsolete Gadget.


  1. Posts : 1,660
    Windows 8 Pro (32-bit)
       #1

    Anybody know VB Scripting? Trying to fix an obsolete Gadget.


    I've had this gadget That I really love, but it has a couple bugs. The problem is it's no longer supported by the developer. I had managed to fix one (simple formatting error), but the other one I located to being inside a VBScript file. Problem is, I know shit about Visual Basic. I'm pretty sure the problem is in a single line of code , and that would be easier to fix then rewriting the whole thing in JavaScript (especially since I most likely will be upgrading to Windows 8 soon)

    The problem is with system uptime. it shows a big negative number, even though I restated earlier today.

    Actually it seems to work fine on a computer running 32-bit Windows 7... But how do i fix this?



    \js\uptime.vbs:

    Code:
    Function GetUpdateInterval
        UpdateInterval = 1
        System.Gadget.Settings.write "UpdateInterval", UpdateInterval
        GetUpdateInterval = UpdateInterval * 1000
    End Function
     
    Sub uptime
     
        Set objLocator = CreateObject("WbemScripting.SWbemLocator")
        Set objWMIService = objLocator.ConnectServer(MachineName, "root\cimv2")
        Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
     
            For Each objOS in colOperatingSystems
     
                dtmBootup = objOS.LastBootUpTime
                dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
                dtmSystemUptimeSecs = DateDiff("s", dtmLastBootUpTime, Now)
     
                intSecsTotal     = dtmSystemUptimeSecs
                intDays           = Fix( intSecsTotal / 86400 )
                intSecsRemaining = ( intSecsTotal - ( intDays * 86400 ))
                intSecsTotal     = intSecsRemaining
                intHours         = Fix( intSecsTotal / 3600 )
                intSecsTotal    = ( intSecsTotal - ( intHours * 3600 ))
                intMinutes      = Fix( intSecsTotal / 60 )
     
                uptimeTxt.innerText = intDays & " days " & intHours & " hours " & intMinutes & " minutes"
                setTimeout "uptime()", GetUpdateInterval()
            Next
     
    End Sub
     
     
    Function WMIDateStringToDate(dtmBootup)
     
        WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
        Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
        & " " & Mid (dtmBootup, 9, 2) & ":" & _
        Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2))
     
    End Function
    Attached is the Gadget itself.
    Anybody know VB Scripting? Trying to fix an obsolete Gadget. Attached Files
    Last edited by Brink; 07 Jan 2012 at 07:18. Reason: merged
      My Computer


  2. Posts : 238
    Win7-64
       #2

    It looks to me like the issue is not with the code but the internal functions it calls. For some reason they seem to return negative numbers...I have no idea why. Try putting a - in front of each occurrence of Fix. This should turn the negative value into a positive.
      My Computer


  3. Posts : 1,660
    Windows 8 Pro (32-bit)
    Thread Starter
       #3

    Actually I figured it's because the function receives a 64bit value, even when Sidebar is in 32bit mode. It's always off by 127 days, so I just changed line 19 to automatically add the difference, so it looks like this:
    Code:
                intSecsTotal     = dtmSystemUptimeSecs + 10972800
    Works fine now. Would need to be changed to work on a 32bit machine, but it's fine for my needs.
      My Computer


 

  Related Discussions
Our Sites
Site Links
About Us
Windows 7 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 7" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd
All times are GMT -5. The time now is 05:43.
Find Us