更换睡眠,直到打开桌面上的窗户

Replace Sleep until Window on desktop opened

本文关键字:桌面 窗户      更新时间:2023-10-16

当我打开一些软件应用程序时,我必须等待2-3秒,直到窗口将在桌面上显示为止。我必须使用睡眠(2000);然后始终在顶部进行调用方法设置。我试图用代码更换睡眠。我想从打开的窗口中获取信号,然后调用一个方法,该方法允许打开的窗口始终在顶部。这是我的代码:

BOOL CALLBACK EnumWindowsProc(HWND windowHandle, LPARAM lParam)
{
    DWORD searchedProcessId = (DWORD)lParam;
    DWORD windowProcessId = 0;
    GetWindowThreadProcessId(windowHandle, &windowProcessId);
    cout << "Process id: " << windowProcessId << endl;

    if(searchedProcessId == windowProcessId) {
        HWND hwnd = windowHandle;
        Sleep(2000);                    
        SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
        cout << "Process ID found!" << endl;
        return TRUE;
    }
    return TRUE;
}
void AlwaysOnTop(int processId)
{
        EnumWindows(&EnumWindowsProc, (LPARAM)processId);   
}

void AlwaysOnTop(char *name)
{
        cout << "String: " << name << endl;
        Sleep(2000);
        HWND h = FindWindow(NULL, (LPCSTR) name);
        SetActiveWindow(h); 
        SetForegroundWindow(h);
        SetWindowPos(h, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE | SWP_NOMOVE);
}

int main()
{
    char s[] = {"Application"};
    AlwaysOnTop(s);
    //AlwaysOnTop(2307);
    system("PAUSE");
    return 0;
}

可能要做的最好的是致电 WaitForInputIdle

等待指定的过程完成了其初始输入的处理,并且正在等待用户输入,而无需输入,或者直到超时间隔已经过去。

这是您最接近的一般方式等待,直到一个过程显示其UI。它不会总是做您想要的,但这是最好的。