खोज…


प्रक्रिया बनाइये

अन्य प्रोग्राम लॉन्च करने के लिए CreateProcess Windows API का उपयोग करने के लिए निम्न फ़ंक्शन कोड CreateProcess करता है।

यह कॉन्फ़िगर करने योग्य है और कॉल खत्म होने तक इंतजार कर सकता है या तुरंत वापस लौट सकता है।

पैरामीटर:

  • FileName - निष्पादन योग्य के लिए पूर्ण पथ
  • Params - कमांड लाइन पैरामीटर या खाली स्ट्रिंग का उपयोग करें
  • Folder - काम करने वाले फोल्डर को प्रोग्राम कहा जाता है - अगर FileName से खाली रास्ता निकाला जाएगा
  • WaitUntilTerminated - अगर सही फ़ंक्शन निष्पादन को समाप्त करने के लिए प्रक्रिया की प्रतीक्षा करेगा
  • WaitUntilIdle - अगर सही फ़ंक्शन WaitForInputIdle फ़ंक्शन को कॉल करेगा और तब तक प्रतीक्षा करेगा जब तक कि निर्दिष्ट प्रक्रिया ने अपने प्रारंभिक इनपुट को संसाधित नहीं कर लिया है और जब तक कोई उपयोगकर्ता इनपुट लंबित नहीं है
  • RunMinimized - अगर सही प्रक्रिया को कम से कम चलाया जाएगा
  • ErrorCode - यदि फ़ंक्शन विफल रहता है तो इसमें Windows त्रुटि कोड होगा
function ExecuteProcess(const FileName, Params: string; Folder: string; WaitUntilTerminated, WaitUntilIdle, RunMinimized: boolean;
  var ErrorCode: integer): boolean;
var
  CmdLine: string;
  WorkingDirP: PChar;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  Result := true;
  CmdLine := '"' + FileName + '" ' + Params;
  if Folder = '' then Folder := ExcludeTrailingPathDelimiter(ExtractFilePath(FileName));
  ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
  StartupInfo.cb := SizeOf(StartupInfo);
  if RunMinimized then
    begin
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_SHOWMINIMIZED;
    end;
  if Folder <> '' then WorkingDirP := PChar(Folder)
  else WorkingDirP := nil;
  if not CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, WorkingDirP, StartupInfo, ProcessInfo) then
    begin
      Result := false;
      ErrorCode := GetLastError;
      exit;
    end;
  with ProcessInfo do
    begin
      CloseHandle(hThread);
      if WaitUntilIdle then WaitForInputIdle(hProcess, INFINITE);
      if WaitUntilTerminated then
        repeat
          Application.ProcessMessages;
        until MsgWaitForMultipleObjects(1, hProcess, false, INFINITE, QS_ALLINPUT) <> WAIT_OBJECT_0 + 1;
      CloseHandle(hProcess);
    end;
end;

उपरोक्त फ़ंक्शन का उपयोग

var
  FileName, Parameters, WorkingFolder: string;
  Error: integer;
  OK: boolean;
begin
  FileName := 'C:\FullPath\myapp.exe';
  WorkingFolder := ''; // if empty function will extract path from FileName
  Parameters := '-p'; // can be empty 
  OK := ExecuteProcess(FileName, Parameters, WorkingFolder, false, false, false, Error);
  if not OK then ShowMessage('Error: ' + IntToStr(Error));
end;

CreateProcess प्रलेखन



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow