Autor Beitrag
mb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Mo 16.06.03 20:44 
Hallo!

Ich öffne noch mal einen neues Thema, dann beteiligen sich vielleicht auch doch noch andere mit.

Es geht darum, dass ich Änderungen (Systemeinstellungen, Registry, etc.) sofort für alle offnen Programme wirksam machen möchte. Also so, dass z.B. die Shell (Explorer, ...) die Einstellungen aktualisiert.

Unter Windows gibt es nun ja viele Message-Möglichkeiten. Ich möchte unter Windows XP eine solche Nachricht (dass sich Systemeinstellungen geändert haben) an alle Anwendungen schicken und VOR ALLEM erreichen, dass die Shell die Einstellungen für sich sofort aktualisiert.

Das sollte irgendwie mit der Message WM_SETTINGCHANGE funktionieren.

Nur welche Message-Methode ist die richtige? Es gibt auch einen DLL-Aufruf (shell32.dll) der SHChangeNotify heißt. Nur wie binde ich diesen korrekt in Delphi ein?? (Für C++/c# gibt es die entsprechenden Bibliotheken; habe ich gelesen)

Wäre prima, wenn jemand eine Idee hat.

Denn wie Markus geschrieben hat...
DaFox hat folgendes geschrieben:

Ich habe schon vieles gelesen, dass Leute damit nicht zurecht kamen (sprich: es funktionierte eben nicht).

...scheinen mehrere damit Probleme zu haben.

Prima wäre auch, wenn ihr Links hättet, zu Übersichten, wo alle WM_xxx-Messages und die Sub-Messages bzw. Parameter für die Messages aufgeführt sind.

Oder gibt es entsprechende Delphi-Komponenten, die das erledigen??

Oder ganz andere Ideen?

_________________
Gruß,
MB
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.06.03 21:19 
An einem Beispiel, das oft gefragt wird
User XY hat folgendes geschrieben:
Wie kann ich es machen, dass eine Datei beim Klick im Explorer in meinem Programm geöffnet wird.

Lösung: Dateityp in der Registry erstellen. Meist mit eigenen Icons, usw. Willst du die Änderungen sofort wirksam machen, sieht das so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
uses
  ShlObj;

// mächtig viel Code zum Eintragen des Typs
{ ... }

// und ab
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);

In der Delphi-Hilfe wirst du dazu wahrscheinlich nicht allzu viel finden, darum empfehle ich dir einen Blick ins MSDN, oder du ziehst dir das PSDK runter, dann kannst du offline stöbern.
mb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Di 17.06.03 15:14 
Danke. Leider zeigt das bei mir absolut keine Wirkung. Auch nicht, wenn ich SHCNE_ALLEVENTS übergebe...

Gibt es denn eine gute Übersicht mit Beschreibungen dieser Konstanten?



Und: Wenn man in WinXP z.B. den Typ des Startmenüs umschaltet (klassisches Startmenü vs. Startpanel), was führt WinXP dann speziell aus, bzw. welche Messages werden gesendet, damit der laufender Explorer / Shell aktualisiert wird? Kann man das irgendwie einfach rausbekommen??

_________________
Gruß,
MB
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Di 17.06.03 17:41 
mb hat folgendes geschrieben:

Gibt es denn eine gute Übersicht mit Beschreibungen dieser Konstanten?


Siehe Mathias' Rat: MSDN

mb hat folgendes geschrieben:

Kann man das irgendwie einfach rausbekommen??


Wieso denn unbedingt einfach? :wink:
Benutz' mal Spy++ oder ähnliche Programme (Hi Motzi! :) )

Andere Frage: Was ist denn Dein konkretes Ziel?

Gruß,
Markus
mb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 185



BeitragVerfasst: Mi 18.06.03 13:15 
Ok, also die Konstanten in der MSDN hatte ich bereits gefunden, die verwende ich auch sowieso. Aber es fehlt eben mal ein konkretes Beispiel - z.B. an Hand der Aufgabenstellung, die ich selbst formuliert habe.

Denn einen Dateityp zu registrieren ist irgendwie primitiver, als dem Explorer klar zu machen, dass er ab sofort ein anderes Startmenü (Startmenü vs. Panel) verwenden soll.

Ich werde mir Spy++ mal ansehen. Wenn jemand noch eine andere Idee hat: immer her damit.

_________________
Gruß,
MB