Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fensterklasse ändern (https://www.delphipraxis.net/100351-fensterklasse-aendern.html)

trethupe 26. Sep 2007 21:53


Fensterklasse ändern
 
Hallo!

Nachdem ich jetzt stundenlang die Windows API Dokumentation gewälzt habe und auch Google nichts ausgespuckt hat, stell ich meine Frage hier.

Ist es irgendwie möglich die Fensterklasse eines laufenden Programms zu ändern (zB durch SendMessage, SetClassLong o.ä.) bzw die Fensterklasse vor Start des Programms zu ANDERS zu definieren?

Beispiel: Ich will dass der Editor nicht mehr als 'Notepad' sondern als Fensterklasse 'Test' gefunden wird.

Es wäre auch kein Problem wenn es bereits ein Programm gibt, welches dies schon erledigt.
Das würde mir auch sehr helfen!

Danke
trethupe

oki 26. Sep 2007 22:14

Re: Fensterklasse ändern
 
Hi,

imho ist Notepad nicht die Fensterklasse, sondern der Exe-Name, so ich mich nicht total irre. Benenn die Exe doch einfach mal um.

Gruß oki

trethupe 26. Sep 2007 22:20

Re: Fensterklasse ändern
 
Danke für die Antwort.

Hab das Programm "Fensterliste" und das zeigt mir Notepad als Fensterklasse an.
Ein einfacher FindWindow Befehl funktioniert auch mit der Klasse Notepad.

Umbenennen bringt leider nichts bei dem Programm, bei dem ich gerne den Klassennamen ändern würde (schon probiert! :-) )

oki 26. Sep 2007 22:38

Re: Fensterklasse ändern
 
Sorry,
dann war ich auf dem falschen Weg. Wenn mir der Name meiner Klasse nicht gefällt, benenne ich sie um und compiliere meine Anwendung neu.

Gruß oki

trethupe 26. Sep 2007 22:40

Re: Fensterklasse ändern
 
Um das ganze mal zu konkretisieren:

Ich habe eine Java Windows Anwendung, die mir bei einem Programm automatisch einstellungen vornimmt.
Jetzt gibt es ein zweites Programm was vom Aufbau her identisch ist, d.h. ich muss nur noch mein Java Programm dazu bewegen, auch im anderen Fenster die Aktion auszuführen.

Zuerst dachte ich, dass die Java Anwendung über den Fensternamen geht,um das Fenster zu finden, dies ist leider nicht der Fall (Habe mir schnell ein kleines Tool geschrieben, mit dem ich das zweite Fenster so wie das erste nennen konnte).

Dies funktioniert aber anscheindend nicht... (Die Java Anwendung sagt: Fenster nicht gefunden).

Außerdem habe ich jetzt herausgefunden, dass die Anwendungen bei jedem Start ihre Klasse ändern, d.h. ich befürchte jetzt fast, dass das Java Programm weder über Klassennamen noch über Titel die Fenster unterscheidet.

Wie könnte das ganze noch funktionieren?

oki 26. Sep 2007 22:50

Re: Fensterklasse ändern
 
Tut mir leid, aber ich verstehe immer weniger.
Was sind das für Programme, was tun die,wWelche Änderungen werden bei dem einen Programm warum durch das andere geändert? Und warum ist dein Programm identisch mit dem anderen?

Gruß

[edit] Oh, ich seh gerade, dass ich in der Sparte MS.NET gelandet bin. Das ist eigentlich nicht meine Baustelle :oops: Da muß wohl jemand anders helfen. [\edit oki]

trethupe 26. Sep 2007 23:09

Re: Fensterklasse ändern
 
Hallo!

Ich habe 2 ähnliche Computerprogramme (Spiele).
Für EINES der beiden hat jemand ein TWEAK tool geschrieben, das Einstellungen vornimmt.

Das TWEAK Tool will ich aber auch bei dem zweiten Spiel benutzen, allerdings erkennt das Tweak Tool, dass es nicht für das zweite Spiel programmiert wurde ("Fenster wurde nicht gefunden").

Ich wiederum will jetzt ein drittes Programm schreiben, dass dem Tweak Tool vorgaukelt das zweite Spiel sei das erste Spiel.

Da das Tweak Tool im Spiel klickt, erkennt es das Fenster anhand der Fensterklasse (wobei die bei jedem Start anders sind), des Fensternamens (hab ich schon probiert) oder einer anderen Eigenschaft. Die suche ich jetzt, um das Vorgaukelprogramm schreiben zu können...

s-off 27. Sep 2007 06:31

Re: Fensterklasse ändern
 
Zitat:

Zitat von trethupe
Da das Tweak Tool im Spiel klickt, erkennt es das Fenster anhand der Fensterklasse (wobei die bei jedem Start anders sind), des Fensternamens (hab ich schon probiert) oder einer anderen Eigenschaft. Die suche ich jetzt, um das Vorgaukelprogramm schreiben zu können...

Du meinst das Fenster-Handle. Die Klasse ändert sich sicherlich nicht bei jedem Start.
Das Tweak Tool wird nichts anderes machen, als sich besagtes Handle zu holen.

Das kann es entweder machen, indem es an FindWindow Klassenname und/oder Fenstercaption übergibt.
Ggf. kann man das Handle des Mainwindows auch über den Namen der Exe herausbekommen; verlass Dich also nicht darauf, dass es ausreicht, wenn Du die Caption anpasst :wink:

Luckie 27. Sep 2007 08:18

Re: Fensterklasse ändern
 
Windows braucht die Fensterklasse, um das Fenster im System zu registrieren. Ich könnte mir vorstellen, wenn du die Fensterklasse änderst, dass dann Windows den Bezug zum Fenster verliert. Und wie man sieht bietet MSDN-Library durchsuchenSetWindowLong dies auch nicht and:
Code:
GWL_EXSTYLE
Sets a new extended window style. For more information, see CreateWindowEx.
GWL_STYLE
Sets a new window style.
GWLP_WNDPROC
Sets a new address for the window procedure.
GWLP_HINSTANCE
Sets a new application instance handle.
GWLP_ID
Sets a new identifier of the window.
GWLP_USERDATA
Sets the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.
The following values are also available when the hWnd parameter identifies a dialog box.
DWLP_DLGPROC
Sets the new pointer to the dialog box procedure.
DWLP_MSGRESULT
Sets the return value of a message processed in the dialog box procedure.
DWLP_USER
Sets new extra information that is private to the application, such as handles or pointers.

trethupe 27. Sep 2007 11:57

Re: Fensterklasse ändern
 
Danke für eure Antworten.
Sieht dann natürlich schlecht aus für mich.

Aber die Fensterklasse ändert sich wirklich jedes mal und zwar sieht das wie folgt aus:

Die Fensterklassen der beiden Programme ist

Afx.[gefolgt von standard zahlen].[6 Stellen die bei jedem Start anders sind]

und dies ist bei beiden Spielen so.

Wenn ich die Fensterklassen nicht ändern kann, welche andere möglichkeit seht ihr dem Tweak programm was vorzugaukeln?=

edit: Kennt sich jemand mit dem Programm WinSpy aus? Damit kann man ja API Messages abfangen. Wenn das Programm nun eine Anfrage stellt um das Fenster zu finden würde man das bei WinSpy sehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Seite 1 von 2  1 2      

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