MFC CreateProcess创建进程并控制其窗口
作者:admin 发布于:2012-7-29 11:43 Sunday 分类:Windows
typedef struct tagWNDINFO { DWORD dwProcessId;//进程ID HWND hWnd;//所在窗口 }WNDINFO, *LPWNDINFO;//窗口信息 STARTUPINFO StartInfo;//启动信息 memset(&StartInfo,0,sizeof(STARTUPINFO)); StartInfo.cb = sizeof(STARTUPINFO);//设定结构的大小 PROCESS_INFORMATION pinfo; BOOL bRet=CreateProcess(//创建进程 NULL, //启动程序路径名 "notepad.exe", //参数(当exeName为NULL时,可将命令放入参数前) NULL, //使用默认进程安全属性 NULL, //使用默认线程安全属性 FALSE,//句柄不继承 NORMAL_PRIORITY_CLASS, //使用正常优先级 NULL, //使用父进程的环境变量 NULL, //指定工作目录 &StartInfo, //子进程主窗口如何显示 &pinfo); //用于存放新进程的返回信息 if(bRet==FALSE) { AfxMessageBox("创建进程失败"); } else { WaitForInputIdle(pinfo.hProcess,INFINITE);//一直等到程序初始化完(空闲时)返回 CloseHandle(pinfo.hThread); CloseHandle(pinfo.hProcess); } ////////////////////////////////////////////////////////////////////////// BOOL CALLBACK EnumThreadWndProc(HWND hwnd,LPARAM lParam) //枚举线程 { SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);//所有属于该线程的窗口提前,窗口可能多个 return TRUE; } EnumThreadWindows(pinfo.dwThreadId,EnumThreadWndProc,0);//枚举所有线程窗口 ////////////////////////////////////////////////////////////////////////// BOOL CALLBACK EnumProcessWndProc(HWND hwnd,LPARAM lParam)//枚举进程 { DWORD dwProcessId; GetWindowThreadProcessId(hwnd,&dwProcessId); LPWNDINFO pInfo=(LPWNDINFO)lParam; if(dwProcessId==pInfo->dwProcessId) { pInfo->hWnd=hwnd; return FALSE; } //中止枚举 return TRUE; } WNDINFO wi; wi.dwProcessId = pinfo.dwProcessId; wi.hWnd = NULL; EnumWindows(EnumProcessWndProc,(LPARAM)&wi);//枚举进程
标签: CreateProcess