C++啟動和關閉外部exe


1.WinExec(
  lpCmdLine: LPCSTR; {文件名和參數; 如沒指定路徑會按以下順序查找: 程序目錄/當前目錄/System32/Windows/PATH環境變量}
  uCmdShow: UINT     {啟動選項}
): UINT;

WinExec("D:\\Program Files\\Test\\Test.exe", SW_SHOWMAXIMIZED);

2.ShellExecute函數原型及參數含義如下:

  ShellExecute(

  HWND hwnd,           //父窗口句柄 (如:NULL,Handle等)

  LPCSTR lpOperation, //操作類型 (如:"open")*要加英文雙引號

  LPCSTR lpFile,           //要進行操作的文件或路徑

  LPCSTR lpParameters, //當lpOperation為“explore”時指定要傳遞的參數,通常設為NULL

  LPCSTR lpDirectory,    //指定默認目錄,通常設為NULL

  INT nShowCmd          //文件打開的方式,以通常方式還是最大化或最小化顯示,一般為SW_SHOWNORMAL

  ) 
參數說明:
  ●hWnd:用於指定父窗口句柄。當函數調用過程出現錯誤時,它將作為Windows消息窗口的父窗口。例如,可以將其設置為應用程序主窗口句柄,即Application.Handle,也可以將其設置為桌面窗口句柄(用GetDesktopWindow函數獲得)。

  ●Operation:用於指定要進行的操作。其中“open”操作表示執行由FileName參數指定的程序,或打開由FileName參數指定的文件或文件夾;“print”操作表示打印由FileName參數指定的文件;“explore”操作表示瀏覽由FileName參數指定的文件夾。當參數設為nil時,表示執行默認操作“open”。

  ●FileName:用於指定要打開的文件名、要執行的程序文件名或要瀏覽的文件夾名。

  ●Parameters:若FileName參數是一個可執行程序,則此參數指定命令行參數,否則此參數應為nil或PChar(0)。

  ●Directory:用於指定默認目錄。

  ●ShowCmd:若FileName參數是一個可執行程序,則此參數指定程序窗口的初始顯示方式,否則此參數應設置為0。

  若ShellExecute函數調用成功,則返回值為被執行程序的實例句柄。若返回值小於32,則表示出現錯誤。

ShellExecute(NULL,NULL,"E:/udpserver.exe", NULL, NULL, SW_SHOWNORMAL);

3.ShellExecuteEx:

SHELLEXECUTEINFO  ShExecInfo;
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = NULL;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = ("E:/udpserver.exe");        // 執行的程序名 
    ShExecInfo.lpParameters = NULL;
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_MAXIMIZE;                // 全屏顯示這個程序 
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);

4.函數原型:BOOL CreateProcess

  (
  LPCTSTR lpApplicationName, 
  LPTSTR lpCommandLine, 
  LPSECURITY_ATTRIBUTES lpProcessAttributes。
  LPSECURITY_ATTRIBUTES lpThreadAttributes, 
  BOOL bInheritHandles, 
  DWORD dwCreationFlags,
  LPVOID lpEnvironment, 
  LPCTSTR lpCurrentDirectory, 
  LPSTARTUPINFO lpStartupInfo, 
  LPPROCESS_INFORMATION lpProcessInformation 
  );

STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    if (!CreateProcess(NULL,   // No module name (use command line)
        "notepad.exe",        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
        cout << "ertror" << endl;
    }

結束進程:

std::string temp = std::string("TASKKILL /F /IM ") +exe_name;
    system(temp.c_str());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM