!include LogicLib.nsh
!include WinMessages.nsh
ExecShell '' Notepad '' SW_SHOWMINIMIZED ; Instance we don't care about
!define /IfNDef STARTF_USESHOWWINDOW 0x0001
!define /IfNDef SW_SHOWMINNOACTIVE 7
System::Call '*(&l${NSIS_PTR_SIZE},p,p,p,i,i,i,i,i,i,i,i ${STARTF_USESHOWWINDOW},p ${SW_SHOWMINNOACTIVE},p,p,p,p)p.r1'
System::Call '*(p,p,i,i)p.r2'
System::Call 'KERNEL32::CreateProcess(p0,t "notepad.exe",p0,p0,i0,i0,p0,p0,pr1,pr2)i.r0'
${If} $0 <> 0
System::Call "*$2(p.r3,p.r4,i.r0,i)"
System::Call 'KERNEL32::CloseHandle(pr3)'
System::Call 'KERNEL32::CloseHandle(pr4)'
${EndIf}
System::Free $1
System::Free $2
ExecShell '' Notepad '' SW_SHOWMINIMIZED ; Instance we don't care about
Sleep 1234 ; Wait for Notepad to start
!define CLASS "Notepad"
StrCpy $2 ""
loop:
FindWindow $1 "${CLASS}" "" "" $2
StrCpy $2 $1
${If} $1 P<> 0
${AndIf} $0 <> 0 ; PID
System::Call 'USER32::GetWindowThreadProcessId(p$1,*i0r3)'
System::Call 'USER32::IsWindowVisible(p$1)i.r4'
${If} $3 = $0
${AndIf} $4 <> 0
System::Call 'USER32::SetForegroundWindow(p$1)'
System::Call 'USER32::SwitchToThisWindow(p$1,i1)'
${Else}
Goto loop
${EndIf}
${EndIf}