Ist das ein Weg zu zwingen ein anderes Fenster oben zu sein? Nicht das Fenster der Anwendung, aber ein anderes ein, das bereits auf dem System läuft. (Windows, C/C++/C#)C/C++/C# Force-Fenster oben zu sein
Antwort
Sie können die Win32-API BringWindowToTop verwenden. Es braucht ein HWND.
Sie können auch die Win32-API SetWindowPos verwenden, die Ihnen auch ermöglicht, Dinge wie das Fenster ein Top-Level-Fenster zu machen.
SetWindowPos(that_window_handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
BringWindowToTop
bewegt sich das Fenster nach oben auf der Z-Ordnung (bis jetzt) aber tut nicht es ein oberstes Fenster machen.
Können Sie bitte ein Beispiel geben? –
@Levo: ersetzen Sie einfach das Handle des Fensters, das Sie wollen, anstelle von 'that_window_handle' im obigen Ausschnitt. –
Dies sollte als Antwort akzeptiert werden. – Neolisk
BringWindowToTop() hat keine Wirkung, wenn Sie ein Anwendungsfenster von hinten (oder minimiert) nach vorne bringen möchten. Der folgende Code macht diesen Trick zuverlässig:
ShowWindow(hwnd, SW_MINIMIZE);
ShowWindow(hwnd, SW_RESTORE);
Es ist langsam in Win XP. – ahoo
Arbeiten wie ein Charme! –
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);
}
Der seccond Link ist falsch, Sie meinen http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx Können Sie auch ein Beispiel für diese Funktion vorschlagen? –
@Levo: Danke, ich muss es nicht in die Zwischenablage kopiert haben, bevor ich eingefügt habe. –