-1

システムの復元の監視を有効にするコードを見つけましたが、これは C# 用であり、Delphi に変換する必要があります。コードは次のとおりです。

ManagementScope scope = new ManagementScope("\\\\localhost\\root\\default");
ManagementPath path = new ManagementPath("SystemRestore");
ObjectGetOptions options = new ObjectGetOptions();
ManagementClass process = new ManagementClass(scope, path, options);
ManagementBaseObject inParams = process.GetMethodParameters("Enable");
inParams["WaitTillEnabled"] = true;
inParams["Drive"] = osDrive;
ManagementBaseObject outParams = process.InvokeMethod("Enable", inParams, null);

上記のコードを Delphi に変換するのを手伝ってくれる人はいますか?

4

1 に答える 1

3

次の関数は、指定されたドライブの監視が有効になっている場合はTrueを返しSystem Restore、それ以外の場合はFalseを返します。入力ADriveパラメータとして、監視するフルドライブパスを指定します。このパラメータがシステムドライブまたは空の文字列の場合、すべてのドライブが監視されます。この関数は、監視が完全に有効になるのを待たずに戻ります。代わりに、システムの復元サービスとフィルタードライバーを開始した直後に戻ります。

function EnableSystemRestore(const ADrive: string): Boolean;
var
  WbemObject: OleVariant;
  WbemService: OleVariant;
  WbemLocator: OleVariant;
begin;
  Result := False;
  try
    WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    WbemService := WbemLocator.ConnectServer('localhost', 'root\DEFAULT');
    WbemObject := WbemService.Get('SystemRestore');
    Result := WbemObject.Enable(ADrive) = S_OK;
  except
    on E: EOleException do
      ShowMessage(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
    on E: Exception do
      ShowMessage(E.Classname + ':' + E.Message);
  end;
end;

そして使用法:

procedure TForm1.Button1Click(Sender: TObject);
begin;
  if not EnableSystemRestore('D:\') then
    ShowMessage('Failed!')
  else
    ShowMessage('Succeeded!');
end;
于 2012-12-17T11:36:29.770 に答える