Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anwendung in den vordergrund (https://www.delphipraxis.net/94589-anwendung-den-vordergrund.html)

Innos 23. Jun 2007 20:51


Anwendung in den vordergrund
 
hiho...

eigentlich ne einfache sache:
Delphi-Quellcode:
BringWindowToTop(wnd); //wnd is ne HWND
das funktioniert aba nur wenn die anwendug NICHT minimiert ist...
also

Delphi-Quellcode:
ShowWindow(wnd,SW_MAXIMIZE);
BringWindowToTop(wnd);
aba Problem... das funktioniert nur wenn mein Programm (beispiel Form1) selber fixiert ist... wenn beides im hintergrund ist funktioniert das nicht!
außerdem wird die anwendung auf das maximale (is klar) gebracht.... aba die is eigentlich nur in einem fenster...

also hab ich nu folgenes

Delphi-Quellcode:
Form1.SetFocus;
ShowWindow(wnd,SW_MAXIMIZE);
BringWindowToTop(wnd);
jetz steh ich beim maximieren vor dem selben problem aba immerhin funktioniert das IMMER!! auch wenn alles minimiert ist...
ABER^^ wenn die anwendung schon im vordergrund IST... dann maximiert sich kurz meine form und dann gehts weiter mit der eigentlichen anwendung -.-
wie kann ich also erkennen, ob die anwendung scho im vordergrund ist... das ist aba nicht so einfach mit ner Boolean variable zu lösen und bool:=BringWindowToTop(wnd); oder so, denn wnd ist ein spiel, dass auch wenn es im hintergrund ist weiter aktualisiert wird deshalb erkennt der das iwie net... :wall:
habt ihr eine idee?
helft mir^^ vielen dank scho ma im vorraus :thumb:

mfg

bitsetter 23. Jun 2007 21:12

Re: Anwendung in den vordergrund
 
Hi,

eventuell so?
Delphi-Quellcode:
  if Windows.IsIconic(wnd) then//ist minimiert
    ShowWindow(wnd,SW_RESTORE);
  if GetForegroundWindow <> wnd then
    BringWindowToTop(wnd);

Innos 23. Jun 2007 21:27

Re: Anwendung in den vordergrund
 
danke für die schnelle antwort..^^ geht aba net :wall: :wall:

also habs einfach ma eins zu eins eingefügt aba funzt noch nicht

stoxx 23. Jun 2007 21:42

Re: Anwendung in den vordergrund
 
ist es ein fenster von Dir oder eine fremde Anwendung, was Du in den Vordergrund holen möchtest?

stoxx 23. Jun 2007 21:47

Re: Anwendung in den vordergrund
 
standardmäßig blinkt nur der Eintrag in der Taskleiste, wenn Du ein fremdes Fenster in den Vordergrund holen möchtest.
Über einen workarount kann man erreichen, den fremden Thread mit der eigenen Anwendung zu verknüpfen, damit gehts wieder, .. der Code unten ist von NicoDE (nur der Vollständigkeit halber)

vorher SW_RESTORE aufrufen, wenn minimiert

Delphi-Quellcode:
ShowWindow(wnd,SW_RESTORE);
Delphi-Quellcode:
procedure SetForegroundWindowEx(Wnd: HWND);
var
 Attached: Boolean;
 ThreadId: DWORD;
 FgWindow: HWND;
 AttachTo: DWORD;
begin                  
 Attached := False;
 ThreadId := GetCurrentThreadId;
 FgWindow := GetForegroundWindow();
 AttachTo := GetWindowThreadProcessId(FgWindow, nil);
 if (AttachTo <> 0) and (AttachTo <> ThreadId) then
   if AttachThreadInput(ThreadId, AttachTo, True) then
   begin
     Attached := Windows.SetFocus(Wnd) <> 0;
     AttachThreadInput(ThreadId, AttachTo, False);
   end;
 if not Attached then
 begin
   SetForegroundWindow(Wnd);
   SetFocus(Wnd);
 end;
end;  // von setforegroundWindowEx

Innos 23. Jun 2007 22:56

Re: Anwendung in den vordergrund
 
gut :D hab grad iwie bei dem versuch mein pc zum absturz gebracht -.- hat aba nix mit dem code zu tun... dauert jedenfalls nochn bisl länger bei mir zumahl ich deinen code null vertstehe -.-

Luckie 24. Jun 2007 01:35

Re: Anwendung in den vordergrund
 
Solche Programme, die sich ungefragt in den Vordergrund drängen, hasse ich. Es reicht, wenn sie in der Taskbar blinken. Aber ich will als Benutzer selber entscheiden, ob ich ob und wann ich meine Arbeit unterbreche und mich um das Fenster kümere.

Innos 24. Jun 2007 09:13

Re: Anwendung in den vordergrund
 
es geht darum, dass mein programm in dieser anwendung ständig pixel abfragen unternimmt und deshalb sollte es stets maximiert sein... aba das geschieht auf garkeinem fall ungefragt!!! der benutzer kann eine checkBox aktivier... sozusagen der afk modus)
denn wenn ein poup oder sich nur mal antivir aktualisiert würde die pixelabfrage nicht mehr funktionieren...

stoxx 25. Jun 2007 14:20

Re: Anwendung in den vordergrund
 
Zitat:

Zitat von Luckie
Solche Programme, die sich ungefragt in den Vordergrund drängen, hasse ich. Es reicht, wenn sie in der Taskbar blinken. Aber ich will als Benutzer selber entscheiden, ob ich ob und wann ich meine Arbeit unterbreche und mich um das Fenster kümere.

es gibt aber auch Anwendungen, wo dies nötig ist. Wenn der User z.B. einen automatischen Programmstart vornehmen lassen möchte, wo auch die LoginDaten automatisch eingetragen werden. Und es zusätzlich noch eine Java Anwendung ist, und Sendmessage rausfällt, da kein kein Edit.
Um nun die LoginDaten zu setzen. Muss man eben mit keybd Event arbeiten. Und da ist es zwingend erforderlich, dass die Anwendung im Vordergrund ist.
Ich wollte nur mal EINEN Anwendungsfall beschreiben.
Was ich schade finde, dass Du nicht antworten würdest, auch wenn Du die Antwort wüsstest, nur weil der Anwendungsfall bei Deiner Arbeit noch nicht vorgekommen ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 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