ScottL Posted January 31, 2007 Posted January 31, 2007 (edited) I had a need to map out mouse positions for something I was doing at work, and started building is script. Then it just became fun to work on. It records mouse coordinates and writes them to a log file with a label you specify. Upon exiting, you can open the log file and see where you've been. expandcollapse popup; Script Author: Scott Lyerly ; Email (h): scott dot c dot lyerly at hotmail dot com ; Includes the three required files for this script to run correctly. #include <file.au3> #include <GUIConstants.au3> #Include <date.au3> ; Declares some global variable for use in any function Global $input Global $font Global $windir Global $secerror Global $seclogerror Global $delim $font = "Verdana" ; Sets the font to Verdana $secerror = "You must input a second value between 3 and 10." ; Sets an error message $seclogerror = "Error in selection of number of seconds." ; Sets an error message $delim = '"' ; Sets a quote are a variable for use in messages ; Checks to see whether the Windows Folder on the local machine is WINNT or WINDOWS If FileExists("C:\WINNT") Then $windir = "C:\WINNT" Else $windir = "C:\WINDOWS" EndIf ; Creates and/or overwrites the log file thatis used to track the program's progess. _FileCreate($windir & "\MousePositionLog.txt") ; GUI CREATION GUICreate("Mouse Position Mapper", 400, 125) ; Creates a GUI that is centered when displayed GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; Creates the function that will close the GUI is the Closed button is clicked ; GUI LABELS GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel ("Click CONTINUE to map the mouse coordinates." & @CRLF & _ "Click FINISHED to end the program.", 10, 40, 300, 40) ; Creates a instructional label for the GUI GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel ("This program will map your mouse coordinates.", 10, 10, 300, 20) ; Creates an instructional label for the GUI ; GUI BUTTONS GUISetFont (9, 400, 0, $font) $okbutton = GUICtrlCreateButton("Continue", 10, 90, 70, 25) ; Creates an OK button to continue with the script GUICtrlSetState(5, $GUI_DEFBUTTON) ;Sets "Continue" button as the default GUISetFont (9, 400, 0, $font) $donebutton = GUICtrlCreateButton("Finished", 90, 90, 70, 25) ; Creates a DONE button to continue with the script ; GUI BUTTON FUNCTIONS ; Sets the buttons to call specific functions if selected GUICtrlSetOnEvent($okbutton, "OKButton") GUICtrlSetOnEvent($okbutton, "Done") ; Shows the GUI to the user. GUISetState (@SW_SHOW) ; This WHILE...WEND runs until the user makes a choice with one of the buttons. ; Once pressed, it retrieves the GUI message and acts upon it. While 1 ; Check if the user clicked something in the GUI window $msg = GUIGetMsg() ; This SELECT lists the choices (CASEs) that are available depending on the user input. Select ; Checks if user clicked on the Windows CLOSE button Case $msg = $GUI_EVENT_CLOSE GUIDelete() ; Destroys the GUI including the controls Exit ; Exits the script ; Checks if user clicked on the "OK" button Case $msg = $okbutton GUISetState (@SW_HIDE) ; Hides the GUI from the user OKButton() ; Checks if user clicked the "Done" button Case $msg = $donebutton Done() EndSelect ; Ends SELECT WEnd ; Ends WHILE ; "OKButton" function Func OKButton() ; GUI CREATION GUISetFont (9, 400, 0, $font) GUICreate("Mouse Position Mapper", 320, 155) ; Creates a GUI that is centered when displayed GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; Creates the function that will close the GUI is the Closed button is clicked ; GUI INPUT BOX GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel ("Please enter a name for this position", 10, 10, 300, 20) ; Creates a label for the input box GUISetFont (9, 400, 0, $font) $input = GUICtrlCreateInput ( "", 10, 35, 300, 20) ; Creates an input box for user input GUISetFont (9, 400, 0, $font) ; GUI INPUT BOX GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel ("Enter No. Seconds Delay", 10, 65, 300, 20) ; Creates a label for the next input box GUISetFont (9, 400, 0, $font) $inputud = GUICtrlCreateInput ("3",10 ,90, 40, 20) ; Creates a second input box GUISetFont (9, 400, 0, $font) $updown = GUICtrlCreateUpdown($inputud) ; Creates an Up Down control GUICtrlSetLimit(4105,2,1) ; Sets character limit on the second input box GUICtrlSetLimit(4106,10,3) ; Sets a min/max on the Up Down control ; GUI BUTTONS GUISetFont (9, 400, 0, $font) $contbutton = GUICtrlCreateButton("Map", 10, 120, 70, 25) ; Creates the "Map" button GUICtrlSetState(4107,$GUI_DEFBUTTON) ; Sets "Map" button as the default GUISetFont (9, 400, 0, $font) $donebutton = GUICtrlCreateButton("Finished", 85, 120, 70, 25) ; Creates the "Finished" button ; GUI BUTTON FUNCTIONS GUICtrlSetOnEvent($contbutton, "ContButton") GUICtrlSetOnEvent($donebutton, "Done") ; Shows the GUI to the user. GUISetState (@SW_SHOW) ; This WHILE...WEND runs until the user makes a choice with one of the buttons ; Once pressed, it retrieves the GUI message and acts upon it. While 1 ; Check if the user clicked something in the GUI window $msg = GUIGetMsg() ; This SELECT lists the choices (CASEs) that are available depending on the user input. Select ; Checks if user clicked on the close button Case $msg = $GUI_EVENT_CLOSE GUIDelete() ; Destroys the GUI including the controls Exit ; Exits the script ; Check if user clicked on the "OK" button Case $msg = $contbutton GUISetState (@SW_HIDE) ; Hides the GUI from the user ; This declares $logfile be a local variables for use in this function only Dim $logfile ; IF statement validating second input box data If GUICtrlRead($inputud) > 10 Then MsgBox(0, "Input Error", $secerror) $logfile = FileOpen($windir & "\MousePositionLog.txt", 1) ; Opens the log file ; IF statement checking if file opened for writing OK with error handling If $logfile = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Writes to the log file FileWrite($logfile, _Now() & ": Position labeled '" & GUICtrlRead($input) & ": " & $seclogerror & ": " & $delim & $secerror & $delim & @CRLF) FileClose($logfile) ; Closes the log file OKButton() ; Calls OKButton function again ElseIf GUICtrlRead($inputud) < 3 Then MsgBox(0, "Input Error", $secerror) $logfile = FileOpen($windir & "\MousePositionLog.txt", 1) ; Opens the log file ; IF statement checking if file opened for writing OK with error handling If $logfile = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Writes to the log file FileWrite($logfile, _Now() & ": Position labeled '" & GUICtrlRead($input) & ": " & $seclogerror & ": " & $delim & $secerror & $delim & @CRLF) FileClose($logfile) ; Closes the log file OKButton() ; Calls OKButton function again Else ; GUI created as a "buttonless" message box $wait = GUICreate("Please Wait", 700, 50) GUISetFont (9, 400, 0, $font) ; Informational label created GUICtrlCreateLabel("Please move your mouse to a location and wait " & GUICtrlRead($inputud) & " seconds for the mouse coordinates to return.", 20, 10) GUISetState(@SW_SHOW) ; Shows GUI to user Dim $sleepytime ; Sets a variable $sleepytime = GUICtrlRead($inputud) *1000 ; Calaculates variable based on second input box Sleep($sleepytime) ; Pauses GUI for calculated variable GUISetState(@SW_HIDE) ; Hides the GUI $logfile = FileOpen($windir & "\MousePositionLog.txt", 1) ; Opens the log file ; Check if file opened for writing OK with error handling If $logfile = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $pos = MouseGetPos() ; Gets the mouse coordinates ; Writes to the log file FileWrite($logfile, _Now() & ": Position labeled '" & GUICtrlRead($input) & "' mapped to X = " & $pos[0] & " and Y = " & $pos[1] & @CRLF) FileClose($logfile) ; Closes the log file ; GUI created as a "buttonless" message box $donemsg = GUICreate("Please Wait", 400, 50) GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel("Mapping complete. You may now map another.", 20, 10) ; Creates an informational label GUISetState(@SW_SHOW); Shows the GUI Sleep(1500) ; Pauses the GUI for 1.5 seconds GUISetState(@SW_HIDE) ; Hides the GUI ContButton() ; Calls the ContButton Function EndIf ; ; Check if user clicked on the "Finished" button Case $msg = $donebutton Done() ; Calls the Done function EndSelect ; End of the SELECT WEnd ; End of the WHILE EndFunc ; End of the OK Button FUNCTION ; "ContButton" Function Func ContButton() ; This function calls the OKButton function. ; This is designed to loop through the program based on user input. It allows the user ; to continue to map additional mouse coordinates if they have an especially long list of ; mouse positions to map. OKButton() EndFunc ; End of ContButton FUNCTION ; "CLOSEClick" Function Func CLOSEClicked() ; GUI created as a "buttonless" message box ; GUI CREATION $handle = GUICreate("Please Wait", 250, 50) GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel("Exiting ...", 20, 10) ; Creates informational label GUISetState(@SW_SHOW) ; Shows the GUI to the user Sleep(3000) ; Paused the GUI for 3 seconds GUISetState(@SW_HIDE) ; Hides the GUI Exit ; Exits the program EndFunc ; End of CLOSEClick FUNCTION ; "Done" Function Func Done() ; MsgBox prompts the user to open the mosition position log for viewing $openlog = MsgBox(4, "Open Log?", "Do you want to open the mouse poistion log file?") If $openlog = 6 Then ; If the yes clicks "Yes" ; The next few Send keys open the mouse position log Send("#r") WinWaitActive("Run") Send($windir & "\MousePositionLog.txt{Enter}") EndIf ; GUI created as a "buttonless" message box ; GUI CREATION $handle = GUICreate("Please Wait", 250, 50) GUISetFont (9, 400, 0, $font) GUICtrlCreateLabel("Exiting ...", 20, 10) ; Creates informational label GUISetState(@SW_SHOW) ; Shows the GUI to the user Sleep(3000) ; Paused the GUI for 3 seconds GUISetState(@SW_HIDE) ; Hides the GUI Exit ; Exits the program EndFunc ; End of Done Function ; END OF SCRIPT Edited January 31, 2007 by ScottL
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