2009-12-09 24 views
6

क्या को मजबूर करने का कोई तरीका है विंडो शीर्ष पर होने के लिए? एप्लिकेशन की विंडो नहीं है, लेकिन कोई अन्य एक, पहले से ही सिस्टम पर चल रहा है। (विंडोज़, सी/सी ++/सी #)सी/सी ++/सी # फोर्स विंडो शीर्ष पर होने के लिए

उत्तर

5

आप Win32 API BringWindowToTop का उपयोग कर सकते हैं। यह एक एचडब्ल्यूएनडी लेता है।

आप Win32 API SetWindowPos का भी उपयोग कर सकते हैं जो आपको विंडो को शीर्ष-स्तरीय विंडो बनाने जैसी चीजों को करने की अनुमति देता है।

+0

seccond लिंक गलत है, क्या आपका मतलब http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx: निम्नलिखित कोड इस चाल विश्वसनीय करता है क्या आप इस फ़ंक्शन पर एक उदाहरण भी सुझा सकते हैं? –

+0

@ लेवो: धन्यवाद, मैंने पेस्ट करने से पहले क्लिपबोर्ड पर इसे कॉपी नहीं किया होगा। –

10
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 

BringWindowToTop (अब के लिए) जेड क्रम के शीर्ष पर खिड़की चला जाता है लेकिन यह एक सर्वोच्च खिड़की नहीं है।

+0

क्या आप कृपया एक उदाहरण दे सकते हैं? –

+1

@ लेवो: उपरोक्त स्निपेट में 'that_window_handle'' के स्थान पर शीर्ष पर इच्छित विंडो के हैंडल को बस प्रतिस्थापित करें। –

+0

यह उत्तर स्वीकार किया जाना चाहिए। – Neolisk

3

BringWindowToTop() का कोई प्रभाव नहीं पड़ता है यदि आप पीछे से (या न्यूनतम) से आगे की एप्लिकेशन विंडो लेना चाहते हैं।

ShowWindow(hwnd, SW_MINIMIZE); 
ShowWindow(hwnd, SW_RESTORE); 
+0

यह जीत XP में धीमा है। – ahoo

+0

एक आकर्षण की तरह काम करना! –

0
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) { 
    wchar_t buff[255]; 

    if (IsWindowVisible(hWnd)) { 
     GetWindowText(hWnd, (LPWSTR) buff, 254); 
     //wprintf(L"%s\n", buff); 
     wstring ws = buff; 
     if (ws.find(L"Firefox") != ws.npos) 
     { 
      ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); 
     } 
    } 
    return TRUE; 
} 

int main(){ 
    BOOL enumeratingWindowsSucceeded = ::EnumWindows(EnumWindowsProc, NULL); 
} 
संबंधित मुद्दे