Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2019, 10:42   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
Лампочка не работает функция запуска из CreateProcess

добрый день, .. подскажите, какие параметры не верны, .. (запуск игры из рабочего стола FULLSCREEN)

Код:
function RunMyApp(my_app : string; my_wait : bool) : bool;
  var
    si : TStartupInfo;
    pi : TProcessInformation;
  begin
    Result := false;
    try
      ZeroMemory(@si,SizeOf(si));
      si.cb := SizeOf(si);
      si.dwFlags := STARTF_RUNFULLSCREEN;
      si.wShowWindow := SW_SHOWDEFAULT;
      if CreateProcess(nil,PChar(my_app),nil,nil,False,0,nil,nil,si,pi)=true then Result := true;
      try CloseHandle(pi.hThread); except ; end;
      if my_wait = true then WaitForSingleObject(pi.hProcess, INFINITE);
      try CloseHandle(pi.hProcess); except ; end;
    except
      Result := false;;
    end;
  end;
beegl вне форума Ответить с цитированием
Старый 06.03.2019, 10:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не знаю, как насчёт параметров CreateProcess, но мне не нравится логика с my_wait

Это что получается, если я укажу my_wait := false, то
выполнится CreateProcess и сразу же выполнится CloseHandle(pi.hProcess) ?
а на процессе это никак не отразиться?


ну и это.
не надо делать масло более масляным:
Цитата:
Сообщение от beegl Посмотреть сообщение
Код:
if CreateProcess(nil,PChar(my_app),nil,nil,False,0,nil,nil,si,pi)=true then Result := true;
Код:
Result :=  CreateProcess(nil,PChar(my_app),nil,nil,False,0,nil,nil,si,pi);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2019, 11:15   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не надо делать масло более масляным:
а как тогда запустить, .. ShellExecute, WinExeс не хочет
beegl вне форума Ответить с цитированием
Старый 06.03.2019, 11:33   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а на процессе это никак не отразиться?
нет.

Я правда не понял зачем там try except, в WinAPI нет исключений.
Цитата:
Сообщение от beegl Посмотреть сообщение
а как тогда запустить
Причем тут эта цитата?

Вы не поняли о чем там речь.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.03.2019, 12:50   #5
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы не поняли о чем там речь.
Код:
ShellExecute(Application.Handle, PChar('open'), PChar('C:\Program Files\Grand Theft Auto - San Andreas\gta_sa.exe'), nil, nil, SW_MAXIMIZE);
процесс:


Код:
function KillTask(ExeFileName: String): Integer;
var
   ContinueLoop: BOOL;
   FSnapshotHandle: THandle;
   FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
  FProcessEntry32);
  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
    UpperCase(ExeFileName))) then
    Result := Integer(TerminateProcess(OpenProcess(
    PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
и на весь экран процесс:

Код:
ShowWindow(Application.Handle,SW_SHOWMAXIMIZED);
Так можно??
beegl вне форума Ответить с цитированием
Старый 07.03.2019, 12:58   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем вы цитируете сообщения никак не относящиеся к вашему ответу?
В первой цитате речь была о том, что в Дельфи не надо никогда писать a = true, b = false, if a = true then c := true else c := false и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.03.2019, 14:02   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Зачем вы цитируете сообщения
P.S. прошу прощения.

Подскажите, почему зная имя процесса, не разворачивает на весь экран?

Код:
function RunGamelTask(ExeFileName: String): Integer;
var
   ContinueLoop: BOOL;
   FSnapshotHandle: THandle;
   FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
  FProcessEntry32);
  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
    UpperCase(ExeFileName))) then
   ShowWindow(FSnapshotHandle,SW_SHOWMAXIMIZED); // Not work
  end;
end;
beegl вне форума Ответить с цитированием
Старый 08.03.2019, 05:54   #8
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

ничего не получается, просто висит в процессах gta_sa.exe, но не работает, .. что делать?
beegl вне форума Ответить с цитированием
Старый 08.03.2019, 08:33   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Не писать бред. ShowWindow, как следует из названия показывает окно и ей нужен хендл этого окна. Нафига вы ей суете хендл снепшота процессов?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Visual C# работает при запуске руками, но не работает при попытки автоматического запуска Bug$ Помощь студентам 18 21.10.2013 16:22
createprocess проблема с пробелами в параметрах запуска Artempokrowski Общие вопросы Delphi 2 01.05.2012 19:42
О параметрах запуска и CreateProcess Человек_Борща Общие вопросы Delphi 2 01.06.2011 10:01
Тонкости CreateProcess и передаваемых процессу параметров запуска Человек_Борща Общие вопросы Delphi 9 09.01.2011 19:28
CreateProcess не работает. Пепел Феникса Общие вопросы Delphi 4 16.07.2010 03:18