Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Скрытие дисков в проводнике


Автор: olbolab 7.7.2007, 15:36
Здраствуйте уважаемые програмисты, есть трабла, по сути код приведенный ниже должен скрывать диски в проводнике, но при скрытии дисков выскакивает ошибка. Проверте, правильно ли написан код:

 
Код

procedure TForm1.hideallClick(Sender: TObject);
var i:byte;
begin
 if hideall.Checked=true then
  begin
   rg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false);
   rg.WriteInteger('NoDrives',67108863);
   rg.CloseKey;
   showall.Checked:=false;
   for i:=0 to 25 do hide.Checked[i]:=true;
  end

end;

procedure TForm1.showallClick(Sender: TObject);
var i:byte;
begin
 if showall.Checked=true then
  begin
   rg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false);
   rg.WriteInteger('NoDrives',0);
   rg.CloseKey;
   hideall.Checked:=false;
   for i:=0 to 25 do hide.Checked[i]:=false;
  end

end;

procedure TForm1.hddrvClick(Sender: TObject);
function summator:integer;
var s:integer;
begin
 s:=0;
 if hide.Checked[25]=true then s:=s+33554432;
 if hide.Checked[24]=true then s:=s+16777216;
 if hide.Checked[23]=true then s:=s+8388608;
 if hide.Checked[22]=true then s:=s+4194304;
 if hide.Checked[21]=true then s:=s+2097152;
 if hide.Checked[20]=true then s:=s+1048576;
 if hide.Checked[19]=true then s:=s+524288;
 if hide.Checked[18]=true then s:=s+262144;
 if hide.Checked[17]=true then s:=s+131072;
 if hide.Checked[16]=true then s:=s+65536;
 if hide.Checked[15]=true then s:=s+32768;
 if hide.Checked[14]=true then s:=s+16384;
 if hide.Checked[13]=true then s:=s+8192;
 if hide.Checked[12]=true then s:=s+4096;
 if hide.Checked[11]=true then s:=s+2048;
 if hide.Checked[10]=true then s:=s+1024;
 if hide.Checked[9]=true then s:=s+512;
 if hide.Checked[8]=true then s:=s+256;
 if hide.Checked[7]=true then s:=s+128;
 if hide.Checked[6]=true then s:=s+64;
 if hide.Checked[5]=true then s:=s+32;
 if hide.Checked[4]=true then s:=s+16;
 if hide.Checked[3]=true then s:=s+8;
 if hide.Checked[2]=true then s:=s+4;
 if hide.Checked[1]=true then s:=s+2;
 if hide.Checked[0]=true then s:=s+1;
 result:=s
end;
begin
 rg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',false);
 rg.WriteInteger('NoDrives',summator);
 rg.CloseKey

end;

procedure TForm1.Label3MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
label3.Font.style:=[fsUnderline,fsBold];
label3.Font.Color:= $00804000;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
label3.Font.style:=[];
label3.Font.Color:= clblack;
end;

Автор: Alexeis 7.7.2007, 17:01
  Не знаю как там на счет ошибок, но функцию function summator:integer; - можно легко упростить до

Код

function summator : integer;
var
  i : integer;
begin
 result := 0;
 for i := 0 to 25
 do
   if hide.Checked[i] then result := result + (1 shl i);
end;


Кстати у меня этот код работает. Проверял
Код

uses Registry;

procedure TForm1.FormCreate(Sender: TObject);
var
  r : TRegistry;
begin
  r := TRegistry.Create;
  r.RootKey := HKEY_CURRENT_USER;
  r.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', false);
  r.WriteInteger('NoDrives',67108863);
  r.CloseKey;
  r.Free;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)