Hello friends, a question.
I want to change the letter of a hard disk or usb memory ( example J: D: K: ).
I found this code, it compiles well but when running it shows error.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes,
SysUtils,
Forms,
Controls,
Graphics,
Dialogs,
ActiveX,
ComObj,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure ChangeDriveLetter(OldDrive,NewDrive:Char);
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_Volume Where DriveLetter=%s',[QuotedStr(OldDrive+':')]),'WQL',0);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
//Assign the New letter
FWbemObject.DriveLetter:=NewDrive+':';
//Apply the changes
FWbemObject.Put_();
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
CoInitialize(nil);
try
//This will change the letter of the drive E to Z
ChangeDriveLetter('E','Z');
finally
CoUninitialize;
end;
except
on E:Exception do
begin
ShowMessage(E.Classname+ ':'+ E.Message);
end;
end;
end;
end.
// code of https://theroadtodelphi.com/2011/02/25/change-the-drive-letter-using-wmi-and-delphi/
help me please