Jump to content
IamKJ

Executing functions at specific times

Recommended Posts

I am trying to allow the GUI to gather info as to when to execute a function.  I am having trouble doing this.  So far this is what I have.

 

;Timer
Func timer ()
    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(36,"Timer","Please format your answer in 00:00:00:000")
Select
    Case $iMsgBoxAnswer = 6 ;Yes
Global $infotime = InputBox ('Time', 'What time to execute?')

Do
$rawtimer = ToolTip(@Hour & ':' & @Min & ':' & @Sec & ':' & _MSec())
until $rawtimer = $infotime
if $rawtimer = $infotime Then
    msgbox (0,'Worked','Worked')
Else
    EndIf

    Case $iMsgBoxAnswer = 7 ;No
        Exit

EndSelect
EndFunc
Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))

    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))

    $stSystemTime = 0

    Return $sMilliSeconds
EndFunc

I have also tried _GUIToolTip_GetText in order to read the tooltip until the time specified, but it still doesn't work.  Any help would be great.

Edited by IamKJ

Share this post


Link to post
Share on other sites

Yes, but those only act from when it was called.  I want to go off of system time.  For example, this script would ask them to input time to execute, so I'd put "03:30:00:000", and I'd like for it to execute at 3:30 A.M.  

 

I can get the system time displayed fine and everything, but can't figure out how to get autoit to read the time as a string and execute when that system time string reaches to time specified.

 

It might be possible/easier for it to read the time as a whole number, maybe if you add all the times (hh + mm + ss + ms) and get a whole number, that might work, but not sure how to get autoit to read the system time as a string or integer.

Edited by IamKJ

Share this post


Link to post
Share on other sites

Sorry misread your post, what about:

#include <Date.au3>
Global $infotime
Global $iTicks
timer()
Func timer ()
    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(36,"Timer","Please format your answer in 00:00:00")
    Select
        Case $iMsgBoxAnswer = 6 ;Yes
            $infotime = InputBox ('Time', 'What time to execute?')
            $iTicks = _TimeToTicks(StringLeft($infotime, 2), StringMid($infotime, 4, 2), StringRight($infotime, 2))
            Do
                ToolTip(@Hour & ':' & @Min & ':' & @Sec)
            Until _TimeToTicks(@HOUR, @MIN, @SEC) = $iTicks
            MsgBox(0,'Worked','Worked')
        Case $iMsgBoxAnswer = 7 ;No
            Exit
    EndSelect
EndFunc

 

Share this post


Link to post
Share on other sites

That worked perfectly.  However, it won't allow me to use the _Msec function in  _TimeToTicks, which returns milliseconds.

Share this post


Link to post
Share on other sites

It worked with the msgbox, but anything else I try to put after the Until statement just makes the original message box pop up.

Share this post


Link to post
Share on other sites

Can you give an example, I replaced the MsgBox with RunWait("Notepad.exe") and it worked fine.

Also regards your OP if you used the following it should also work, the issue previously is that you were reading ToolTip which just returned 0.

#include <Array.au3>
#include <Date.au3>
Global $infotime
timer()
Func timer ()
    $sTime = _DateAdd("s", 30, _NowCalc())
    $aTime = StringSplit($sTime, " ")
    $infotime = InputBox ('Time', 'What time to execute?', $aTime[2] & ":000")
    Do
        $sRawTimer = @Hour & ':' & @Min & ':' & @Sec & ':' & _MSec()
        ToolTip($sRawTimer)
    Until $sRawTimer = $infotime
    If $sRawTimer = $infotime Then MsgBox(0,'Worked','Worked')
EndFunc

Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))

    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))

    $stSystemTime = 0

    Return $sMilliSeconds
EndFunc

Share this post


Link to post
Share on other sites

The second code you posted worked beautifully every time.   It doesn't work all the time with the milliseconds, but that's fine, have found a way around that with using the sleep time and converting milliseconds into sleep time.  Thanks a lot!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By nooneclose
      Good morning, I am trying to figure out if it is possible to check if these invoice lines exist or not. 
      Here are the table and column name: INVOICELINE.INVOICELINENUM (a required field if created)
      Here is a picture of what I am talking about. (Do not worry about security. the picture is from a demo test site so all information is fake)
       
      is there any way to check if these fields exist or not? (they do not exist unless the user clicks on "New Row")
      Example: line 11 does not exist right now. How would I go about to see if it did or not? 
      This is what I have so far:
      SELECT DISTINCT iv.invoicenum, iv.description FROM invoice AS iv JOIN invoiceline AS ivl ON iv.invoicenum = ivl.invoicenum AND iv.siteid = ivl.siteid /* = 'nothing' and yet somehow not null? */ WHERE iv.invoicenum NOT IN (SELECT invoicelinenum FROM invoiceline WHERE invoicelinenum IS NOT NULL) I get 0 results where I should get more than 0. 
    • By Saravanan2213
      Hi everyone,
      i just need your help. i have script for cleaning browsing history and other unwanted file but the problem is i don't want to see the GUI i have attached below. It should not show anything on the screen. is it possible to do it in autoit. thanks in advance.
       
      So for i have tried flag
      Run("rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 255", "", @SW_HIDE)
      @SW_DISABLE
       
      Looking forward your help.........

    • By cptHark
      Hello I want to conect to a Network with DriveMapAdd.
      This worked just fine but when you restart the Computer the Mapped drive is gone.
      So i used the persistent mapping flag and that seemed to work, too.
      However when the Computer is restarted I cant connect to the Network because it doesnt remember the Username and password I ave it the first time.
      How do I fix this?
      My Code:Func
      setdrivem()
          DriveMapAdd("M:", GUICtrlRead($driveM),1, GUICtrlRead($netzuser),GUICtrlRead($netzpassword) )
      EndFunc
      $netzuser and $netzpassword are set earlier in the gui and it works right after executing the script but i want it to stay connected
    • By nooneclose
      Morning, I am wondering is there is a way to prevent a script from ending/crashing when a "Subscript used on non-accessible variable" error occurs? 
      Here is some of my code:
      $aItems = _OL_ItemFind($oOutlook, $mFolder[1], $olMail, "[UnRead]=True", "Subject", "Maintenance Request", "EntryID,Subject", "", 0) If @error Then Sleep(2000) LoopUnreadEmails() ;Exit MsgBox(48, "", "@error = " & @error & ", @extended: " & @extended & " at line: " & @ScriptLineNumber) EndIf Error Msg:
      (371) : ==> Subscript used on non-accessible variable.: $aItems = _OL_ItemFind($oOutlook, $mFolder[1], $olMail, "[UnRead]=True", "Subject", "Maintenance Request", "EntryID,Subject", "", 0) $aItems = _OL_ItemFind($oOutlook, $mFolder^ ERROR I know that error occurs very rarely and at random. But like with most errors "in this case" I can use recursion to fix it. 
      I just recall the function and it will and has fixed itself. But this "Subscript used on non-accessible variable" just ends the script.
      Like I said before, is there a way to allow the script to keep running or call a function when this error occurs instead of just ending?   
    • By max23ed
      Hi,  i'm recording a setup for a program using mouse clicks , however, the problem is when the setup installs (the progress bar showing) the auto generated script by the recorder will not have a winwait() or sleep() to click the "finish" button when the setup is completed. is there anyway to  do that automatically?
×
×
  • Create New...