想请教一个简单的问题,想通过点击某个菜单项弹出一个对话框,对话框是可执行程序,没有源码,怎么做?

解决方案 »

  1.   

    问题要说清楚。
    如果是要启动一个新得程序,(exe),可以用CreateProcess();而被启动的程序是个对话框类型的程序。
    是你的本意吗?
      

  2.   

    就是啊
    问题得说清楚.用shellexecute
      

  3.   

    有三种调用的方式
    ShellExecute(NULL, "open", "$$$$.exe", m_sParameter, NULL, SW_SHOWNORMAL);BOOL CreateProcess(........)WinExec("$$$$.exe", SW_SHOW);具体内容参考msdn吧
      

  4.   

    WinExec
    原型:
    UINT WinExec(
      LPCSTR lpCmdLine,  // address of command line
      UINT uCmdShow      // window style for new application
    );
    用于十六位操作系统及兼容系统.
    例如:
    WinExec("notepad.exe f:\\调用程序.txt",SW_SHOW);
    WinExec("notepad.exe ",SW_SHOW);
    不同的参数用空格分开,故路径中不能有空格,而大部分程序默认是安装在"...\Program Files\...",如word,这极大的限制了WinExec的应用范围.
    以上可不带路径:
    1,程序所在目录.
    2,当前路径.
    3,系统目录,可以用GetSystemDirectory得到.
    4,Windows 目录. 可以用TheGetWindowsDirectory得到.  
    5,在环境变量中设置的目录.ShellExecute
    原型:
    HINSTANCE ShellExecute(
        HWND hwnd,                   //父窗口句柄
        LPCTSTR lpOperation,         //操作,"open","print","explore"
        LPCTSTR lpFile,              //文件名,前面可加路径
        LPCTSTR lpParameters,        //参数
        LPCTSTR lpDirectory,         //默认文件夹
        INT nShowCmd                 //显示方式
    );打开一个应用程序
    ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );

    ShellExecute(this->m_hWnd,"open","notepad.exe","c:\MyLog.log","",SW_SHOW );打开一个同系统程序相关连的文档
    ShellExecute(this->m_hWnd,"open","c:\abc.txt","","",SW_SHOW );激活相关程序,发送EMAIL
    ShellExecute(this->m_hWnd,"open","mailto:[email protected]","","", SW_SHOW );用系统打印机打印文档
    ShellExecute(this->m_hWnd,"print","c:\abc.txt","","", SW_HIDE);lpParameters的用法示例:
    一,建立一个可以接受参数的程序call.exe,添加如下代码:
    BOOL CCallApp::InitInstance()
    {
    int n = __argc;
    for(int i = 1 ; i < n ; i++)
    AfxMessageBox(__targv[i]);
           //__targv[0]存储的是程序的文件名
    ...
    }
    二,Alt + F7的进行Project setting, Debug -> program argurments ->"1 2 3 4 5".
    如果有多个参数,用空格分开.
    三,运行.
    四,执行ShellExecute(NULL,NULL,"f:\\call.exe","1 2 3 4 5",NULL,SW_SHOW);BOOL CreateProcess(
      LPCTSTR lpApplicationName,
                             
      LPTSTR lpCommandLine,  
      LPSECURITY_ATTRIBUTES lpProcessAttributes,  
      LPSECURITY_ATTRIBUTES lpThreadAttributes,   
      BOOL bInheritHandles,  
      DWORD dwCreationFlags, 
      LPVOID lpEnvironment,  
      LPCTSTR lpCurrentDirectory,   
      LPSTARTUPINFO lpStartupInfo,  
      LPPROCESS_INFORMATION lpProcessInformation  
    );
    STARTUPINFO   startupInfo;
    memset(&startupInfo,0,sizeof(STARTUPINFO));
    startupInfo.cb = sizeof(STARTUPINFO);示例:
    //程序最启动时最大化
    startupInfo.dwFlags |= STARTF_USESHOWWINDOW;
    startupInfo.wShowWindow = SW_SHOWMAXIMIZED;

    //运行....exe
     PROCESS_INFORMATION ProcessInfo;
      BOOL bCreate = ::CreateProcess
            (
            "f:\\call.exe",// 1 2 3 4",
    NULL,
    NULL,
            NULL,
            FALSE,
            0,
            NULL,
            NULL,
            &startupInfo,
            &ProcessInfo); //等到call.exe执行完毕
    WaitForSingleObject(ProcessInfo.hProcess,1000000);
    MessageBox("调用程序结束!");