Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   programm in den vordergrund (https://www.delphipraxis.net/166882-programm-den-vordergrund.html)

Mystery 4. Mär 2012 10:32

programm in den vordergrund
 
Stehe vor folgendem Problem:

Ich versuche ein kleines Addon für ein Spiel zu schreiben. Dafür öffne ich meine programmierte .exe datei, die sich dann in den Vordergrund schiebt. Das funktioniert auch soweit mit:



Code:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
Außerdem habe ich auf einem Timer:

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
var
h: hwnd;
wnd:hwnd;
begin
Form1.SetFocus;
h := FindWindow(nil,'Project1');
if h <> 0 then BringWindowToTop(h);
end;
Das Problem: Das Programm vor dem mein Programm erscheinen soll, hat anscheinend auch Code, das es im Vordergrund bleibt, da wenn beides Geöffnet ist, es wie wild hin und er blinkt ..

Gibt es eine Möglichkeit, mein Programm noch eine Ebene vor das andere Prgramm zu setzen?

Popov 4. Mär 2012 10:52

AW: programm in den vordergrund
 
Meiner Kenntnis nach: Top ist Top. Toper als Top gibt es nicht. Ok, es gibt TopMost, aber das ist für mich Top.

Wenn auch das andere Programm mit einem Timer arbeite, dann...

Vielleicht eine andere Idee: guck dir mal die Komponente ApplicationEvents an und da OnDeactivate.

Mystery 4. Mär 2012 10:56

AW: programm in den vordergrund
 
danke, werd ich mir mal anschauen :) ich weiß jedenfalls, das es irgendwie gehen muss.

ist für das Spiel league of legends (falls euch der name was sagt ) ^^

Es gibt bereits Programme dafür, die ebenfalls mittels Delphi geschrieben wurden, und auch im Vordergrund bleiben. Diese Erfüllen leider nicht alles, was ich mir wünsche, deshalb wollte ich es leicht ändern, scheiter nur daran es im Vordergrund zu halten :D

Mystery 4. Mär 2012 11:22

AW: programm in den vordergrund
 
Ok so ganz verstehe ich die neue Komponente noch nicht, habe ich bisher noch nie verwendet. Hilfe hab ich mir durchgelesen ;)

Was genau kann Ondeactivate?! hab da einfach mal meinen Code reinkopiert, aber das war es anscheinend nicht :D


Bei OnCreate hab ich das hinzugefügt:

Application.OnDeactivate := ApplicationEvents1Deactivate;

und in und in der Procedure Applicationevents1ondeactivate:
h := FindWindow(nil,'Project1');
if h <> 0 then BringWindowToTop(h);

Popov 4. Mär 2012 11:42

AW: programm in den vordergrund
 
Also ob das was bringt weiß ich nicht, es ist nur eine Idee.

Was macht die Komponente ApplicationEvents? Eigentlich nicht was was du nicht mit paar Zeilen auch ohne sie machen könntest. ApplicationEvents bietet vereinfachten Zugriff auf die Events der Application. Und OnDeactivate wird lauf Hilfe ausgelöst wenn eine andere Anwendung den Fokus erhält. Und in der Regel, wenn auch nicht ausdrücklich, schnappt sich ein Programm das in den Vordergrund geschoben wird auch den Fokus (ist aber kein Muß).

Sir Rufo 4. Mär 2012 12:33

AW: programm in den vordergrund
 
http://www.delphipraxis.net/123142-f...inimieren.html

Beitrag 23 und 26

Mystery 4. Mär 2012 13:30

AW: programm in den vordergrund
 
Code:
SetWindowLong(Handle, GWL_EXSTYLE, getWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT or WS_EX_LAYERED);
erfüllt seinen zweck, jedoch habe ich ein Label, welches sichtbar bleiben sollte..

// Oder das ich per form1.canvas.textout irgendwie text sichtbar machen kann..

//wenn in die Lautstärke im Spiel ändere, erscheint ja auch das Symbol der box, schiebt sich also vor das spiel, und die flackert nicht.. :D


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