Как запустить программу через CreateProcess со стилем по умолчанию? - VB
Формулировка задачи:
Добрый вечер !
Подскажите, пожалуйста,
данный код запускает калькулятор Windows.
Внешний его вид выглядит как-то ущербно.
Какие нужно задать атрибуты при запуске, чтобы он выглядел как другие стандартные приложения windows 7.
Еще вопрос: lastDllError возвращает ERROR_NO_MORE_FILES (18).
Это нормальный код возврата для CreateProcess ?
Т.е., как я понимаю, обычно происходит поиск файла по путям PATH,
и если находит, то выдается такая ошибка?
Решение задачи: «Как запустить программу через CreateProcess со стилем по умолчанию?»
textual
Листинг программы
Public Function ProcessRun(Filename As String, Optional CommandLine As String, Optional WindowStyle As Long = SW_SHOWNORMAL) ' По-умолчанию стиль окна - SW_SHOWNORMAL Const STARTF_USESHOWWINDOW As Long = 1 Const NORMAL_PRIORITY_CLASS As Long = &H20 Dim n As Long Dim lr As Long Dim CmdLine As String Dim argc As Long Dim argv() As String Dim cl As String Dim cl_ As String CmdLine = """" & Filename & """" ' Имя файла в кавычки If CommandLine <> "" Then ' Если есть аргументы, их тоже добавляем в кавычках 'Parse_CMD CommandLine, argc, argv ' Вместо CommandLineToArgvW For n = 1 To argc CmdLine = CmdLine & " """ & argv(n) & """" Next End If si.cb = Len(si) GetStartupInfo si ' клонируем структуру текущего процесса si.dwFlags = STARTF_USESHOWWINDOW si.wShowWindow = WindowStyle ' Стиль окна ' Получаем режим совместимости cl = Space(32767) GetEnvironmentVariable StrPtr("__COMPAT_LAYER"), StrPtr(cl), 32767 cl = Left$(cl, InStr(1, cl, vbNullChar) - 1) ' Создаем переменную окружения для нового процесса, тут можно включить также запуск от имени администратора cl_ = Replace(cl, "DisableThemes", vbNullString) SetEnvironmentVariable StrPtr("__COMPAT_LAYER"), StrPtr(cl_) lr = CreateProcess(vbNullString, _ CmdLine, _ ByVal 0, _ ByVal 0, _ False, _ NORMAL_PRIORITY_CLASS, _ ByVal 0, _ vbNullString, _ si, _ pi) ' Возвращаем на место SetEnvironmentVariable StrPtr("__COMPAT_LAYER"), StrPtr(cl) Debug.Print Err.LastDllError ' not 0 is SUCCESS Stop ProcessRun = lr End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д