AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Aktualisierung der Einstellungen im Windows Explorer
Thema durchsuchen
Ansicht
Themen-Optionen

Aktualisierung der Einstellungen im Windows Explorer

Ein Thema von ScotsMan · begonnen am 4. Feb 2014 · letzter Beitrag vom 5. Feb 2014
Antwort Antwort
ScotsMan

Registriert seit: 1. Nov 2006
Ort: Leipzig
13 Beiträge
 
Delphi XE5 Professional
 
#1

Aktualisierung der Einstellungen im Windows Explorer

  Alt 4. Feb 2014, 14:37
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
$ route add default roma.it
  Mit Zitat antworten Zitat
ScotsMan

Registriert seit: 1. Nov 2006
Ort: Leipzig
13 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Aktualisierung der Einstellungen im Windows Explorer

  Alt 5. Feb 2014, 15:01
Hallo, nochmals,

nach ewigem Herumsuchen und einigen Hinweisen im Auto-IT-Forum habe ich nun die Message gefunden, die wohl die Aktualisierung anschiebt. Nur das richtige Fenster war noch ein Problem, da habe ich jetzt schamlos bei Jemandem geklaut, der bei Luckie geklaut hat...

Delphi-Quellcode:
program RegEdit_TPS;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Windows, Messages, Registry, ShlObj;

procedure ProvideExplorerOptions;
var
   Progman: HWND;

   function EnumDefViewProc(Wnd: HWND; out DefView: HWND): BOOL; stdcall;
   begin
     PostMessage(Wnd, WM_Command, 28931, 0);
     Result := true;
   end;

begin
   Progman := FindWindow('ProgMan', nil);
   If Progman <> 0 then
     begin
       PostMessage(ProgMan, WM_Command, 28931, 0);
       EnumChildWindows(ProgMan, @EnumDefViewProc, 0);
     end;
   Progman := FindWindow('WorkerW', nil);
   If Progman <> 0 then
     begin
       PostMessage(ProgMan, WM_Command, 28931, 0);
       EnumChildWindows(ProgMan, @EnumDefViewProc, 0);
     end;
end;

var RegObj : TRegistry;
    R : Integer;

begin
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
    Writeln ('Providing Explorer Options...');
    Writeln ('Please wait...');
    RegObj := TRegistry.Create;
    RegObj.RootKey := $80000001;
    if RegObj.OpenKey ('\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', false) then
      begin
        RegObj.WriteInteger ('HideFileExt',0);
// hier weitere Optionen festlegen...
    //
// 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);
        SHChangeNotify(SHCNE_ASSOCCHANGED,0,NIL,NIL);
// Versuch ueber SystemParametersInfo
        SystemParametersInfo (SPI_SETDESKWALLPAPER,0, nil,SPIF_SENDWININICHANGE);
// ... und das Explorerfenster mit allen Unterfenstern ansprechen
       ProvideExplorerOptions;
      end;
    RegObj.Free;
  except
    on E: Exception do
      begin
       Writeln ('Error during search');
       Writeln(E.ClassName, ': ', E.Message);
      end;
  end;
end.
Der Text oben scheint zumindest zu helfen. Bemerkungen sind willkommen, _mir_ ist erstmal geholfen, weil nun jeder sich neu Anmeldende definitiv wieder die Dateierweiterungen sieht, egal, was er eingestellt hat.

Gruesse
ScotsMan
$ route add default roma.it
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 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