Technical support and scripting issues
Moderators: Dorian (MJT support), JRL
-
krash2501
- Newbie
- Posts: 15
- Joined: Thu Jul 21, 2016 7:04 pm
Post
by krash2501 » Fri Feb 24, 2017 9:45 pm
I am not sure if I have this code in the correct spots or what the issue is. The dialog window works perfect when running from script editor but if I do a quick launch or run from EXE it locks up and does not work to the point I have to kill MS.
Do I have the GoSub>StayOnTop,Dialog1.Handle in the right place? as well as the SRT>StayOnTop?
Code: Select all
WriteLn>C:\Temp\Reboot.txt,result,NO
Dialog>Dialog1
....DIALOG DETAILS MINAMIZED...
EndDialog>Dialog1
GoSub>StayOnTop,Dialog1.Handle
AddDialogHandler>Dialog1,MSButton1,OnClick,DoClick(1)
Show>Dialog1,res1
SRT>StayOnTop
Let>HWND_TOPMOST=-1
Let>HWND_NOTOPMOST=-2
Let>SWP_NOSIZE=1
Let>SWP_NOMOVE=2
Let>SWP_NOACTIVATE=16
Let>SWP_SHOWWINDOW=64
Let>WindowHandle=%StayOnTop_var_1%
Let>Flags={%SWP_NOACTIVATE% Or %SWP_SHOWWINDOW% Or %SWP_NOMOVE% Or %SWP_NOSIZE%}
LibFunc>User32,SetWindowPos,swpr,%WindowHandle%,HWND_TOPMOST,0,0,0,0,Flags
END>StayOnTop
SRT>DoClick
SetDialogProperty>Dialog1,Edit2,Text,Restart in progress...
Message>The system is going to Log off now. Please wait 90 secs before you remote back in to th system.
wait>3
END>DoClick
-
JRL
- Automation Wizard
- Posts: 3526
- Joined: Mon Jan 10, 2005 6:22 pm
- Location: Iowa
Post
by JRL » Sat Feb 25, 2017 5:46 am
I don't know why your script crashes but I can tell you that you no longer need to use the library function to make a dialog stay on top. Instead use the dialog formstyle property "fsStayOnTop". The property will make a dialog stay on top as long as the dialog is run as a script file. If you want to compile a script with a stay on top dialog, you will also have to add some code that perpetually cycles and perpetually "moves" the dialog to its current position. See the script below for an example.
In the sample the dialog is non-modal, meaning the Show> function does not contain a result variable. The lack of result variable allows the script to continue past the Show> function. We therefore get to add a loop that will cycle perpetually and perform the needed dialog "move" to its current location. I don't know why this technique is required I just know that for a compiled script to contain a stay on top dialog, the "fake moves" must be implemented. (I crack myself up.)
Code: Select all
Dialog>Dialog1
object Dialog1: TForm
Caption = 'StayOnTop Sample'
ClientHeight = 150
ClientWidth = 300
end
EndDialog>Dialog1
AddDialogHandler>Dialog1,,OnClose,Quit
SetDialogProperty>Dialog1,,Formstyle,fsStayOnTop
Show>Dialog1
Label>Loop
Wait>0.01
//The next four lines only needed for compiled scripts
Let>WIN_USEHANDLE=1
GetWindowPos>Dialog1.handle,Dialog1X,Dialog1Y
MoveWindow>Dialog1.handle,Dialog1X,Dialog1Y
Let>WIN_USEHANDLE=0
Goto>Loop
SRT>Quit
Exit>0
END>Quit
-
krash2501
- Newbie
- Posts: 15
- Joined: Thu Jul 21, 2016 7:04 pm
Post
by krash2501 » Mon Feb 27, 2017 5:33 pm
Thanks this worked great for what I needed.