我要在程序中执行一个udl文件以连接数据库,连接完毕后,才作下面的连接操作。我原来是这么作的:
ShellExecuteA( this->m_hWnd, "Open", "1.udl", "", "", SW_SHOWMAXIMIZED );
cnn->Open( "File Name=1.udl", "", "", NULL );但我的配置还没完,程序就已经走下来了,我希望 ShellExecuteA 这一步是阻塞式的,该怎么做呢?

解决方案 »

  1.   

    你是说用一个循环?如果发现配置窗口关闭了,就退出循环吗?
    那么如何知道配置窗口关闭了呢?不会是用FindWindow之类的吧。
      

  2.   

    简单啊,你用
    SHELLEXECUTEINFO sei;
    ShellExecuteEx(&sei);
    cnn->Open( "File Name=1.udl", "", "", NULL );
    WaitForSingleObject(sei.hProcess,-1),具体ShellExecuteEx的用法你看一下msdn,我就不赘述了
      

  3.   

    SHELLEXECUTEINFO ShExecInfo = {0};
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = "1.udl";
    ShExecInfo.lpParameters = "";
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOW;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    WaitForSingleObject(ShExecInfo.hProcess,INFINITE);