BOOL CreateProcess( LPCTSTR 【lpApplicationName】, //指向可執行模塊名稱的指針
LPTSTR 【lpCommandLine】, //指向命令行字符串的指針
LPSECURITY_ATTRIBUTES 【lpProcessAttributes】, //指向進程安全屬性的指針 可以設置子進程是否可以被別的進程繼承
LPSECURITY_ATTRIBUTES 【lpThreadAttributes】, //指向線程安全屬性的指針 可以設置子進程的線程是否可以被別的進程繼承
BOOL 【bInheritHandles】, //處理繼承標志 設置TRUE可以繼承之前創建的允許被繼承的內核對象(SECURITY_ATTRIBUTES的bInheritHandle)
DWORD 【dwCreationFlags】, //創建標志
LPVOID 【// pointer to new environment block】, //指向新的環境塊
LPCTSTR 【lpCurrentDirectory】, //指向當前目錄名稱的指針 如果NULL 則獲取的是父進程目錄 填的話就獲取填的值
LPSTARTUPINFO 【lpStartupInfo】, //指向STARTUPINFO的指針 窗口信息 結構體第一個成員 DWORD cb必須賦值
LPPROCESS_INFORMATION 【lpProcessInformation】 //指向PROCESS_INFORMATION的指針 進程線程句柄信息
);
typedef struct _STARTUPINFO { DWORD cb; //包含STARTUPINFO結構中的字節數.如果Microsoft將來擴展該結構,它可用作版本控制手段.應用程序必須將cb初始化為sizeof ( STARTUPINFO )
PSTR lpReserved; //保留。必須初始化為N U L L
PSTR lpDesktop; //用於標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。如果桌面不存在,便創建一個帶有默認屬性的桌面,並使用為新進程指定的名字。 如果lpDesktop是NULL(這是最常見的情況 ),那么該進程將與當前桌面相關聯
PSTR lpTitle; //用於設定控制台窗口的名稱。如果l p Ti t l e 是N U L L ,則可執行文件的名字將用作窗口名
DWORD dwX; //用於設定應用程序窗口在屏幕上應該放置的位置的x 和y 坐標(以像素為單位)。
DWORD dwY; //只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊窗口時, 才使用這兩個坐標。若是創建控制台窗口的應用程序,這些成員用於指明控制台窗口的左上角
DWORD dwXSize; //用於設定應用程序窗口的寬度和長度(以像素為單位)只有dwYsize
DWORD dwYSize; // 當子進程將CW_USEDEFAULT 用作CreateWindow 的nWidth參數來創建它的第一個重疊窗口時,才使用這些值。若是創建控制台窗口的應用程序,這些成員將用於指明控制台窗口的寬度
DWORD dwXCountChars; //用於設定子應用程序的控制台窗口的寬度和高度(以字符為單位)
DWORD dwYCountChars; DWORD dwFillAttribute; //用於設定子應用程序的控制台窗口使用的文本和背景顏色
DWORD dwFlags; //請參見下一段和表4 - 7 的說明
WORD wShowWindow; //用於設定如果子應用程序初次調用的ShowWindow 將SW_SHOWDEFAULT 作為 nCmdShow 參數傳遞時,該應用程序的第一個重疊窗口應該如何出現。本成員可以是通常用於ShowWindow 函數的任何一個SW_*標識符
WORD cbReserved2; //保留。必須被初始化為0
PBYTE lpReserved2; //保留。必須被初始化為N U L L
HANDLE hStdInput; //用於設定供控制台輸入和輸出用的緩存的句柄。按照默認設置,hStdInput 用於標識鍵盤緩存,hStdOutput 和hStdError用於標識控制台窗口的緩存
HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO;
// Process0617.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h>
void Getsi() { STARTUPINFO si;
//獲取啟動參數相關信息 GetStartupInfo(&si); printf("%x %x %x %x %x %x %x %x ",si.dwX,si.dwY,si.dwXCountChars,si.dwYCountChars,si.dwFillAttribute,si.dwXSize,si.dwYSize,si.dwFlags); } BOOL CreateProcessFun(PTCHAR szAppName,PTCHAR szCmdLine) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); ZeroMemory(&pi,sizeof(pi)); //si->cb = sizeof(si);
si.cb = sizeof(si); if (!CreateProcess(szAppName,szCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { printf("創建進程失敗\n"); return FALSE; } else { printf("創建進程成功,進程句柄:%d--進程ID:%d--線程句柄:%d--線程ID:%d\n",pi.hProcess,pi.dwProcessId,pi.hThread,pi.dwThreadId); return TRUE; } return TRUE; } int main(int argc, char* argv[]) { TCHAR stcAppName[] = TEXT("C://Program Files//Internet Explorer//iexplore.exe"); TCHAR stcCmdLine[] = TEXT(" https://www.qq.com/"); CreateProcessFun(stcAppName,stcCmdLine); getchar(); return 0; }