工控编程吧
标题:
225上位机VC MFC打开运行外部程序直到其结束进程
[打印本页]
作者:
qq263946146
时间:
2016-2-26 21:55
标题:
225上位机VC MFC打开运行外部程序直到其结束进程
(, 下载次数: 4)
上传
点击文件名下载附件
225上位机VC MFC打开运行外部程序直到其结束进程
功能展示
时常我们的程序在调用外部的程序或自身的子模块时,在用户退出外部程序时,不想让用户操作我们的程序,我们当前例程实现调用外部程序功能,直到被调用的外部程序退出后我们的例程才响应用户的操作请求,效果如图;
要点提示
打开一程序直到其退出为止,此功能我们可以通过函数WaitForSingleObject()来实现 ;
函数原型
WORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds );
参数说明:
1. hHandle[in]:对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。
2.dwMilliseconds[in]:定时时间间隔,单位为milliseconds(毫秒).如果指定一个非零值,函数处于等待状态直到hHandle标记的对象被触发,或者时间到了。如果dwMilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds为INFINITE,对象被触发信号后,函数才会返回;
实现功能
1.新建基于对话框的应用程序
2.拖拽按钮<目录测试程序---等其结束><打开注册表---等其结束>关联函数
void CGkbc8Dlg::OnOpen()
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProInfo;
memset(&StartupInfo,0,sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
BOOL bResult = CreateProcess(NULL,"regedit.exe",NULL,NULL,TRUE,DETACHED_PROCESS,NULL,NULL,&StartupInfo,&ProInfo);
if (bResult)
WaitForSingleObject(ProInfo.hProcess,INFINITE);
}
void CGkbc8Dlg::OnOpen0()
{
char buf[MAX_PATH];
GetModuleFileName(NULL,buf,MAX_PATH);
CString sEXEPathName(buf);
sEXEPathName=sEXEPathName.Left(sEXEPathName.ReverseFind('\\')+1);
sEXEPathName+="test.exe";
//<>
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProInfo;
memset(&StartupInfo,0,sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
BOOL bResult = CreateProcess(NULL,sEXEPathName.GetBuffer(0),NULL,NULL,TRUE,DETACHED_PROCESS,NULL,NULL,&StartupInfo,&ProInfo);
if (bResult)
WaitForSingleObject(ProInfo.hProcess,INFINITE);
}
复制代码
3.在WIN7等系统上打开注册表还得具有管理员权限,可添加例程根目录\res\AppName.exe.manifest到自己的工程目录下,载入到工程中,资源目录命名为24,资源命名为1,直接编辑直接双击生成的程序便可;AppName.exe.manifest文件为高版本编辑器生成的文件,在此复制使用即可;
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/aaf6a89922961a169927dc8f0700ffa2/0/0/w_19rszmagnl.swf-albumId=5374104509-tvId=5374104509-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4