相关疑难解决方法(0)

WaitForInputIdle不能以编程方式启动mspaint

我正在尝试打开"mspaint"并在初始化之后立即找到它的句柄.但FindWindow回报NULL,如果我打电话WaitForInputIdle.如果我尝试使用Sleep(1000)它的功能.但我不认为这是等待程序准备就绪的正确方法.这个代码有解决方案吗?

    CString strWindowDirectory;
    GetSystemDirectory(strWindowDirectory.GetBuffer(MAX_PATH), MAX_PATH);
    SHELLEXECUTEINFO sei = { 0 };
    sei.cbSize = sizeof(SHELLEXECUTEINFO);
    sei.fMask =  SEE_MASK_NOCLOSEPROCESS;
    sei.lpVerb = L"open";
    sei.lpFile = L"mspaint";
    sei.lpDirectory = strWindowDirectory;
    sei.nShow = SW_SHOWNORMAL;

    HWND    hPaint = NULL;
    if(ShellExecuteEx(&sei))
    {
        int r = ::WaitForInputIdle(sei.hProcess, INFINITE);
        ATLTRACE(L"WaitForInputIdle %d\n", r);

        if (sei.hProcess == NULL)       return;

        hPaint = ::FindWindow(L"MSPaintApp", NULL); 

        ATLTRACE(L"Handle %d\n", hPaint);
        if (!hPaint) return;
    }
    else
    {
        MessageBox(L"Couldn't find mspaint program");
        return;
    }
Run Code Online (Sandbox Code Playgroud)

c++ winapi mfc atl

2
推荐指数
1
解决办法
1143
查看次数

标签 统计

atl ×1

c++ ×1

mfc ×1

winapi ×1