CreateProcess创建进程后父子进程如何实现模态对话框的效果?高手请指点!

jixiang1983 2011-10-25 11:40:50
在主程序中要启用一个exe程序使用,当启动exe程序后,主程序不能被操作,直到启动的exe程序被关闭,点击主程序界面时,自动将焦点集中到exe程序上,效果类似主程序中打开模态对话框。 类似代码如下:

void CMainFrame::OnOpenExe( )
{
STARTUPINFO sui;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);

PROCESS_INFORMATION pi;
DWORD dwExitCode;
BOOL fSuccess = CreateProcess("C:\\Windows\\system32\\notepad.exe", "\"notepad.exe\" \"E:\\Buf2\\code.txt\"",NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);//启动记事本打开默认文件

if(fSuccess)
{
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess, &dwExitCode);
CloseHandle(pi.hProcess);
...
}
}

当前在点击主程序界面时如同程序死掉,不能把焦点集中到notepad.exe上,没有达到模态对话框的效果,请高手指点!
...全文
369 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
你個臭鴨蛋 2011-12-13
  • 打赏
  • 举报
回复
在CreateProcess之后用WaitForSingleObject(pi.hProcess, INFINITE);
你個臭鴨蛋 2011-12-13
  • 打赏
  • 举报
回复
不知道LZ是否搞定了?我现在也想知道是怎么实现的,就是在调用CreateProcess之后具体怎么操作?希望能够分享一下经验,谢谢
jixiang1983 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenjintaoxp 的回复:]
我最近的一个项目也涉及到这个问题了,不过我是在被启动的模块中,让它显示在最前面。
有时候问题正面不太好解决,可以换个方向想一下。
给你个建议。
[/Quote]
谢谢!可是我这里被启动的那个进程只有exe文件,没有原代码,不知在父进程中怎么控制它
请叫我涛哥0-0 2011-10-27
  • 打赏
  • 举报
回复
我最近的一个项目也涉及到这个问题了,不过我是在被启动的模块中,让它显示在最前面。
有时候问题正面不太好解决,可以换个方向想一下。
给你个建议。
jixiang1983 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xianglitian 的回复:]
可以单步调试跟到DoMadol函数中参考一下他对主窗口的处理
我就不在这贴代码了
[/Quote]
DoMadol函数比较复杂,看了也太明白,而且DoMadol函数是操作自己,使自身一直处于焦点。现在要做的是使另一个子进程处于焦点状态,不知如何做,请指点!谢谢!
jixiang1983 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kyotrue 的回复:]
用MsgWaitForMultipleObjects,这样你才能处理主程序的界面消息。
[/Quote]
没用过MsgWaitForMultipleObjects,此处代码该如何写,能否说详细点,不胜感激!
jixiang1983 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
大致思路是这样,有点问题就是点击父窗口,会把父窗口带到前台来。这个你可能需要过滤一些消息
[/Quote]
谢谢部长的回复,只是我不知如何过滤消息,代码如何写,请指点一下!
kyotrue 2011-10-25
  • 打赏
  • 举报
回复
用MsgWaitForMultipleObjects,这样你才能处理主程序的界面消息。
向立天 2011-10-25
  • 打赏
  • 举报
回复
可以单步调试跟到DoMadol函数中参考一下他对主窗口的处理
我就不在这贴代码了
Eleven 2011-10-25
  • 打赏
  • 举报
回复
大致思路是这样,有点问题就是点击父窗口,会把父窗口带到前台来。这个你可能需要过滤一些消息
Eleven 2011-10-25
  • 打赏
  • 举报
回复
TCHAR szApp[] =  _T("Notepad");
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = {0};

if(CreateProcess (NULL, szApp, NULL, NULL, FALSE, DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi))
{
DEBUG_EVENT evt = {0};
while (EXIT_PROCESS_DEBUG_EVENT != evt.dwDebugEventCode)
{
if (WaitForDebugEvent(&evt, 100))
{
ContinueDebugEvent(evt.dwProcessId, evt.dwThreadId, DBG_CONTINUE);
}

MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(WM_PAINT == msg.message)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
::SetForegroundWindow(GetSafeHwnd());
}
内容概要:本文围绕“考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置”的Matlab代码实现展开,提出一种结合电能交互机制的双层优化模型,用于解决冷、热、电多能耦合背景下多微网系统的协同规划与运行问题。研究采用多场景分析方法应对可再生能源出力与负荷需求的不确定性,通过上层规划设备容量配置与下层优化多时段运行策略的联动,提升系统在复杂环境下的经济性、鲁棒性与能源利用效率。所提供的Matlab代码集成了建模、求解(如YALMIP+CPLEX)与结果可视化全流程,涵盖场景生成与削减、双层优化结构设计及多能流协同调度等关键技术环节,为综合能源系统优化提供了完整的算法实现与技术参考。; 适合人群:具备电力系统、综合能源系统或优化建模背景,熟悉Matlab编程与数学规划方法,正在从事相关领域科研或工程设计工作的研究生、高校研究人员及能源行业技术人员。; 使用场景及目标:①开展冷热电联供(CCHP)多微网系统的容量规划与运行优化研究;②支撑含分布式能源、储能及多能转换设备的综合能源系统多目标、多场景优化建模;③学习与复现双层优化、分布鲁棒优化及场景分析等先进优化方法在能源系统中的实际应用。; 阅读建议:建议结合配套文献与代码同步研读,重点理解双层模型的构建逻辑、变量耦合关系与求解技巧,关注场景生成方法与YALMIP调用细节,通过调整参数、修改目标函数等方式进行仿真实验,以深化对系统优化机理的掌握。

15,465

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧