Fichier caché - Delphi/Pascal - Programmation
Marsh Posté le 20-07-2005 à 12:34:45
HAAAAA, je crois qu'une clé dans la BDR s'en occupe, mais je ne souviens plus de laquelle. 
J'suis au travail et pas possible de regarde ma BDR. 
Regarde avec un sniffer de BDR, fait la modif afin de répérer la clé et le tour est joué.
Marsh Posté le 22-07-2005 à 18:29:19
J'ai trouvé la clé c'est HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden 
 
mais j'arrive pas a la modifier en "dword" delphi ne la fait modifier qu'en "String" du coup ça marche pas
Marsh Posté le 22-07-2005 à 18:49:54
Probleme resolu : voici mon programme  
unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, Registry; 
 
type 
  TForm1 = class(TForm) 
    Button1: TButton; 
    Button2: TButton; 
    Button3: TButton; 
    procedure Button1Click(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
    procedure Button3Click(Sender: TObject); 
  private 
    { Déclarations privées } 
  public 
    { Déclarations publiques } 
  end; 
 
var 
  Form1: TForm1; 
  Registre: TRegistry; 
 
implementation 
 
{$R *.dfm} 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced',True); 
Registre.WriteInteger('Hidden',1); 
Registre.CloseKey; 
 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
Registre := TRegistry.Create; 
Registre.RootKey := HKEY_CURRENT_USER; 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced',True); 
Registre.WriteInteger('Hidden',2); 
Registre.CloseKey; 
end; 
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
begin 
Registre.Free; 
end; 
end.
Marsh Posté le 22-07-2005 à 20:42:40
Puisque c'est un Boolean pourquoi utiliser WriteInteger ? 
Y'a aussi: WriteBool(constName:String;Value:Boolean); 
 
Sans cela, je te propose une petite amélioration afin faire un monytoring de BDR depuis un TThread: 
 
unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, Registry; 
 
const 
  WM_REGCHANGE  = WM_USER + 1973; 
 
function RegNotifyChangeKeyValue(hKey: HKEY; bWatchSubtree: DWORD; dwNotifyFilter: DWORD; hEvent: THandle; fAsynchronus: DWORD): Longint; stdcall; 
external 'advapi32.dll' name 'RegNotifyChangeKeyValue'; 
 
type 
  TChangeData = record 
    Key : string; 
    RootKey : HKey; 
  end; 
 
  TRegMonitorThread = class(TThread) 
  private 
    FReg: TRegistry; 
    FEvent: Integer; 
    fChangeData : TChangeData; 
 
    fKey: string; 
    fRootKey: HKey; 
    fWatchSub: boolean; 
    fFilter: integer; 
    fWnd: THandle; 
 
    procedure InitThread; 
 
    procedure SetFilter(const Value: integer); 
    function GetFilter: integer; 
    function GetChangeData: TChangeData; 
  public 
    constructor Create; 
    destructor Destroy; override; 
    property Key: string        read fKey       write fKey; 
    property RootKey: HKey      read fRootKey   write fRootKey; 
    property WatchSub: boolean  read fWatchSub  write fWatchSub; 
    property Filter: integer    read GetFilter  write SetFilter; 
    property Wnd: THandle       read fWnd       write fWnd; 
 
    property ChangeData : TChangeData read GetChangeData; 
  protected 
    procedure Execute; override; 
  end; 
 
 
  TForm1 = class(TForm) 
    Memo1: TMemo; 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
  private 
    { Déclarations privées } 
    RegMonitorThread : TRegMonitorThread; 
    procedure WMREGCHANGE(var Msg : TMessage); message WM_REGCHANGE; 
  public 
    { Déclarations publiques } 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
{ TRegMonitorThread } 
constructor TRegMonitorThread.Create; 
begin 
  inherited Create(True); 
 
  FReg := TRegistry.Create; 
end; 
 
destructor TRegMonitorThread.Destroy; 
begin 
  FReg.Free; 
  inherited; 
end; 
 
procedure TRegMonitorThread.InitThread; 
begin 
  FReg.RootKey := HKEY_CURRENT_USER; 
  if not FReg.OpenKeyReadOnly(Key) then 
  begin 
    raise Exception.Create('La clé doit exister !' + Key); 
  end; 
  FEvent := CreateEvent(nil, True, False, 'RegMonitorChange'); 
  RegNotifyChangeKeyValue(FReg.CurrentKey, 1, Filter, FEvent, 1); 
end; 
 
procedure TRegMonitorThread.Execute; 
begin 
  InitThread; 
 
  while not Terminated do 
  begin 
    if WaitForSingleObject(FEvent, INFINITE) = WAIT_OBJECT_0 then 
    begin 
      fChangeData.RootKey := RootKey; 
      fChangeData.Key := Key; 
      SendMessage(Wnd, WM_REGCHANGE, RootKey, LongInt(PChar(Key))); 
      ResetEvent(FEvent); 
 
      RegNotifyChangeKeyValue(FReg.CurrentKey, 1, Filter, FEvent, 1); 
    end; 
  end; 
end; 
 
 
 
procedure TRegMonitorThread.SetFilter(const Value: integer); 
begin 
  if fFilter <> Value then 
  begin 
    fFilter := Value; 
  end; 
end; 
 
function TRegMonitorThread.GetFilter: integer; 
begin 
  if fFilter = 0 then begin 
    fFilter:= 
      REG_NOTIFY_CHANGE_NAME or 
      REG_NOTIFY_CHANGE_ATTRIBUTES or 
      REG_NOTIFY_CHANGE_LAST_SET or 
      REG_NOTIFY_CHANGE_SECURITY; 
  end; 
  Result := fFilter; 
end; 
 
function TRegMonitorThread.GetChangeData: TChangeData; 
begin 
  Result := fChangeData; 
end; 
 
 
 
procedure TForm1.WMREGCHANGE(var Msg: TMessage); 
begin 
 with Memo1.Lines do 
 begin 
  Add('-----------------------------------'); 
  Add('Cahngement de la BDR ' + DateTimeToStr(Now)); 
  Add(IntToStr(RegMonitorThread.ChangeData.RootKey) + 
      ' - ' + RegMonitorThread.ChangeData.Key); 
 end; 
end; 
 
 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  RegMonitorThread := TRegMonitorThread.Create; 
  with RegMonitorThread do 
  begin 
    FreeOnTerminate:=True; 
    Wnd := Form1.Handle; 
    Key := 'Software\BVTK'; /// ATTENTION CETTE DOIT ETRE EXISTANTE 
    RootKey := HKEY_LOCAL_MACHINE; 
    WatchSub := True; 
    Resume; 
  end; 
 
end; 
 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  RegMonitorThread.Terminate; 
 
end; 
 
end. 
Marsh Posté le 23-07-2005 à 18:47:10
Mamannnnnnnnnnn, je suis encore pas de ce niveau là. piuuuu la vacheeeeee. Merci beaucoup kand memeee
Marsh Posté le 19-07-2005 à 17:37:13
Bonjour !
 
 
Y a t'il un moyen à partir d'une application delphi de changer une option dans l'explorateur de windows ! ce que je veus moi c'est désactiver ou activer l'affichage des fichiers cachés
Merci d'avance.