Fonte: www.activedelphi.com.br
Veja nesta dica uma aplicação console com o código fonte de exemplo para se alterar a letra de unidade de disco (volume) através do WMI. A chave é usar a classe Win32_Volume e alterar a propriedade DriverLetter. Esta propriedade é de leitura e escrita, sendo assim, podemos atualiza-la diretamente e então chamar o método Put_ do objeto SWbemObject.
Para rodar o programa e fazer os testes, solicite no Delphi uma nova "Console Application", apague todo o seu conteúdo e coloque o código abaixo:
program ChangeVolumeLetter_WMI;
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj;
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
//Define a nova letra
FWbemObject.DriveLetter:=NewDrive+':';
//Aplica as mudanças
FWbemObject.Put_();
end;
end;
begin
try
CoInitialize(nil);
try
//Mudará a letra da unidade E para Z
ChangeDriveLetter('E','Z');
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.
Aí é só rodar e conferir a letra da unidade modificada, neste exemplo, alterando a unidade E para Z.
Algumas explicações na internet (em inglês):
WMI - Windows Management Instrumentation
Win32_Volume
Método Put_
SWbemObject
Veja nesta dica uma aplicação console com o código fonte de exemplo para se alterar a letra de unidade de disco (volume) através do WMI. A chave é usar a classe Win32_Volume e alterar a propriedade DriverLetter. Esta propriedade é de leitura e escrita, sendo assim, podemos atualiza-la diretamente e então chamar o método Put_ do objeto SWbemObject.
Para rodar o programa e fazer os testes, solicite no Delphi uma nova "Console Application", apague todo o seu conteúdo e coloque o código abaixo:
program ChangeVolumeLetter_WMI;
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj;
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
//Define a nova letra
FWbemObject.DriveLetter:=NewDrive+':';
//Aplica as mudanças
FWbemObject.Put_();
end;
end;
begin
try
CoInitialize(nil);
try
//Mudará a letra da unidade E para Z
ChangeDriveLetter('E','Z');
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.
Aí é só rodar e conferir a letra da unidade modificada, neste exemplo, alterando a unidade E para Z.
Algumas explicações na internet (em inglês):
WMI - Windows Management Instrumentation
Win32_Volume
Método Put_
SWbemObject
Nenhum comentário:
Postar um comentário