资源描述:
《MFC调用一个程序的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、所以感觉你这里的PID号给了个固定值,应该抓不住对话框。下面这段能够抓对话框,不知道是你要的效果么void C对话框中嵌对话框Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码CRect rec;CWnd::GetClientRect(&rec); HWND hWnd = ::FindWindow(NULL, _T("TestDlg"));::SetWindowPos(hWnd, NULL, 0,0,0,0,SWP_NOMOVE
2、SWP_NOZORDER
3、SWP_N
4、OSIZE
5、SWP_FRAMECHANGED);::SetParent(hWnd, this->GetSafeHwnd());::SetWindowPos(hWnd, NULL, 0, 0, rec.Width(), rec.Height(), SWP_NOZORDER);//CDialogEx::OnOK();}vc++在程序中运行另一个程序的方法2010-08-1314:471419人阅读评论(0)收藏举报vc++nullattributes文档microsoftsecurity在vc++程序中运行
6、另一个程序的方法有三个:WinExec(),ShellExcute()和CreateProcess()三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。 WinExec 两个参数,前一个指定路径,后一个指定显示方式。 ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的
7、应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。 CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。 三个SDK函数( WinExec、ShellExec、CrateProcess )的语法: WinExec这个函数最简单,只有两个参数,原型如下:
8、 UINT WinExec( LPCSTR lpCmdLine, // 命令路径 UINT uCmdShow // 显示方式 ; lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。 uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。 返回值: 若函数调用成功,则返回值大于31。若函数调用失败,
9、则返回值为下列之一: ① 0:系统内存或资源已耗尽。 ② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。 ③ ERROR_FILE_NOT_FOUND:指定的文件未找到。 ④ ERROR_PATH_NOT_FOUND:指定的路径未找到。 虽然Microsoft认为WinExec已过时,但是在许多时候,简单的WinExec函数仍是运行新程序的最好方式。简单地传送作为第一个参数的命令行,还需要决定如何显示程序(该程序也许会忽视它)的第二个参数。通常,将
10、其设置为SW_SHOW,也可尝试SW_MINIMIZED或SW_MAXIMIZED。WinExec不允许用CreateProcess获得的所有选项,而它的确简单。使用方法如下:WinExec("Notepad.exe", SW_SHOW); // 打开记事本WinExec("D://Program Files//Test//Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打Test.exe其中这里的SW_SHOW,SW_SHOWMAXIMIZED都是执行程序时窗口的显示方
11、式,在winuser.h中定义。需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。 ShellExecute原型如下: HINSTANCE ShellExecute( HWND hwnd, //父窗口句柄 LPCTSTR lpOperation, //操作, 打开式 "