2014-01-31 26 views
1

當我打開某些軟件應用程序時,我必須等待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; 
} 
+1

輔助功能將讓您註冊,以便在創建窗口時得到通知。 –

回答

2

也許你能做的最好的是調用WaitForInputIdle

等待,直到指定的進程已處理完其初始投入,並等待用戶輸入不帶輸入待定,或者直到超時間隔過去。

這是最接近你可以得到一個等待一個過程顯示其UI的一般方法。它不會總是做你想要的,但它是最好的。