![]() |
SetForegroundWindow bringt das Fenster nicht nach vorn
Hallo,
nachdem ich AutoCAD mit windows.SetForegroundWindow(acadapp.HWND); in den Vordergrund gebracht habe, möchte ich in einer anderen Funktion meine Anwendung wieder nach vorn bringen.
Delphi-Quellcode:
führt jetzt aber nur dazu, dass der Eintrag meines Programms in der Taskleiste blinkt (übrigens, nach beenden des Programms auch der von D7, sofern es im Hintergrund liegt).application.Restore; windows.SetForegroundWindow(self.Handle); self.BringToFront; Muss ich damit leben (wär schlecht) oder geht das irgendwie (wär gut)? Danke schonmal Thomasch |
Re: SetForegroundWindow bringt das Fenster nicht nach vorn
Hallo!
Probier's mal damit:
Delphi-Quellcode:
function ForceForegroundWindow(hwnd: THandle): WordBool;
const SPI_GETFOREGROUNDLOCKTIMEOUT = $2000; SPI_SETFOREGROUNDLOCKTIMEOUT = $2001; var ForegroundThreadID: DWORD; ThisThreadID: DWORD; timeout: DWORD; begin if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); if GetForegroundWindow = hwnd then Result := True else begin // Windows 98/2000 doesn't want to foreground a window when some other // window has keyboard focus if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then begin // Code from Karl E. Peterson, [url]www.mvps.org/vb/sample.htm[/url] // Converted to Delphi by Ray Lischner // Published in The Delphi Magazine 55, page 16 Result := False; ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil); ThisThreadID := GetWindowThreadPRocessId(hwnd, nil); if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then begin BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hwnd); AttachThreadInput(ThisThreadID, ForegroundThreadID, False); Result := (GetForegroundWindow = hwnd); end; if not Result then begin // Code by Daniel P. Stasinski SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE); BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hWnd); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE); end; end else begin BringWindowToTop(hwnd); // IE 5.5 related hack SetForegroundWindow(hwnd); end; Result := (GetForegroundWindow = hwnd); end; end; { ForceForegroundWindow } |
AW: SetForegroundWindow bringt das Fenster nicht nach vorn
Moin Leute :hi:
Ich habe Toms Lösung ausprobiert und mein Fenster kam nicht immer in den Vordergrund. Mittels ![]() Mal sehen, was die Praxis bringt, ob sich noch Kunden beschweren, dass die erst mit Alt-Tab wechseln müssen um die Meldung zu sehen. Stefan |
AW: SetForegroundWindow bringt das Fenster nicht nach vorn
Das ist Absicht!
Schau mal die Doku dazu an ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz