Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Move MsgBox (/AutoIt3ExecuteScript)


  • Please log in to reply
18 replies to this topic

#1 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 04 March 2006 - 06:58 AM

Requires the beta version of AutoIt.

A standard MsgBox is centered on the screen.
If you want the MsgBox to be display elsewhere, consider making a GUI.

For those not ready to make a GUI version of the standard MsgBox, see each User Defined Function (UDF) below. They use the @AutoItExe & /AutoIt3ExecuteScript features to launch another script to move the standard MsgBox.

A standard MsgBox has a flag, a title and some text.
MsgBox(0, "testTitle", "testText")

To use the Move Message Box UDF below, copy the code from the first code box and place it near the bottom of your own script.

Then cut out this line:
_MoveMsgBox(0, "testTitle", "testText", 0, 10)
and paste into the main part of your script.

Replace "testTitle" & "testText" with your info.
Then replace the "0, 10" part with the x and y coordinates you want...
Plain Text         
; Move Message Box ; Author - herewasplato _MoveMsgBox(0, "testTitle", "testText", 0, 10) Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $x, $y)     Local $file = FileOpen(EnvGet("temp") & "\MoveMB.au3", 2)     If $file = -1 Then Return;if error, give up on the move         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $x & ', ' & $y & ')'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MoveMB.au3")         MsgBox($MBFlag, $MBTitle, $MBText)         While Not FileDelete(EnvGet("temp") & "\MoveMB.au3")         Sleep(10)     WEnd EndFunc;==>_MoveMsgBox


If you want the MsgBox to move around a few times before stopping, consider using the UDF below.
Follow the instructions mentioned for the UDF above but after replacing the x and y coordinates,
replace 22 with the number of times that you want the
MsgBox to move around on the screen before stopping
Then replace 333 with a lower number to make each move go faster.
Plain Text         
; Random Move Message Box ; Author - herewasplato _RandomMoveMsgBox(0, "testTitle", "testText", 0, 10, 22, 333) Func _RandomMoveMsgBox($MBFlag, $MBTitle, $MBText, $x, $y, $moves, $speed)     Local $file = FileOpen(EnvGet("temp") & "\RandomMoveMB.au3", 2)     If $file = -1 Then Return;if error, give up on the move         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'For $m = 1 to ' & $moves     Local $line4 = '    WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', Random(0, @DesktopWidth - 150, 1), Random(0, @DesktopHeight - 150, 1))'     Local $line5 = '    Sleep(' & $speed & ')'     Local $line6 = 'Next'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3 & @CRLF)     FileWrite($file, $line4 & @CRLF & $line5 & @CRLF & $line6)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\RandomMoveMB.au3")         MsgBox($MBFlag, $MBTitle, $MBText)         While Not FileDelete(EnvGet("temp") & "\RandomMoveMB.au3")         Sleep(10)     WEnd EndFunc;==>_RandomMoveMsgBox
Of course, the combination of the @AutoItExe & /AutoIt3ExecuteScript features can do much more than move a MsgBox around.


Edit: Anyone want to make one spiral from the outer edge of the screen to the center - or vice versa...
You can use FileWriteLn and an array for the temp code.

Edit2: There was a reason for the "random code":
http://www.autoitscript.com/forum/index.php?showtopic=22520

Edit3: Updated the file delete since the file did not delete on some systems. In rare cases this loop might go on forever.

Edit4: Thanks go out to the entire AutoIt team and especially jpm, Valik and SlimShady:
http://www.autoitscript.com/forum/index.ph...ndpost&p=156446

Edited by herewasplato, 18 March 2006 - 06:59 PM.

..







#2 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 04 March 2006 - 07:33 AM

Variations on a theme:
Plain Text         
; Move Message Box - with timeout ; Author - herewasplato _MoveMsgBox(0, "testTitle", "testText", 3, 0, 10) Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $timeout, $x, $y)     Local $file = FileOpen(EnvGet("temp") & "\MoveMB.au3", 2)     If $file = -1 Then Return;if error, give up on the move         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $x & ', ' & $y & ')'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MoveMB.au3")         MsgBox($MBFlag, $MBTitle, $MBText, $timeout)         While Not FileDelete(EnvGet("temp") & "\MoveMB.au3")         Sleep(10)     WEnd EndFunc  ;==>_MoveMsgBox
Plain Text         
; Random Move Message Box - with timeout ; Author - herewasplato _RandomMoveMsgBox(0, "testTitle", "testText", 3, 0, 10, 22, 333) Func _RandomMoveMsgBox($MBFlag, $MBTitle, $MBText, $timeout, $x, $y, $moves, $speed)     Local $file = FileOpen(EnvGet("temp") & "\RandomMoveMB.au3", 2)     If $file = -1 Then Return;if error, give up on the move         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'For $m = 1 to ' & $moves     Local $line4 = '    WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', Random(0, @DesktopWidth - 150, 1), Random(0, @DesktopHeight - 150, 1))'     Local $line5 = '    Sleep(' & $speed & ')'     Local $line6 = 'Next'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3 & @CRLF)     FileWrite($file, $line4 & @CRLF & $line5 & @CRLF & $line6)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\RandomMoveMB.au3")         MsgBox($MBFlag, $MBTitle, $MBText, $timeout)         While Not FileDelete(EnvGet("temp") & "\RandomMoveMB.au3")         Sleep(10)     WEnd EndFunc  ;==>_RandomMoveMsgBox
Might want to set the timeout long enough for the moves to complete.

Edited by herewasplato, 04 March 2006 - 07:05 PM.

..

#3 greenmachine

greenmachine

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 1,252 posts

Posted 04 March 2006 - 08:07 AM

Well this is interesting... turns out somehow you can delete the file while it's still running. The move script runs until the for loop is finished, regardless of whether the message box is there or not.

#4 MHz

MHz

    Just simple

  • MVPs
  • 5,724 posts

Posted 04 March 2006 - 01:29 PM

This is a MsgBox using /AutoIt3ExecuteLine that is good for someone who has troubles hitting the OK button with the mouse.
_MsgBox('My MsgBox', 'Press OK to proceed') Func _MsgBox($title, $text)     Local $pid, $pos     MouseMove(@DesktopWidth / 2, @DesktopHeight / 2 + 60, 1)     $pid = Run(@AutoItExe & ' /AutoIt3ExecuteLine ' & _             '"MsgBox(0x0,''' & $title & ''',''' & $text & ''')"')     WinWait($title, $text)     While WinExists($title, $text)         $pos = MouseGetPos()         If Not @error Then             WinMove($title, $text, $pos[0] - 60, $pos[1] - 80)         EndIf         Sleep(10)     WEnd     ProcessWaitClose($pid) EndFunc

Edited by MHz, 04 March 2006 - 01:32 PM.


#5 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 04 March 2006 - 07:24 PM

Well this is interesting... turns out somehow you can delete the file while it's still running. The move script runs until the for loop is finished, regardless of whether the message box is there or not.

Yep - once the code is in ram, you can delete or write over the temp au3 - thus getting it ready for the next time the main script calls it. The same au3 can be used for as many things and as many times as you wish... if used carefully.

Edited by herewasplato, 15 April 2006 - 04:27 PM.

..

#6 greenmachine

greenmachine

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 1,252 posts

Posted 04 March 2006 - 07:57 PM

Yep - once the code is in ram, you can delete or write over the temp au3 - thus getting it ready for the time the main script calls it. The same au3 can be used for as many things and as many times as you wish... if used carefully.


Well that's cool. I guess I was under the impression it acted like an exe, where it's constantly being used as it is run. But I guess if it's being fully read into ram, this makes more sense.

#7 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,730 posts

Posted 04 March 2006 - 08:20 PM

Anyone know why the Line Feed doesn't work on this (@CRLF / @LF) No big deal, @CR does... just curious.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.


#8 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 04 March 2006 - 11:39 PM

This is a MsgBox using /AutoIt3ExecuteLine that is good for someone who has troubles hitting the OK button with the mouse....

That is cute. :-)
..

#9 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 15 April 2006 - 02:09 AM

From this request: http://www.autoitscript.com/forum/index.php?showtopic=24730
Plain Text         
; Message Box with Sound ; Author - herewasplato _MsgBoxSound(0, "Done", "Thank You! Come Again!", "C:\WINDOWS\Media\tada.wav", 10) Func _MsgBoxSound($MBFlag, $MBTitle, $MBText, $MBSound, $timeout)     Local $file = FileOpen(EnvGet("temp") & "\MBSound.au3", 2)     If $file = -1 Then MsgBox(0, "", "Error opening file.")         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'SoundPlay("' & $MBSound & '", 1)'         FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MBSound.au3")         MsgBox($MBFlag, $MBTitle, $MBText, $timeout)         While Not FileDelete(EnvGet("temp") & "\MBSound.au3")         Sleep(10)     WEnd EndFunc  ;==>_MsgBoxSound

..

#10 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,730 posts

Posted 17 May 2006 - 08:32 AM

I started playing with this tonight, and couldn't stop... I had an issue before with @CRLF / @LF / @CR when trying to do multiple lines, I also liked what MHz showed, and someone had something about making it return a value, so I finally played with STDOutRead()...

Anyway, it now supports multiple lines / a virtual multithreaded MsgBox() (don't know what else to call it :))/ and Return Value from it... Have fun (Oh and if you see something to make it easier/better feel free :(
Plain Text         
$xpos = 50 $ypos = 30 $TestValue = _MoveMsgBox(68, "Testing Move MsgBox", "This is line one" & @LF & _         "This is line two" & @LF & _         "This is line three" & @LF & _         'Would you like to continue?', 0, $xpos, $ypos, 1) If $TestValue = 6 Then     MsgBox(64, 'Info:', 'You Chose Yes') ElseIf $TestValue = 7 Then     MsgBox(64, 'Info:', 'You Chose No') Else     MsgBox(48, 'Error:', 'Something is wrong with the return values') EndIf Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $MBTimeOut, $MBxPos, $MByPos, $MBContinue = 0)     Local $MBFile = FileOpen(EnvGet("temp") & "\MiscMMB.xxx", 2)     Local $MBFile2 = FileOpen(EnvGet("temp") & "\MiscMMB2.xxx", 2)     If $MBFile = -1 Or $MBFile2 = -1 Then Return         Local $LineDelimter = '', $MBPID1 = '', $MBPID2 = ''         If UBound(StringSplit($MBText, @CRLF, 1)) - 2 > 0 Then         $LineDelimter = @CRLF     ElseIf UBound(StringSplit($MBText, @CR, 1)) - 2 > 0 Then         $LineDelimter = @CR     ElseIf UBound(StringSplit($MBText, @LF, 1)) - 2 > 0 Then         $LineDelimter = @LF     EndIf         Local $SSpMB = StringSplit($MBText, $LineDelimter, 1)     If UBound($SSpMB) - 2 > 0  And $LineDelimter <> '' Then         Local $MBLine1 = '#NoTrayIcon'         Local $MBLine2 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'         FileWriteLine($MBFile, $MBLine1 & @CRLF & $MBLine2)                 $MsgBoxLine1 = '#NoTrayIcon'         FileWriteLine($MBFile2, $MsgBoxLine1)                 Local $MsgBoxLine[UBound($SSpMB)]         Local $LinesToShow = ''         For $iCount = 1 To UBound($SSpMB) - 1             FileWriteLine($MBFile, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             FileWriteLine($MBFile2, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             If $iCount < UBound($SSpMB) - 1 Then                 $LinesToShow &= '$MsgBoxLine' & $iCount & ' & @CRLF & '             Else                 $LinesToShow &= '$MsgBoxLine' & $iCount             EndIf         Next                 Local $MBLine3 = 'WinWait("' & $MBTitle & '", ' & '$LinesToShow' & ')'         Local $MBLine4 = 'WinMove("' & $MBTitle & '", ' & '$LinesToShow' & ', ' & $MBxPos & ', ' & $MByPos & ')'         FileWriteLine($MBFile, '$LinesToShow = ' & $LinesToShow & @CRLF & $MBLine3 & @CRLF & $MBLine4)         FileWriteLine($MBFile2, '$LinesToShow = ' & $LinesToShow)                 Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ' & '$LinesToShow' & ', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWriteLine($MBFile2, $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile)         FileClose($MBFile2)     Else         Local $MBLine1 = '#NoTrayIcon'         Local $MBLine2 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'         Local $MBLine3 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'         Local $MBLine4 = 'WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $MBxPos & ', ' & $MByPos & ')'         FileWrite($MBFile, $MBLine1 & @CRLF & $MBLine2 & @CRLF & $MBLine3 & @CRLF & $MBLine4)         FileClose($MBFile)                 Local $MsgBoxLine1 = '#NoTrayIcon'         Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ''' & $MBText & ''', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWrite($MBFile2, $MsgBoxLine1 & @CRLF & $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile2)     EndIf         $MBPID1 = Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MiscMMB.xxx")     $MBPID2 = Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & EnvGet("temp") & "\MiscMMB2.xxx", @WorkingDir, 0, 6)         WinWait($MBTitle, $MBText, 2)     While (Not FileDelete(EnvGet("temp") & "\MiscMMB.xxx") Or Not FileDelete(EnvGet("temp") & "\MiscMMB2.xxx"))         Sleep(10)     WEnd         If $MBContinue Then         While 1             $StdOutReadValue = StdoutRead($MBPID2)             If StringInStr($StdOutReadValue, 'MsgBoxSays') Then                 $a_Array = StringRegExp($StdOutReadValue, '(?:MsgBoxSays)(.*?)(?:Return)', 3)                 If Not @error Then Return $a_Array[0]                 Return 0             EndIf             Sleep(10)         WEnd     EndIf     Return 0 EndFunc;==>_MoveMsgBox


Edit:
Pretty bulky huh :D

Edited by SmOke_N, 17 May 2006 - 03:42 PM.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.


#11 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 19 May 2006 - 04:21 AM

...and Return Value from it...

I could not get yours to work.
It could not find either MiscMMB.xxx or MiscMMB2.xxx

Then I ran one of my first versions and the msgbox stayed put way too long before the move. The only major change to the system running the code was a new version of antivirus software. I changed a setting within that software from "Disable file cache" to "Use default file cache size" and all was as before... and your code ran as expected.

So, I say all of that to say this; you might want to change WinWait($MBTitle, $MBText, 2) to handle really slow systems.

I added the return value - I might not have done it the right way:
Plain Text         
; Move Message Box - with timeout - with return ; Author - herewasplato $ans = _MoveMsgBox(4, "testTitle", "testText", 15, 0, 10) MsgBox(0, "Returned", $ans) Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $timeout, $x, $y)     Local $file = FileOpen(EnvGet("temp") & "\MoveMB.au3", 2)     If $file = -1 Then Return;if error, give up on the move         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'     Local $line3 = 'WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $x & ', ' & $y & ')'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MoveMB.au3")         Sleep(1000)         Local $ans = MsgBox($MBFlag, $MBTitle, $MBText, $timeout)         While Not FileDelete(EnvGet("temp") & "\MoveMB.au3")         Sleep(10)     WEnd         Return ($ans) EndFunc ;==>_MoveMsgBox
This version does not support multi-line text.
Try it without the Sleep(1000) line :-)

Edited by herewasplato, 19 May 2006 - 04:48 AM.

..

#12 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,730 posts

Posted 19 May 2006 - 06:15 AM

I could not get yours to work.
It could not find either MiscMMB.xxx or MiscMMB2.xxx

Then I ran one of my first versions and the msgbox stayed put way too long before the move. The only major change to the system running the code was a new version of antivirus software. I changed a setting within that software from "Disable file cache" to "Use default file cache size" and all was as before... and your code ran as expected.

So, I say all of that to say this; you might want to change WinWait($MBTitle, $MBText, 2) to handle really slow systems.

I added the return value - I might not have done it the right way:

CODE
; Move Message Box - with timeout - with return
; Author - herewasplato

$ans = _MoveMsgBox(4, "testTitle", "testText", 15, 0, 10)
MsgBox(0, "Returned", $ans)

Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $timeout, $x, $y)
Local $file = FileOpen(EnvGet("temp") & "\MoveMB.au3", 2)
If $file = -1 Then Return;if error, give up on the move

Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'
Local $line2 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'
Local $line3 = 'WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $x & ', ' & $y & ')'
FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)
FileClose($file)

Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MoveMB.au3")

Sleep(1000)

Local $ans = MsgBox($MBFlag, $MBTitle, $MBText, $timeout)

While Not FileDelete(EnvGet("temp") & "\MoveMB.au3")
Sleep(10)
WEnd

Return ($ans)
EndFunc ;==>_MoveMsgBox
This version does not support multi-line text.
Try it without the Sleep(1000) line :-)

The .xxx was something I was testing, I meant to change that back to .txt. Sorry.

The return values were wrong in the one I sent you, because the Flag was set incorrectly, I was testing something and forgot to set it back to 68. If you ran the one in the post above it would have given the correct return values.

As per the PM earlier, I am not using WinWait() in mine but WinExists() in a While/WEnd loop which if WinWait() is causing issues on a slower computer, WinExists() may be a bigger issue. But again that could be easily solved with another loop making sure that the position is true.

Here's an example, this should fix any issue you are having with a slow computer:
Plain Text         
$xpos = 50 $ypos = 30 $TestValue = _MoveMsgBox(68, "Testing Move MsgBox", 'Would you like to continue?', 0, $xpos, $ypos, 1) If $TestValue = 6 Then     MsgBox(64, 'Info:', 'You Chose Yes') ElseIf $TestValue = 7 Then     MsgBox(64, 'Info:', 'You Chose No') Else     MsgBox(48, 'Error:', 'Something is wrong with the return values') EndIf Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $MBTimeOut, $MBxPos, $MByPos, $MBContinue = 0)     Local $MBFile = FileOpen(EnvGet("temp") & "\MiscMMB.txt", 2)     Local $MBFile2 = FileOpen(EnvGet("temp") & "\MiscMMB2.txt", 2)     If $MBFile = -1 Or $MBFile2 = -1 Then Return 0         Local $LineDelimter = '', $MBPID1 = '', $MBPID2 = ''         If UBound(StringSplit($MBText, @CRLF, 1)) - 2 > 0 Then         $LineDelimter = @CRLF     ElseIf UBound(StringSplit($MBText, @CR, 1)) - 2 > 0 Then         $LineDelimter = @CR     ElseIf UBound(StringSplit($MBText, @LF, 1)) - 2 > 0 Then         $LineDelimter = @LF     EndIf         Local $SSpMB = StringSplit($MBText, $LineDelimter, 1)     If UBound($SSpMB) - 2 > 0 And $LineDelimter <> '' Then         Local $MBLine1 = '#NoTrayIcon'         Local $MBLine2 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'         FileWriteLine($MBFile, $MBLine1 & @CRLF & $MBLine2)                 $MsgBoxLine1 = '#NoTrayIcon'         FileWriteLine($MBFile2, $MsgBoxLine1)                 Local $MsgBoxLine[UBound($SSpMB)]         Local $LinesToShow = ''         For $iCount = 1 To UBound($SSpMB) - 1             FileWriteLine($MBFile, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             FileWriteLine($MBFile2, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             If $iCount < UBound($SSpMB) - 1 Then                 $LinesToShow &= '$MsgBoxLine' & $iCount & ' & @CRLF & '             Else                 $LinesToShow &= '$MsgBoxLine' & $iCount             EndIf         Next                 Local $MBLine3 = 'WinWait("' & $MBTitle & '", ' & '$LinesToShow' & ')'         Local $MBLine4 = 'WinMove("' & $MBTitle & '", ' & '$LinesToShow' & ', ' & $MBxPos & ', ' & $MByPos & ')'         FileWriteLine($MBFile, '$LinesToShow = ' & $LinesToShow & @CRLF & $MBLine3 & @CRLF & $MBLine4)         FileWriteLine($MBFile2, '$LinesToShow = ' & $LinesToShow)                 Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ' & '$LinesToShow' & ', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWriteLine($MBFile2, $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile)         FileClose($MBFile2)     Else         Local $MBLine1 = '#NoTrayIcon' ;Local $MBLine3 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'         Local $MBLine2 = 'While 1'         Local $MBLine3 = '  If WinExists("' & $MBTitle & '", "' & $MBText & '"' & ') Then'         Local $MBLine4 = '      While WinExists("' & $MBTitle & '", "' & $MBText & '"' & ')'         Local $MBLine5 = '          WinMove("' & $MBTitle & '", "' & $MBText & '"' & ', ' & $MBxPos & ', ' & $MByPos & ')'         Local $MBLine6 = '          $WinPos = WinGetPos("' & $MBTitle & '", "' & $MBText & '")'         Local $MBLine7 = '          If IsArray($WinPos) And $WinPos[0] = ' & $MBxPos & ' And $WinPos[1] = ' & $MByPos & ' Then Exit'         Local $MBLine8 = '      WEnd'         Local $MBLine9 = '  EndIf'         Local $MBLine10 = 'WEnd'         FileWrite($MBFile, $MBLine1 & @CRLF & _                 $MBLine2 & @CRLF & _                 $MBLine3 & @CRLF & _                 $MBLine4 & @CRLF & _                 $MBLine5 & @CRLF & _                 $MBLine6 & @CRLF & _                 $MBLine7 & @CRLF & _                 $MBLine8 & @CRLF & _                 $MBLine9 & @CRLF & _                 $MBLine10)         FileClose($MBFile)                 Local $MsgBoxLine1 = '#NoTrayIcon'         Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ''' & $MBText & ''', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWrite($MBFile2, $MsgBoxLine1 & @CRLF & $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile2)     EndIf         $MBPID1 = Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MiscMMB.txt")     $MBPID2 = Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & EnvGet("temp") & "\MiscMMB2.txt", @WorkingDir, 0, 6)         WinWait($MBTitle, $MBText, 2)     While (Not FileDelete(EnvGet("temp") & "\MiscMMB.txt") Or Not FileDelete(EnvGet("temp") & "\MiscMMB2.txt"))         Sleep(10)     WEnd         If $MBContinue Then         While 1             $StdOutReadValue = StdoutRead($MBPID2)             If StringInStr($StdOutReadValue, 'MsgBoxSays') Then                 $a_Array = StringRegExp($StdOutReadValue, '(?:MsgBoxSays)(.*?)(?:Return)', 3)                 If Not @error Then Return $a_Array[0]                 Return 0             EndIf             Sleep(10)         WEnd     EndIf     Return 0 EndFunc ;==>_MoveMsgBox

Edited by SmOke_N, 19 May 2006 - 06:16 AM.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.


#13 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 21 May 2006 - 12:43 AM

...Here's an example, this should fix any issue you are having with a slow computer:

Nope, same problem. The only problem line was (and still is) this line: WinWait($MBTitle, $MBText, 2)
If you change it to a much longer timeout, then the temp files will not be deleted before they can be loaded into memory: WinWait($MBTitle, $MBText, 2000)

The Anti-Virus setting that I was messing with is a cache where it keeps track of apps deemed safe. If I disable that cache, then it took much more than 2 seconds for the temp files to be loaded into RAM. You can remark out that line and see what I mean by the files being deleted too soon.

No problem with the .xxx ext.
It does point out that most any or no ext. can be used.

(I noticed/changed the MsgBox flag to a boring 4.)
..

#14 SmOke_N

SmOke_N

    It's not what you know ... It's what you can prove!

  • Moderators
  • 15,730 posts

Posted 22 May 2006 - 06:55 PM

Nope, same problem. The only problem line was (and still is) this line: WinWait($MBTitle, $MBText, 2)
If you change it to a much longer timeout, then the temp files will not be deleted before they can be loaded into memory: WinWait($MBTitle, $MBText, 2000)

The Anti-Virus setting that I was messing with is a cache where it keeps track of apps deemed safe. If I disable that cache, then it took much more than 2 seconds for the temp files to be loaded into RAM. You can remark out that line and see what I mean by the files being deleted too soon.

No problem with the .xxx ext.
It does point out that most any or no ext. can be used.

(I noticed/changed the MsgBox flag to a boring 4.)

Sorry the WinWait() timeout was for testing was for testing. I also fixed the line breaks of text with a While/WEnd
AutoIt         
$xpos = 50 $ypos = 30 $TestValue = _MoveMsgBox(68, "Testing Move MsgBox", 'Would you like to continue?' & @CRLF & 'If you would like to continue click Yes, otherwise press No', 0, $xpos, $ypos, 1) If $TestValue = 6 Then     MsgBox(64, 'Info:', 'You Chose Yes') ElseIf $TestValue = 7 Then     MsgBox(64, 'Info:', 'You Chose No') Else     MsgBox(48, 'Error:', 'Something is wrong with the return values') EndIf Func _MoveMsgBox($MBFlag, $MBTitle, $MBText, $MBTimeOut, $MBxPos, $MByPos, $MBContinue = 0)     Local $MBFile = FileOpen(EnvGet("temp") & "\MiscMMB.txt", 2)     Local $MBFile2 = FileOpen(EnvGet("temp") & "\MiscMMB2.txt", 2)     If $MBFile = -1 Or $MBFile2 = -1 Then Return 0         Local $LineDelimter = '', $MBPID1 = '', $MBPID2 = ''         If UBound(StringSplit($MBText, @CRLF, 1)) - 2 > 0 Then         $LineDelimter = @CRLF     ElseIf UBound(StringSplit($MBText, @CR, 1)) - 2 > 0 Then         $LineDelimter = @CR     ElseIf UBound(StringSplit($MBText, @LF, 1)) - 2 > 0 Then         $LineDelimter = @LF     EndIf         Local $SSpMB = StringSplit($MBText, $LineDelimter, 1)     If UBound($SSpMB) - 2 > 0 And $LineDelimter <> '' Then         Local $MBLine1 = '#NoTrayIcon'         FileWriteLine($MBFile, $MBLine1)                 $MsgBoxLine1 = '#NoTrayIcon'         FileWriteLine($MBFile2, $MsgBoxLine1)                 Local $MsgBoxLine[UBound($SSpMB)]         Local $LinesToShow = ''         For $iCount = 1 To UBound($SSpMB) - 1             FileWriteLine($MBFile, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             FileWriteLine($MBFile2, '$MsgBoxLine' & $iCount & ' = "' & $SSpMB[$iCount] & '"')             If $iCount < UBound($SSpMB) - 1 Then                 $LinesToShow &= '$MsgBoxLine' & $iCount & ' & @CRLF & '             Else                 $LinesToShow &= '$MsgBoxLine' & $iCount             EndIf         Next         Local $MBLine2 = 'While 1'         Local $MBLine3 = '    If WinExists("' & $MBTitle & '", ' & '$MsgBoxLine1' & ') Then'         Local $MBLine4 = '        While WinExists("' & $MBTitle & '", ' & '$MsgBoxLine1' & ')'         Local $MBLine5 = '            ControlMove("' & $MBTitle & '", ' & '$MsgBoxLine1' & ', "", ' & $MBxPos & ', ' & $MByPos & ')'         Local $MBLine6 = '            $WinPos = WinGetPos("' & $MBTitle & '", ' & '$MsgBoxLine1' & ')'         Local $MBLine7 = '            If IsArray($WinPos) And $WinPos[0] = ' & $MBxPos & ' And $WinPos[1] = ' & $MByPos & ' Then Exit'         Local $MBLine8 = '        WEnd'         Local $MBLine9 = '    EndIf'         Local $MBLine10 = 'WEnd'         FileWrite($MBFile, '$LinesToShow = ' & $LinesToShow & @CRLF & _                 $MBLine2 & @CRLF & _                 $MBLine3 & @CRLF & _                 $MBLine4 & @CRLF & _                 $MBLine5 & @CRLF & _                 $MBLine6 & @CRLF & _                 $MBLine7 & @CRLF & _                 $MBLine8 & @CRLF & _                 $MBLine9 & @CRLF & _                 $MBLine10)         FileWriteLine($MBFile2, '$LinesToShow = ' & $LinesToShow)                 Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ' & '$LinesToShow' & ', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWriteLine($MBFile2, $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile)         FileClose($MBFile2)     Else         Local $MBLine1 = '#NoTrayIcon'         ;Local $MBLine3 = 'WinWait("' & $MBTitle & '", "' & $MBText & '")'         Local $MBLine2 = 'While 1'         Local $MBLine3 = '    If WinExists("' & $MBTitle & '", "' & $MBText & '"' & ') Then'         Local $MBLine4 = '        While WinExists("' & $MBTitle & '", "' & $MBText & '"' & ')'         Local $MBLine5 = '            ControlMove("' & $MBTitle & '", "' & $MBText & '"' & ', "", ' & $MBxPos & ', ' & $MByPos & ')'         Local $MBLine6 = '            $WinPos = WinGetPos("' & $MBTitle & '", "' & $MBText & '")'         Local $MBLine7 = '            If IsArray($WinPos) And $WinPos[0] = ' & $MBxPos & ' And $WinPos[1] = ' & $MByPos & ' Then Exit'         Local $MBLine8 = '        WEnd'         Local $MBLine9 = '    EndIf'         Local $MBLine10 = 'WEnd'         FileWrite($MBFile, $MBLine1 & @CRLF & _                 $MBLine2 & @CRLF & _                 $MBLine3 & @CRLF & _                 $MBLine4 & @CRLF & _                 $MBLine5 & @CRLF & _                 $MBLine6 & @CRLF & _                 $MBLine7 & @CRLF & _                 $MBLine8 & @CRLF & _                 $MBLine9 & @CRLF & _                 $MBLine10)         FileClose($MBFile)                 Local $MsgBoxLine1 = '#NoTrayIcon'         Local $MsgBoxLine2 = '$MsgBoxValue = MsgBox(' & $MBFlag & ', ''' & $MBTitle & ''', ''' & $MBText & ''', ''' & $MBTimeOut & ''')'         Local $MsgBoxLine3 = 'ConsoleWrite(' & "'MsgBoxSays'" & ' & $MsgBoxValue & ' & "'Return'" & ')'         FileWrite($MBFile2, $MsgBoxLine1 & @CRLF & $MsgBoxLine2 & @CRLF & $MsgBoxLine3)         FileClose($MBFile2)     EndIf         $MBPID1 = Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\MiscMMB.txt")     $MBPID2 = Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & EnvGet("temp") & "\MiscMMB2.txt", @WorkingDir, 0, 6)         WinWait($MBTitle, $MBText, 60)     While (Not FileDelete(EnvGet("temp") & "\MiscMMB.txt") Or Not FileDelete(EnvGet("temp") & "\MiscMMB2.txt"))         Sleep(10)     WEnd         If $MBContinue Then         While 1             $StdOutReadValue = StdoutRead($MBPID2)             If StringInStr($StdOutReadValue, 'MsgBoxSays') Then                 $a_Array = StringRegExp($StdOutReadValue, '(?:MsgBoxSays)(.*?)(?:Return)', 3)                 If Not @error Then Return $a_Array[0]                 Return 0             EndIf             Sleep(10)         WEnd     EndIf     Return 0 EndFunc   ;==>_MoveMsgBox
I don't think it should be more than a minute to wait for it to load, really anything to much under the normal time to bring a message box up (Not 60 seconds) IMHO is not worth using this.

Edited by SmOke_N, 22 May 2006 - 06:57 PM.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.


#15 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 23 May 2006 - 12:08 AM

Prompted by this request:
http://www.autoitscript.com/forum/index.ph...showtopic=26489

Edit: removed code - had errors... gafrost fixed them :-) Thanks!

@Others,
How can I allow the optional parms to be skipped without impacting the position of the InputBox?
$ans = _InputBoxOnTop("Title", "Prompt") will make a box at position 0, 0 instead of centered.

Edited by herewasplato, 23 May 2006 - 01:14 AM.

..

#16 GaryFrost

GaryFrost

    I don't need your attitude. I have one of my own

  • Developers
  • 7,854 posts

Posted 23 May 2006 - 12:27 AM

AutoIt         
; InputBox OnTop ; Author - herewasplato $ans = _InputBoxOnTop("Title", "Prompt") If @error = 0 Then MsgBox(0, "Returned", $ans) If @error = 1 Then MsgBox(0, "", "The Cancel button was pushed.") If @error = 2 Then MsgBox(0, "", "The Timeout time was reached.") If @error = 3 Then MsgBox(0, "", "The InputBox failed to open.") Func _InputBoxOnTop($IBTitle, $IBPrompt, $IBDefault = "", _         $IBpassword_char = "", $IBWidth = -1, $IBHeight = -1, _         $IBLeft = Default, $IBTop = Default, $IBTimeOut = "")     Local $file = FileOpen(EnvGet("temp") & "\InputBoxOT.au3", 2)     If $file = -1 Then Return;if error, give up         Local $line1 = 'AutoItSetOption(' & '"WinWaitDelay", 0' & ')'     Local $line2 = 'WinWait("' & $IBTitle & '", "' & $IBPrompt & '")'     Local $line3 = 'WinSetOnTop("' & $IBTitle & '", "' & $IBPrompt & '" ,1)'     FileWrite($file, $line1 & @CRLF & $line2 & @CRLF & $line3)     FileClose($file)         Run(@AutoItExe & " /AutoIt3ExecuteScript " & EnvGet("temp") & "\InputBoxOT.au3")         Local $ans = InputBox($IBTitle, $IBPrompt, $IBDefault, _             $IBpassword_char, $IBWidth, $IBHeight, _             $IBLeft, $IBTop, $IBTimeOut)     If @error Then         $ans = @error         While Not FileDelete(EnvGet("temp") & "\InputBoxOT.au3")             Sleep(10)         WEnd         SetError($ans)         $ans = ""         Return $ans     EndIf         While Not FileDelete(EnvGet("temp") & "\InputBoxOT.au3")         Sleep(10)     WEnd         Return ($ans) EndFunc   ;==>_InputBoxOnTop

Edited by gafrost, 23 May 2006 - 12:28 AM.

SciTE for AutoItDirections for Submitting Standard UDFs

Don't argue with an idiot; people watching may not be able to tell the difference.


#17 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 23 May 2006 - 01:16 AM

Thanks again gafrost.

... = Default

was the answer I could not find... silly me.
..

#18 herewasplato

herewasplato

    Most Senile Poster

  • Active Members
  • PipPipPipPipPipPip
  • 4,426 posts

Posted 10 June 2006 - 11:15 PM

SmOke_N does it again with another good use of /AutoIt3ExecuteScript:
_MsgBoxChangeButtons
http://www.autoitscript.com/forum/index.ph...st&p=194809
or here
http://www.autoitscript.com/forum/index.ph...showtopic=27491

Edit: yet another version:
http://www.autoitscript.com/forum/index.php?showtopic=32275

Edited by herewasplato, 07 November 2006 - 05:23 PM.

..

#19 slightly_abnormal

slightly_abnormal

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 513 posts

Posted 11 June 2006 - 05:00 AM

keep up the good work guys :D




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users