?? 2-1.cpp
字號:
// proccreate項目
#include <windows.h>
#include <iostream>
#include <stdio.h>
// 創建傳遞過來的進程的克隆過程并賦于其ID值
void StartClone(int nCloneID)
{
// 提取用于當前可執行文件的文件名
TCHAR szFilename[MAX_PATH] ;
:: GetModuleFileName(NULL, szFilename, MAX_PATH) ;
// 格式化用于子進程的命令行并通知其EXE文件名和克隆ID
TCHAR szCmdLine[MAX_PATH];
:: sprintf(szCmdLine,"\"%s\" d%",szFilename,nCloneID);
// 用于子進程的STARTUPINFO結構
STARTUPINFO si;
:: ZeroMemory(reinterpret_cast <void*> (&si) , sizeof(si) ) ;
si.cb = sizeof(si) ; // 必須是本結構的大小
// 返回的用于子進程的進程信息
PROCESS_INFORMATION pi;
// 利用同樣的可執行文件和命令行創建進程,并賦于其子進程的性質
BOOL bCreateOK=::CreateProcess(
szFilename, // 產生這個EXE的應用程序的名稱
szCmdLine, // 告訴其行為像一個子進程的標志
NULL, // 缺省的進程安全性
NULL, // 缺省的線程安全性
FALSE, // 不繼承句柄
CREATE_NEW_CONSOLE, // 使用新的控制臺
NULL, // 新的環境
NULL, // 當前目錄
&si, // 啟動信息
&pi) ; // 返回的進程信息
// 對子進程釋放引用
if (bCreateOK)
{
:: CloseHandle(pi.hProcess) ;
:: CloseHandle(pi.hThread) ;
}
}
int main(int argc, char* argv[] )
{
// 確定進程在列表中的位置
int nClone(0) ;
if (argc > 1)
{
// 從第二個參數中提取克隆ID
:: sscanf(argv[1] , "%d" , &nClone) ;
}
// 顯示進程位置
std :: cout << "Process ID:" << :: GetCurrentProcessId()
<< ", Clone ID:" << nClone
<< std :: endl;
// 檢查是否有創建子進程的需要
const int c_nCloneMax=25;
if (nClone < c_nCloneMax)
{
// 發送新進程的命令行和克隆號
StartClone(++nClone) ;
}
// 在終止之前暫停一下 (l/2秒)
:: Sleep(500) ;
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -