兔八哥极品软件园    运行: 4508天 | 文章:640 篇 | 评论:528 条 | 碎语:1条

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


Powered by 兔八哥极品软件 苏ICP备12049267号 sitemap