Window API (六)多进程的操作
2011-12-19 14:12
260 查看
多进程也是必备的操作。写一个实例程序。调用一个Child.exe的可执行程序作为子进程。要先将Child.exe编译好放在同一目录下。
然后是父进程的程序:
直接运行子进程:
运行父进程:
本篇博客出自
阿修罗道,转载请注明出处:/article/1505651.html
//Child.cpp #include<stdio.h> #include<windows.h> #define MyAlloc(size) HeapAlloc(GetProcessHeap(),0,size) #define MyFree(lpMem) HeapFree(GetProcessHeap(),0,lpMem) typedef struct _PROCESS_INFO { DWORD dwPid; HANDLE hProcess; DWORD dwPrioClass; DWORD dwHandleCount; DWORD dwAffinityMask; SIZE_T dwWorkingSetSizeMax; SIZE_T dwWorkingSetSizeMin; LPWSTR szwCommandLine; STARTUPINFO sti; }PROCESS_INFO,*LPPROCESS_INFO; HANDLE hMySelf; DWORD GetProcessInfo(LPPROCESS_INFO lppi) { //PID lppi->dwPid = GetCurrentProcessId(); //Handle lppi->hProcess=GetCurrentProcess(); //优先权 lppi->dwPrioClass=GetPriorityClass(hMySelf); //句柄数量 lppi->dwHandleCount=GetProcessHandleCount(lppi->hProcess,&lppi->dwHandleCount); //AffinityMask GetProcessAffinityMask(hMySelf,&lppi->dwAffinityMask,NULL); //WorkingSetSize GetProcessWorkingSetSize(hMySelf, &lppi->dwWorkingSetSizeMin, &lppi->dwWorkingSetSizeMax); lppi->szwCommandLine = GetCommandLineW(); //Start Up Info GetStartupInfo(&lppi->sti); return 0; } int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { PROCESS_INFO pi; INT argc; WCHAR **argv; INT i; DWORD dwBufferSize = lstrlen(lpCmdLine)+MAX_PATH +1024; LPSTR szShowBuffer = (LPSTR)MyAlloc(dwBufferSize); hMySelf=hInstance; wsprintf(szShowBuffer, "启动参数\n实例句柄:%.8x,命令行参数: %s,显示选项:%.8x", hInstance,lpCmdLine,nCmdShow); MessageBox(NULL,szShowBuffer,"WinMain 函数参数",MB_OK); GetProcessInfo(&pi); //不支持汉字转化 argv = CommandLineToArgvW(pi.szwCommandLine,&argc); *szShowBuffer = NULL; for(i=0;i<argc;i++) { DWORD dwBufferSize =lstrlenW(*argv)+10; LPSTR szMBArgv= (LPSTR)MyAlloc(dwBufferSize); WideCharToMultiByte(CP_ACP,NULL,*argv,-1,szMBArgv,dwBufferSize,NULL,NULL); argv++; lstrcat(szShowBuffer,"\n"); lstrcat(szShowBuffer,szMBArgv); MyFree(szMBArgv); } MessageBox(NULL,szShowBuffer,"参数",MB_OK); MyFree(szShowBuffer); return 0; }
然后是父进程的程序:
#include<stdio.h> #include<windows.h> DWORD CreateChildProcess(LPSTR szChildProcessCmd) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); //Set the size of si si.cb =sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, szChildProcessCmd, NULL,NULL, FALSE,0, NULL, NULL, &si,&pi)) { printf("CreateProcess failed(%d).\n",GetLastError()); return 1; } WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; } int main() { CreateChildProcess("Child.exe fsy 2011-12-19 as Gamer"); }
直接运行子进程:
运行父进程:
本篇博客出自
阿修罗道,转载请注明出处:/article/1505651.html
相关文章推荐
- Window API (五)内存操作与信息管理
- 云星数据---Apache Flink实战系列(精品版)】:Flink流处理API详解与编程实战005-Flink基于流的window操作003
- Window API (二)文件操作
- 云星数据---Apache Flink实战系列(精品版)】:Flink流处理API详解与编程实战003-Flink基于流的window操作001
- 云星数据---Apache Flink实战系列(精品版)】:Flink流处理API详解与编程实战004-Flink基于流的window操作002
- window下批处理操作:结束进程kill_S_CRT
- seleniumWebDriver的API操作杀进程、截屏、执行js脚本_10_4
- window调用api列出当前所有进程示例
- 进程与线程(一):一些关于进程的r3级API操作(1)
- Window API (三)堆管理操作
- window 系统操作linux 【重启linux系统下的tomcat进程】
- 进程,作业 window api 调用
- [Window Store app]DownloadOperation,回调操作状态异常? 表象解决方案
- Linux编程 函数和进程操作
- ZooKeeper原生Api基本操作
- 杀死进程的API使用
- 跨进程操作CTreeCtrl(模拟鼠标发送双击消息给另一进程CTreeCtrl中指定ITEM)
- Win32路径操作相关API
- linux关于进程的操作
- jExcelAPI(jxl)操作Excel2003表格完整示例 - 两种方案 - 效率截然不同