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.