Hallo, allerseits,
es gibt an verschiedenen Stellen bereits einige Threads dazu, aber irgendwie keine Loesung:
Wenn ich in Delphi Registrierungswerte fuer Explorereinstellungen aendere, dann merkt das der Explorer nicht. Erst, wenn man ihn mit F5 aktualisiert (oder: sich ab- und anmeldet), ist alles richtig. Logisch: er ist ja immer aktiv, also muss ich ihn "kicken", damit er schneidet, dass etwas geschehen ist. Nur wie?
Die verschiedenen Threads beschreiben viele Loesungen, einige habe ich ausprobiert:
Delphi-Quellcode:
program RegEdit_TPS;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Windows, Messages, Registry, ShlObj;
var RegObj : TRegistry;
R : Integer;
wndMain: HWND;
begin
try
{ TODO -oUser -cConsole Main : Code hier einfügen }
RegObj := TRegistry.Create;
RegObj.RootKey := $80000001;
if RegObj.OpenKey ('
\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', false)
then
begin
RegObj.WriteInteger ('
HideFileExt',0);
// Versuche ueber Settingchange
Sendmessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0,
SMTO_ABORTIFHUNG, 100, @R );
// Versuch ueber SHChangeNotify
SHChangeNotify(SHCNE_GLOBALEVENTS,SHCNF_NOTIFYRECURSIVE + SHCNF_FLUSH,
nil,
nil);
// Versuch ueber SystemParametersInfo
SystemParametersInfo (SPI_SETDESKWALLPAPER,0,
nil,SPIF_SENDWININICHANGE);
// ... und das Explorerfenster wird auch nicht gefunden
wndMain := FindWindow('
explorer.exe',
nil);
if wndMain <> 0
then
PostMessage(wndMain, WM_KEYDOWN, VK_F5, 0)
else
Messagebox (0, '
huhu','
huhu',0);
end;
RegObj.Free;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Funktionieren tuts allerdings alles nicht: Die Funktion (hier: Erweiterungen einblenden) kommt erst nach F5. Das ist zwar besser als nie, aber ich haette es eben gerne gleich...
Hat Jemand eine Idde oder einen Link, den ich nicht gefunden habe?
Gruesse
ScotsMan