AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetForegroundWindow bringt das Fenster nicht nach vorn
Thema durchsuchen
Ansicht
Themen-Optionen

SetForegroundWindow bringt das Fenster nicht nach vorn

Ein Thema von thomasch · begonnen am 7. Jun 2005 · letzter Beitrag vom 3. Feb 2011
Antwort Antwort
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#1

SetForegroundWindow bringt das Fenster nicht nach vorn

  Alt 7. Jun 2005, 15:56
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:
 
  application.Restore;
  windows.SetForegroundWindow(self.Handle);
  self.BringToFront;
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).

Muss ich damit leben (wär schlecht) oder geht das irgendwie (wär gut)?

Danke schonmal

Thomasch
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: SetForegroundWindow bringt das Fenster nicht nach vorn

  Alt 7. Jun 2005, 16:07
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 }
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: SetForegroundWindow bringt das Fenster nicht nach vorn

  Alt 3. Feb 2011, 10:45
Moin Leute

Ich habe Toms Lösung ausprobiert und mein Fenster kam nicht immer in den Vordergrund. Mittels http://www.delphipraxis.net/451409-post7.html klappt das.
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
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

AW: SetForegroundWindow bringt das Fenster nicht nach vorn

  Alt 3. Feb 2011, 10:51
Das ist Absicht!
Schau mal die Doku dazu an SetForegroundWindow:

Zitat:
The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:

* The process is the foreground process.
* The process was started by the foreground process.
* The process received the last input event.
* There is no foreground process.
* The foreground process is being debugged.
* The foreground is not locked (see LockSetForegroundWindow).
* The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
* No menus are active.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz