Функция CreateProcess

Declare Function CreateProcess Lib "kernel32" Alias CreateProcessA" ( _
    ByVal lpApplicationName As String,  _
    ByVal lpCommandLine As String,  _
    lpProcessAttributes As Any,  _
    lpThreadAttributes As Any,  _
    ByVal bInheritHandles As Long,  _
    ByVal dwCreationFlags As Long,   _
    lpEnvironment As Any,  _
    ByVal lpCurrentDriectory As String,  _
    lpStartupInfo As STARTUPINFO, _
    lpProcessInformation As PROCESS_INFORMATION) As Long

CreateProcess создает новый процесс и его главный поток. Новый процесс запускает заданный исполняемый файл.

lpApplicationName
Строка с завершающим нулевым символом, задающая модуль для исполнения. Может включать полное имя и путь файла или часть имени (в этом случае используется текущий диск и текущая папка)
lpCommandLine
Строка с завершающим нулевым символом, задающая командную строку. Система добавляет нулевой символ в командную строку (при необходимости обработайте эту ситуацию)
lpProcessAttributes
Структура SECURITY_ATTRIBUTES, определяющая атрибуты безопасности процесса, или ноль (замените объявление на ByVal as Long)
lpThreadAttributes
Структура SECURITY_ATTRIBUTES, определяющая атрибуты безопасности первичной нити процесса, или ноль (замените объявление на ByVal as Long)
bInheritHandles
Если равен True, то разрешено наследование всех описателей текущего процесса вновь созданного дочернего процесса
dwCreationFlags
Комбинация различных флагов
NORMAL_PRIORITY_CLASS = &H20&Стандартный приоритет
lpEnvironment
Указатель на блок окружения
lpCurrentDriectory
Путь к текущему каталогу нового процесса. vbNullString соответствует текущему каталогу на момент вызова функции
lpStartupInfo
Структура STARTUPINFO с дополнительной информацией, используемой при создании процесса
lpProcessInformation
Структура PROCESS_INFORMATION, заполняемая идентификаторами процесса и нити для нового процесса

Пример

' Запустим калькулятор
Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String
Dim lSuccess As Long
Dim lRet As Long

sInfo.cb = Len(sInfo)
lSuccess = CreateProcess(sNull, _
    "Calc.exe", _
    ByVal 0&, _
    ByVal 0&, _
    1&, _
    NORMAL_PRIORITY_CLASS, _
    ByVal 0&, _
    sNull, _
    sInfo, _
    pInfo)

MsgBox "Калькулятор запущен!"

lRet = TerminateProcess(pInfo.hProcess, 0&)
lRet = CloseHandle(pInfo.hThread)
lRet = CloseHandle(pInfo.hProcess)

MsgBox "Калькулятор закрыт!"

Смотри также

CloseHandle, ExitProcess, OpenProcess

Категория

Процессы, нити и потоки