Показать сообщение отдельно
  #8  
Старый 03.02.2015, 16:24
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

Где то вычитывал, что правильнее использовать ShellExecute.
Код:
function ShellExecute(hWnd: HWnd; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;

в uses подключить ShellAPI и используем.

Пример:
Код:
ShellExecute(0,'open','cmd.exe',Pchar('/c start /'+номер_ядра+' '+'/'+приоритет_если нужен'+DirGames),pchar(ExtractFileDir('полный путь до программы')),SW_HIDE);

подробнее можно посмотреть в google или на msn=)

А есть еще такая фигня если запускать надо программу по определенным ядром.
Код:
procedure Tform1.RunProcess(FilePatch: string; {Priority: TProcessPriority;} corenumber:integer);
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
  Done: Boolean;
  cpuset  : set of 0..31;
begin
  FillChar(StartInfo, SizeOf(TStartupInfo), #0);
  FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
  StartInfo.cb := SizeOf(TStartupInfo);

  CmdLine := Format('"%s" %s', [FilePatch,''{параметры запуска}]);
  UniqueString(CmdLine);
  try
    Done := CreateProcess(PChar(FilePatch), PChar(CmdLine), nil, nil, False,
                          CREATE_NEW_PROCESS_GROUP + Integer(Priority),
                          nil, PChar(ExtractFileDir(FilePatch)) , StartInfo, ProcInfo);
    if Done then
    begin
      // 0 = <All Processors>
      // 1 = CPU 0
      // 2 = CPU 1
      // 3 = CPU 2
      // 4 = CPU 3
      // 5 = CPU 5
      // 6 = CPU 6
      // 7 = CPU 6
      // 8 = CPU 7
      cpuset:=[corenumber];
      //include (cpuset,5); // add cpu 6
      SetProcessAffinityMask(ProcInfo.hProcess, dword(cpuset));
      try
        while not Application.Terminated and
             (WaitForSingleObject(ProcInfo.hProcess, 100)=WAIT_TIMEOUT) do
              Application.ProcessMessages;
        finally
          if ProcInfo.hProcess <> 0 then
            CloseHandle(ProcInfo.hProcess);
            CloseHandle(ProcInfo.hThread);
      end;
    end else
      MessageDlg('Программа не запустится ' + FilePatch, mtError, [mbOk], 0)
  finally
  end;
end;
Ответить с цитированием