its rude.. crude.... and ugly as all sin to look at.... but....

Code:

break on
$ = setoption("novarsinstrings","on")
if $guarddog guarddog($guarddog) exit endif

$Current = enumprocess("notepad.exe")
run "notepad.exe"
$new = enumprocess("notepad.exe")
$notepad = substr($new,1,instr($new,$current)-2)

run '%comspec% /c start /min kix32 "' + @scriptdir + "\" + @scriptname + '" $guarddog='+@pid+","+$notepad

? "press any key to end script and close NOTEPAD.exe"
get $x

function guarddog($data)
while enumprocess(split($data,",")[0])
sleep 0.5
loop
enumprocess(split($data,",")[1],1)
endfunction

FUNCTION EnumProcess($exe, optional $terminate, optional $Computer)
Dim $winmgmts, $ExecQuery, $Process, $id
if not $computer $computer=@wksta endif
$winmgmts="winmgmts:{impersonationLevel=impersonate}!//" + $COMPUTER
select
case val($exe)>0
$ExecQuery="select * from Win32_Process where ProcessId='" + $exe + "'"
$GetObject=GetObject($winmgmts).ExecQuery($ExecQuery)
For each $Process in $GetObject
if $terminate $=$Process.Terminate endif
$EnumProcess = $Process.name
next
$GetObject=''
case vartype($exe)=8
$ExecQuery="select * from Win32_Process where Name='" + $exe + "'"
$GetObject=GetObject($winmgmts).ExecQuery($ExecQuery)
For each $Process in $GetObject
if $terminate $=$Process.Terminate endif
$id=$Process.ProcessId
$EnumProcess = "" + $Id + "|" + $EnumProcess
Next
$EnumProcess=left($EnumProcess,len($EnumProcess)-1)
$GetObject=''
case 1
exit 1
endselect
ENDFUNCTION