C++ 創建進程的方法


1. C++中創建進程的代碼示例:

// ProcessDemo.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//

#include<windows.h>
#include <iostream>
using namespace std;


int main()
{
    STARTUPINFO startupInfo = { 0 };
    PROCESS_INFORMATION  processInformation = { 0 };
    /*打開Word應用程序 C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE 為程序路徑*/
    BOOL bSuccess = CreateProcess(TEXT("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE"), NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &startupInfo, &processInformation);

    if (bSuccess)
    {
        cout << "Process started..." << endl
            << "ProcessID: "
            << processInformation.dwProcessId << endl;
    }
    else
    {
        cout << "Can not start process!" << endl
            << "Error code: " << GetLastError();
    }
    system("pause");
}

 2. 參數說明(_STARTUPINFOW 結構體參數),參考鏈接:http://www.360doc.com/content/14/0514/22/7591436_377668778.shtml

typedef struct _STARTUPINFOW {
    DWORD   cb;    //包含STARTUPINFO結構中的字節數.如果Microsoft將來擴展該結構,它可用作版本控制手段.應用程序必須將cb初始化為sizeof(STARTUPINFO)
    LPWSTR  lpReserved; //保留。必須初始化為NULL
    LPWSTR  lpDesktop; //用於標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。
                       //如果桌面不存在,便創建一個帶有默認屬性的桌面,並使用為新進程指定的名字。        
                       //如果lpDesktop是NULL(這是最常見的情況), 那么該進程將與當前桌面相關聯
    LPWSTR  lpTitle; //用於設定控制台窗口的名稱。如果lpTitle 是NULL,則可執行文件的名字將用作窗口名
    DWORD   dwX; // 用於設定應用程序窗口在屏幕上應該放置的位置的x 和y 坐標(以像素為單位)
                 // 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊窗口時,
                 // 才使用這兩個坐標。若是創建控制台窗口的應用程序,這些成員用於指明控制台窗口的左上角
    DWORD   dwY;  
    DWORD   dwXSize;   //用於設定應用程序窗口的寬度和長度(以像素為單位)只有dwYsize
                       // 當子進程將CW_USEDEFAULT用作 CreateWindow 的 nWidth 參數來創建它的第一個重疊窗口時,才使用這些值。
                       // 若是創建控制台窗口的應用程序,這些成員將用於指明控制台窗口的寬度    
    DWORD   dwYSize;
    DWORD   dwXCountChars;  //用於設定子應用程序的控制台窗口的寬度和高度(以字符為單位)
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;  //用於設定子應用程序的控制台窗口使用的文本和背景顏色
    DWORD   dwFlags;   
    WORD    wShowWindow;  //用於設定如果子應用程序初次調用的ShowWindow 將SW_SHOWDEFAULT 作為
                          // nCmdShow 參數傳遞時,該應用程序的第一個重疊窗口應該如何出現。
                          // 本成員可以是通常用於 ShowWindow 函數的任何一個 SW_* 標識符
    WORD    cbReserved2;  //保留。必須被初始化為0
    LPBYTE  lpReserved2;  //保留。必須被初始化為NULL
    HANDLE  hStdInput;      //用於設定供控制台輸入和輸出用的緩存的句柄。按照默認設置,hStdInput 用於標識鍵盤緩存,hStdOutput 和 hStdError 用於標識控制台窗口的緩存
    HANDLE  hStdOutput;
    HANDLE  hStdError;
} STARTUPINFO, *LPSTARTUPINFO;

dwFlags 使用標志及含義:

標志                                    含義
STARTF_USESIZE                 使用dwXSize 和dwYSize 成員
STARTF_USESHOWWINDOW              使用wShowWindow 成員
STARTF_USEPOSITION              使用dwX 和dwY 成員
STARTF_USECOUNTCHARS                使用dwXCountChars 和dwYCount Chars 成員
STARTF_USEFILLATTRIBUTE          使用dwFillAttribute 成員
STARTF_USESTDHANDLES              使用hStdInput 、hStdOutput 和hStdError 成員
STARTF_RUN_FULLSCREEN              強制在x86 計算機上運行的控制台應用程序以全屏幕方式啟動運行

3. 參數說明(_PROCESS_INFORMATION 結構體)參考鏈接:https://blog.csdn.net/akof1314/article/details/5471768

typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess; //存放每個對象的與進程相關的句柄
    HANDLE hThread;        //返回的線程句柄。
    DWORD dwProcessId;    //用來存放進程ID號
    DWORD dwThreadId;      //用來存放線程ID號
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

 


免責聲明!

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



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