Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ChangeDisplaySettings Hooken (https://www.delphipraxis.net/79375-changedisplaysettings-hooken.html)

Luckie 21. Okt 2006 11:38


ChangeDisplaySettings Hooken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche gerade mit dem Beispiel von toms zu API-Hooks http://www.michael-puff.de/dirindex..../Importe/toms/ , ChangeDisplaySettings zu hooken, damit ich mitbekommen, wenn sich die Auflösung ändert und zwar bevor sie geändert wird, damit ich noch die Icon Poitionen sichern kann.

Leider funktioniert mein Demo-Programm nicht, obwohl es eigentlich das Beispiel von toms ist. Ich hänge es hier mal an.

Reinhard Kern 22. Okt 2006 13:58

Re: ChangeDisplaySettings Hooken
 
Zitat:

Zitat von Luckie
Ich versuche gerade mit dem Beispiel von toms zu API-Hooks http://www.michael-puff.de/dirindex..../Importe/toms/ , ChangeDisplaySettings zu hooken, damit ich mitbekommen, wenn sich die Auflösung ändert und zwar bevor sie geändert wird, damit ich noch die Icon Poitionen sichern kann.

Leider funktioniert mein Demo-Programm nicht, obwohl es eigentlich das Beispiel von toms ist. Ich hänge es hier mal an.

Hallo,

ist das nicht unnötig kompliziert? Die Positionen von Icons sollte man doch kennen, oder man kann sie rechtzeitig abfragen, und von der Displayänderung werden sowieso alle benachrichtigt.

Gruss Reinhard

Luckie 22. Okt 2006 22:10

Re: ChangeDisplaySettings Hooken
 
Zitat:

Zitat von Reinhard Kern
Die Positionen von Icons sollte man doch kennen,

Und woher, wenn ich sie nicht vorher speichere? Wenn ich sie beim Programmstart speichere, ok, und wenn er dann ein Icon verschiebt bevor er die Auflösung ändert?

Zitat:

oder man kann sie rechtzeitig abfragen,
Und wie?

Zitat:

und von der Displayänderung werden sowieso alle benachrichtigt.
Aber erst, wenn die Auflösung geändert wurde, dann ist es natürlich zu spät zum Speichern.

Aber wenn du eine einfachere Alternative kennst, ich bin für alles offen.

Reinhard Kern 23. Okt 2006 00:18

Re: ChangeDisplaySettings Hooken
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Reinhard Kern
Die Positionen von Icons sollte man doch kennen,

Und woher, wenn ich sie nicht vorher speichere? Wenn ich sie beim Programmstart speichere, ok, und wenn er dann ein Icon verschiebt bevor er die Auflösung ändert?

Zitat:

oder man kann sie rechtzeitig abfragen,
Und wie?

Zitat:

und von der Displayänderung werden sowieso alle benachrichtigt.
Aber erst, wenn die Auflösung geändert wurde, dann ist es natürlich zu spät zum Speichern.

Aber wenn du eine einfachere Alternative kennst, ich bin für alles offen.

Hallo,

ich denke einfach nach folgender Logik:

A wenn du die Position vorher weisst, existiert das Problem nicht.

B wenn nicht, warum must du es danach dann plötzlich wissen?

m.a.W. wenn der Anwender das Icon verschiebt, weisst du nicht, wo es ist - warum ist dir das vor der Displayumschaltung egal und nachher nicht mehr?

Ich sage ja nicht, dass du keine guten Gründe hast, ich kenne sie nur bisher nicht. Ich persönlich würde das so angehen: wenn ich die Position kennen muss, speichere ich sie von Anfang an - nach einer Displayänderung eben die neue. Einen Hook würde ich ungern dafür aufwenden.

Gruss Reinhard

runger 23. Okt 2006 05:15

Re: ChangeDisplaySettings Hooken
 
Hallo Reinhard,

was für eine überflüssige Diskussion. Er hat eine klare Frage gestellt und erwartet eine klare Antwort.
Hier gibt's bereits einige threads zu diesem Thema, aber nie eine befriedigende Antwort. Das ganze ist zum Beispiel sinnvoll um eine Änderung der Display-Skalierung zu verhindern.

Rainer

Luckie 23. Okt 2006 08:39

Re: ChangeDisplaySettings Hooken
 
Zitat:

Zitat von Reinhard
wenn der Anwender das Icon verschiebt, weisst du nicht, wo es ist - warum ist dir das vor der Displayumschaltung egal und nachher nicht mehr?

Ich muss es vorher wissen, um die Icon-Positionen zu sichern, damit ich sie danach eventuell wieder herstellen kann. Beipsiel: Nehmen wir an du hast viele Icon auf dem Desktop und alle schön angeordnet. Jetzt startest du ein Spiel, welches die Auflösung ändert. Beendest du das Spiel und es stellt die Auflösung wieder zurück, kannst du deine 125 Icons wieder alle neu anordnen. Deswegen muss ich die Positionen vorher sichern können. Und dazu muss ich mitbekommen wann die Auflösung geändert wird, dies abfangen, die Icon-Positionen sichern und dann kann die Auflösung geändert werden.

Aber da shab eich alles schon im ersten Posting erklärt:
Zitat:

Zitat von Luckie
damit ich mitbekommen, wenn sich die Auflösung ändert und zwar bevor sie geändert wird, damit ich noch die Icon Poitionen sichern kann.


Luckie 27. Okt 2006 00:06

Re: ChangeDisplaySettings Hooken
 
Konnte sich das mittlerweile mal jemand näher angucken?

x000x 28. Okt 2006 02:58

Re: ChangeDisplaySettings Hooken
 
Moin moin,
Zitat:

Zitat von Luckie
Konnte sich das mittlerweile mal jemand näher angucken?

Angucken schon, nur obs dir weiterhilft...

In meiner Windows.pas ist ChangeDisplaySettings so deklariert
Delphi-Quellcode:
type
  //TChangeDisplaySettings = function(dwWidth: DWORD; dwHeight: DWORD; dwBpp: DWORD): HRESULT; stdcall;
  TChangeDisplaySettings = function(var lpDevMode: TDeviceMode; dwFlags: DWORD): Longint; stdcall;
Wenn ich die hooke und von einem anderen Programm ChangeDisplaySettings aufrufe, erscheint die
MessageBox --> scheint also zu funktionieren...
Wenn ich allerdings meine Auflösung über Einstellungen Anzeige ändere, erscheint sie nicht.
Kann es vll. sein, dass dabei ChangeDisplaySettings gar nicht aufgerufen wird?

Christian Seehase 28. Okt 2006 03:54

Re: ChangeDisplaySettings Hooken
 
Moin Peter,

seit 98/2000 gibt es noch die Funktion ChangeDisplaySettingsEx, und ich möchte mal stark annehmen, dass das Betriebssystem diese Funktion benutzt, wenn sie vorhanden ist.

x000x 28. Okt 2006 05:36

Re: ChangeDisplaySettings Hooken
 
Moin Christian,

das funktioniert auch nicht. Ich hab mal CounterStrike gestartet, auch dort
lässt sich die MessageBox nicht blicken.
Wie gesagt, aus einem anderen Delphi-Projekt aufgerufen, erscheint sie.

RobinHook 28. Okt 2006 07:06

Re: ChangeDisplaySettings Hooken
 
Von hinten durch die Brust ins Auge?

Mit nem Timer die Iconpositionen minütlich in einer INI speichern.

Das minütliche Speichern der Iconpositionen abhängig machen von ChangeDisplaySettings: If ChangeDisplaySettings then DoNotSave.

Das Programm zum Speichern muss wohl ständig laufen, damit es die Änderungen der Iconpositionen mitkriegt. Was wohl selbst bei nonVCL reichlich RAM verbrät. Also nicht Kleckern, sondern Klotzen!

RH

Flocke 28. Okt 2006 09:59

Re: ChangeDisplaySettings Hooken
 
Zitat:

Zitat von x000x
Ich hab mal CounterStrike gestartet, auch dort
lässt sich die MessageBox nicht blicken.

Ich denke mal, dass CS direkt per DirectX in den Fullscreen-Modus mit der gewünschten Auflösung wechselt und ChangeDisplaySettings/Ex überhaupt nicht aufruft.

Luckie 28. Okt 2006 11:26

Re: ChangeDisplaySettings Hooken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Christian Seehase
Moin Peter,

seit 98/2000 gibt es noch die Funktion ChangeDisplaySettingsEx, und ich möchte mal stark annehmen, dass das Betriebssystem diese Funktion benutzt, wenn sie vorhanden ist.

Das werde ich mal ausprobieren. Danke für den Hinweis.

Nein, das tut es auch nicht. :( Ich habe es so deklariert:
Delphi-Quellcode:
TChangeDisplaySettingsEx = function(DeviceName: PChar; var DevMode: DWORD; hWnd: THandle; flags: DWORD; Param: Pointer): Longint; stdcall;
Neue Version wieder im Anhang (acuh mit der geänderten Deklaration von ChangeDeviceSettings, keine Ahnung, wo ich meine her hatte).

Luckie 24. Mär 2007 17:09

Re: ChangeDisplaySettings Hooken
 
Hat sich das mal einer angeguckt?

Zacherl 27. Mai 2007 19:01

Re: ChangeDisplaySettings Hooken
 
Würde mich auch interessieren ..

turboPASCAL 27. Mai 2007 21:41

Re: ChangeDisplaySettings Hooken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Warum ein Hook und nicht WM_DISPLAYCHANGE verwenden bzw. belauschen ? :gruebel:

Zitat:

When the display mode is changed dynamically, the WM_DISPLAYCHANGE message is sent to all running applications with the following message parameters.

Zacherl 27. Mai 2007 22:00

Re: ChangeDisplaySettings Hooken
 
Naja, der Hook / die Message sollte VOR dem Ändern der Auflösung ausgelöst werden .. WM_DISPLAYCHANGE wird meines Wissens nach erst ausgelöst, nachdem sich die Auflösung geändert hat.

turboPASCAL 28. Mai 2007 08:23

Re: ChangeDisplaySettings Hooken
 
Zitat:

die Message sollte VOR dem Ändern der Auflösung ausgelöst werden
:wall: ja, sollte man.


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