Einzelnen Beitrag anzeigen

API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#3

Re: systemwiederherstellungspunkt setzen

  Alt 11. Sep 2006, 22:27
Ich hab vor langer Zeit mal dies geschrieben:

1. Methode: Mit dem Microsoft Scripting Control:

Zitat:
Wenn du das Microsoft Scripting Control noch nicht installiert hast
(Komponente TScriptControl), dann kannst du hier runterladen:
http://www.msdn.microsoft.com/scripting/

Nach dem Herunterladen und der Installation wähle in der Delphi IDE unter dem
Menü "Komponente" den Menüpunkt "ActiveX importieren".
Dann in der Listbox "Microsoft Script Control 1.0" auswählen und "Installieren..."
anklicken.
Nun sollte die TScriptControl Komponente unter dem ActiveX Register zu finden sein.
Platziere nun eine TScriptControl Komponente und einen TButton auf einer Form und
schreibe im OnClick Ereignis des Buttons den folgenden Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sr: OLEVAriant;
begin
  ScriptControl1.Language := 'VBScript';
  sr := ScriptControl1.Eval('getobject("winmgmts:\\.\root\default:Systemrestore")');
  if sr.CreateRestorePoint('Automatic Restore Point', 0, 100) = 0 then
    ShowMessage('New Restore Point successfully created.')
    // Wiederherstellungspunkt erfolgreich erstellt
  else
    ShowMessage('Restore Point creation Failed!');
    // Wiederherstellungspunkt Erstellung fehlgeschlagen.
end;



2. Methode: Mit SRSetRestorePoint API from SrClient.dll:

Delphi-Quellcode:
// Translation from SRRestorePtAPI.h
const
 // Type of Event
 BEGIN_SYSTEM_CHANGE = 100;
 END_SYSTEM_CHANGE = 101;
 // Type of Restore Points
 APPLICATION_INSTALL = 0;
 CANCELLED_OPERATION = 13;
 MAX_DESC = 64;
 MIN_EVENT = 100;

// Restore point information
type
PRESTOREPTINFOA = ^_RESTOREPTINFOA;
_RESTOREPTINFOA = packed record
    dwEventType: DWORD; // Type of Event - Begin or End
    dwRestorePtType: DWORD; // Type of Restore Point - App install/uninstall
    llSequenceNumber: INT64; // Sequence Number - 0 for begin
    szDescription: array [0..MAX_DESC] of CHAR; // Description - Name of Application / Operation
end;
RESTOREPOINTINFO = _RESTOREPTINFOA;
PRESTOREPOINTINFOA = ^_RESTOREPTINFOA;

// Status returned by System Restore

PSMGRSTATUS = ^_SMGRSTATUS;
_SMGRSTATUS = packed record
    nStatus: DWORD; // Status returned by State Manager Process
    llSequenceNumber: INT64; // Sequence Number for the restore point
end;
STATEMGRSTATUS = _SMGRSTATUS;
PSTATEMGRSTATUS = ^_SMGRSTATUS;

function SRSetRestorePointA(pRestorePtSpec: PRESTOREPOINTINFOA; pSMgrStatus: PSTATEMGRSTATUS): Bool;
  stdcall; external 'SrClient.dllName 'SRSetRestorePointA';

// Example how to create and cancel a previous restore point.
// Ref: [url]http://tinyurl.com/78pv[/url]

procedure TForm1.Button1Click(Sender: TObject);
const
 CR = #13#10;
var
  RestorePtSpec: RESTOREPOINTINFO;
  SMgrStatus: STATEMGRSTATUS;
begin
  // Initialize the RESTOREPOINTINFO structure
  RestorePtSpec.dwEventType := BEGIN_SYSTEM_CHANGE;
  RestorePtSpec.dwRestorePtType := APPLICATION_INSTALL;
  RestorePtSpec.llSequenceNumber := 0;
  RestorePtSpec.szDescription := 'SAMPLE RESTORE POINT';

  if (SRSetRestorePointA(@RestorePtSpec, @SMgrStatus)) then
  begin
    ShowMessage('Restore point set. Restore point data:' + CR+
      'Sequence Number: ' + Format('%d', [SMgrStatus.llSequenceNumber]) + CR+
      'Status: ' + Format('%u', [SMgrStatus.nStatus]));

      // Restore Point Spec to cancel the previous restore point.
      RestorePtSpec.dwEventType := END_SYSTEM_CHANGE;
      RestorePtSpec.dwRestorePtType := CANCELLED_OPERATION;
      RestorePtSpec.llSequenceNumber := SMgrStatus.llSequenceNumber;

      // This is the sequence number returned by the previous call.
      // Canceling the previous restore point
      if (SRSetRestorePointA(@RestorePtSpec, @SMgrStatus)) then
        ShowMessage('Restore point canceled. Restore point data:' + CR+
        'Sequence Number: ' + Format('%d', [SMgrStatus.llSequenceNumber]) + CR+
        'Status: ' + Format('%u', [SMgrStatus.nStatus]))

      else
        ShowMessage('Couldn''t cancel restore point.');
    end
    else
      ShowMessage('Couldn''t set restore point.');
  end;
end;
  Mit Zitat antworten Zitat