93 lines
2.5 KiB
QBasic
93 lines
2.5 KiB
QBasic
'//+----------------------------------------------------------------------------
|
|
'//
|
|
'// File: wait.bas
|
|
'//
|
|
'// Module: pbadmin.exe
|
|
'//
|
|
'// Synopsis: Wrapper functions to launch a process and wait for it to return.
|
|
'//
|
|
'// Copyright (c) 1997-1999 Microsoft Corporation
|
|
'//
|
|
'// Author: quintinb Created Header 09/02/99
|
|
'//
|
|
'//+----------------------------------------------------------------------------
|
|
|
|
Attribute VB_Name = "wait"
|
|
Option Explicit
|
|
|
|
Private Const PROCESS_QUERY_INFORMATION = &H400
|
|
Private Const STILL_ACTIVE = &H103
|
|
Private Declare Function OpenProcess& Lib "kernel32" (ByVal _
|
|
dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&)
|
|
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal _
|
|
hProcess As Long, lpExitCode As Long) As Long
|
|
Private Const IDC_UPARROW = 32516&
|
|
|
|
' GetWindow() Constants
|
|
Public Const GW_HWNDFIRST = 0
|
|
Public Const GW_HWNDLAST = 1
|
|
Public Const GW_HWNDNEXT = 2
|
|
Public Const GW_HWNDPREV = 3
|
|
Public Const GW_OWNER = 4
|
|
Public Const GW_CHILD = 5
|
|
Public Const GW_MAX = 5
|
|
|
|
Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
|
|
Declare Function GetDesktopWindow Lib "user32" () As Long
|
|
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
|
|
|
|
Public Function WaitForApp(sCmd As String) As Long
|
|
|
|
Dim hApp As Long
|
|
Dim hProc As Long
|
|
Dim lExitCode As Long
|
|
|
|
On Error GoTo WaitErr
|
|
|
|
'hApp = Shell(sCmd, vbNormalFocus)
|
|
'hApp = Shell(sCmd, vbHide)
|
|
hApp = Shell(sCmd, vbMinimizedNoFocus)
|
|
|
|
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hApp)
|
|
Do
|
|
GetExitCodeProcess hProc, lExitCode
|
|
DoEvents
|
|
Loop While lExitCode = STILL_ACTIVE
|
|
WaitForApp = lExitCode
|
|
|
|
Exit Function
|
|
|
|
WaitErr:
|
|
Exit Function
|
|
|
|
End Function
|
|
|
|
|
|
Public Function GetWindowHandleFromProcessID(hProcessIDToFind As Long) As Long
|
|
|
|
Dim hWindow As Long
|
|
Dim bFoundIt As Boolean
|
|
Dim hProcessIDToTest As Long
|
|
Dim lRet As Long
|
|
|
|
hWindow = GetWindow(GetDesktopWindow(), GW_CHILD)
|
|
While hWindow <> 0
|
|
hProcessIDToTest = 0
|
|
lRet = GetWindowThreadProcessId(hWindow, hProcessIDToTest)
|
|
If hProcessIDToTest = hProcessIDToFind Then
|
|
bFoundIt = True
|
|
GetWindowHandleFromProcessID = hWindow
|
|
Exit Function
|
|
End If
|
|
hWindow = GetWindow(hWindow, GW_HWNDNEXT)
|
|
DoEvents
|
|
Wend
|
|
GetWindowHandleFromProcessID = 0
|
|
|
|
GetWindowHandleFromProcessID = -1
|
|
|
|
End Function
|
|
|
|
|
|
|