본문 바로가기

Development/VB

VB에서 외부 프로그램 사용하기

VB에서 외부 프로그램을 호출하여 종료될때까지 기다리는 코드입니다.


Option Explicit


Public Type STARTUPINFO

    cb As Long

    lpReserved As String

    lpDesktop As String

    lptitle As String

    dwX As Long

    dwY As Long

    dwXSize As Long

    dwYSize As Long

    dwXCountChars As Long

    dwYCountChars As Long

    dwFillAttribute As Long

    dwFlags As Long

    wShowWindow As Integer

    cbReserved2 As Integer

    lpReserved2 As Long

    hStdInput As Long

    hStdOutput As Long

    hStdError As Long

End Type


Public Type PROCESS_INFORMATION

    hProcess As Long

    hThread As Long

    dwProcessID As Long

    dwThreadID As Long

End Type



Public Declare Function WaitForSingleObject Lib "kernel32" _

        (ByVal hHandle As Long, _

         ByVal dwMilliseconds As Long) As Long

        

Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _

        (ByVal lpApplicationName As Long, _

         ByVal lpCommandLine As String, _

         ByVal lpProcessAttributes As Long, _

         ByVal lpThreadAttributes As Long, _

         ByVal bInheritHandles As Long, _

         ByVal dwCreationFlags As Long, _

         ByVal lpEnvironment As Long, _

         ByVal lpCurrentDirectory As Long, _

         lpStartupInfo As STARTUPINFO, _

         lpProcessInformation As PROCESS_INFORMATION) As Long


Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


' API함수 상수 선언

Public Const NORMAL_PRIORITY_CLASS = &H20&

Public Const INFINITE = -1&

Public Const STARTF_USESHOWWINDOW = &H1

Public Const SW_SHOWMINIMIZED = 2

Public Const SW_SHOWMAXIMIZED = 3

Public Const SW_SHOWMINNOACTIVE = 7

Public Const SW_SHOWDEFAULT = 10


' Shell 명령을 실행시킨 후 해당 Shell이 완전히 종료될 때까지 대기하는 함수

Public Sub RunAndWait(RunCommand As String)

    Dim vProc As PROCESS_INFORMATION

    Dim vStart As STARTUPINFO

    Dim vRv As Long

    

    vStart.cb = LenB(RunCommand)

    vStart.dwFlags = STARTF_USESHOWWINDOW

    vStart.wShowWindow = SW_SHOWDEFAULT

    

    ' Process 실행

    vRv = CreateProcess(0&, RunCommand, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, vStart, vProc)

    

    fmGenData.MousePointer = 11

    DoEvents

    

    ' 대기

    vRv = WaitForSingleObject(vProc.hProcess, INFINITE)

    

    fmGenData.MousePointer = 0

    DoEvents

    

    ' Process 종료

    vRv = CloseHandle(vProc.hProcess)

End Sub


사용법 

Sub Command1_Click()

Dim cmdInfo as String


cmdInfo = "C:\Window\notepad.exe"

Call RunAndWait(cmdInfo)

MsgBox "메모장이 종료되었음"

End Sub

출처 : http://goo.gl/bAo9H

'Development > VB' 카테고리의 다른 글

암호가 걸려있는 MDB파일 접근방법  (0) 2012.11.13