Launching Windows Programs
SM32 has 2 ways to Launch Programs:
PRINT 'LAUNCH'(C$,D$,P,W),
LAUNCH C$,D$,P,W
C$ is the executable command.
D$ is the start dir for the program.
P is the Priority (1=high,0=normal,-1=low).
W is window size(1=maximize, 0=default , -1 - minimize).
The PRINT version can be executed from LINUX or WINDOWS. Note: The PRINT version never returns a TCB(8) value.
C$ ,the command, takes 2 forms that end up executing 2 differrent Windows Functions (ShellExecute or CreateProcess).
ShellExecute uses the Windows File association to start the process. Note: ShellExecute never returns a TCB(8) value. A
command like:
C$="-print ABC.HTML" would use the the program that is associted with .HTML files to print ABC.HTML.
The -print is called the
verb. If no verb is specified the verb -open is used.
CreateProcess uses the command as a program name follow by arguments. A command like:
C$="NOTEPAD.EXE ABC.HTML" will bring up NOTEPAD.EXE to edit ABC.HTML
The command is processed as follows:
1. IF C$ contains .EXE or .COM or .BAT ShellExecute is not attempted.
2. IF ShellExecute fails CreateProcess is attempted.
A CreateProcess that succeeds and was executed by an SM32 statement (not a print) sets TCB(8) to a HANDLE. The
HANDLE is used in the following syntaxs:
| SYNTAX | ACTION |
| H=TCB(8) | Gets the handle of the last launched program. The action of getting the
handle resets TCB(8) to 0. |
| HANDLECLOSE H | Closes the HANDLE specified by H. |
| E=GEC(H) | Gets the exit code of the process specified by H. 259 indicates the process is
still running |
| SENDMESSAGE H,M,P1,P2 | Posts a message to the Top Level window assoicated with the initial thread
of the LAUNCH. Typical this has been used to end a process started by SM32(M=16,P1=0,P2=0) |
To avoid using up Windows Resources a Maximum of 64 HANDLES can be in use
at one time (TCB(8) will return 0 on the 65th). After you are finished using a handle you should use HANDLECLOSE to
free up the resource.
All HANDLES are closed by BEGIN,END,STOP and BYE. Also if you LAUNCH a program and never access the TCB(8) the
HANDLE for that LAUNCH will be closed by any subsequent LAUNCH.
One program that is useful to have launched with the CreateProcess method is Internet Explorer. The GSYSDIR
system variable has be added so the location of mshtml.dll can be specified.
10 BEGIN
20 DIM K!
30 LET K!["footer"]="";REM "the dim actual did this"
40 LET K!["header"]="";REM "the dim actual did this"
50 CALL "$__PAGE_SETUP",K![ALL];REM "Set page setup"
60 LET L$="rundll32.exe "+GSYSDIR+"\mshtml.dll,PrintHTML "
70 LET F$=DIR(-1)+"HTML\temp.html"
80 LAUNCH L$+$22$+F$+$22$,"",0,0
90 LET H=TCB(8);REM "Handle to Launced program"
100 WAIT -100
110 IF GEC(H)=259 THEN GOTO 0100;REM "Still Running"
120 HANDLECLOSE H
130 CALL "$__PAGE_SETUP",K![ALL];REM "Restore page setup"
Another usefull program to LAUNCH is SM32 itself so a background task can be executed.