Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создать Системную Точку Восстановления (XP)

Delphi , ОС и Железо , Windows

Создать Системную Точку Восстановления (XP)

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  If you haven't installed the Microsoft Scripting Control yet 
  (TScriptControl component), 
  get it from http://www.msdn.microsoft.com/scripting/ 

  Once you've downloaded and run the installation, start Delphi and go to the 
  Component | Import ActiveX Control... menu. 
  Select "Microsoft Script Control 1.0" from the Listbox amd click "Install" 
  to install the component into Delphi's palette. 
  What you should end up with now is a TScriptControl component on your ActiveX tab. 
  Start a new application, and drop a TButton, and a TScriptControl onto the main form. 
  In the OnClick event of Button1, put the following code: 
}


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

  Nachdem Herunterladen und der Installation wahle in der Delphi IDE unter dem 
  Menu "Komponente" den Menupunkt "ActiveX importieren". 
  Dann in der Listbox "Microsoft Script Control 1.0" auswahlen und "Installieren..." 
  anklicken. 
  Nun sollte die TScriptControl Komponente unter dem ActiveX Register zu finden sein. 
  Plaziere nun eine TScriptControl Komponente und einen TButton auf einer Form und 
  schreibe im OnClick Ereignis des Buttons den folgenden Code: 
}

 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. Using the SRSetRestorePoint() API from SrClient.dll}

 // 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.dll' Name 'SRSetRestorePointA';

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

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;

Перевод контента на русский язык:

Код, предоставленный ниже, создает точку восстановления системы (SR) с помощью двух различных методов: Microsoft Scripting Control и SRSetRestorePoint() API из SrClient.dll.

Метод 1: Использование Microsoft Scripting Control

Этот метод использует VBScript для взаимодействия с пространством имен Windows Management Instrumentation (WMI). Функция getobject используется для получения объекта, представляющего собой службу System Restore, а затем метод Eval используется для выполнения скрипта, создавшего новый точку восстановления.

Код создает компоненты TButton и TScriptControl на форме и в событии OnClick кнопки устанавливает язык ScriptControl-компонента на VBScript и оценивает скрипт, создавший новую точку восстановления с именем "Automatic Restore Point".

Метод 2: Использование SRSetRestorePoint() API из SrClient.dll

Этот метод использует функцию SRSetRestorePoint() из библиотеки SrClient.dll для создания и отмены предыдущей точки восстановления. Функция принимает два параметра: pRestorePtSpec, указатель на структуру RESTOREPOINTINFO, которая specifies properties of the restore point, and pSMgrStatus, указатель на структуру STATEMGRSTATUS, которая получает информацию о статусе точки восстановления.

Код инициализирует структуру RESTOREPOINTINFO с желаемыми значениями для точки восстановления, такими как тип события (BEGIN_ SYSTEM_CHANGE), тип точки восстановления (APPLICATION_INSTALL), последовательный номер (0) и описание ("SAMPLE RESTORE POINT").

Функцию SRSetRestorePointA вызывается для создания новой точки восстановления. Если функция успешна, отображается сообщение об информации о созданной точке восстановления.

Затем код отменяет предыдущую точку восстановления, установив тип события в END_ SYSTEM_CHANGE и тип точки восстановления в CANCELLED_OPERATION. Последовательный номер устанавливается в значение, возвращенное предыдущим вызовом функции SRSetRestorePointA.

Если отмена успешна, отображается сообщение об информации о отмененной точке восстановления. Если отмена неудачна, отображается сообщение об ошибке.

Улучшения

  1. Обработка ошибок: Оба метода не обрабатывают ошибки должным образом. В Методе 1, если выполнение скрипта fails, оно будет вызывать исключение. В Методе 2, если функция SRSetRestorePointA fails, она возвращает булевое значение, указывающее на неудачу, но не предоставляет никакой информации о ошибке.
  2. Организация кода: Код смешан с комментариями и описаниями. Лучше было бы разделить код на отдельные процедуры или функции для каждого метода и включать комментарии только там, где это необходимо.
  3. Названия переменных: Некоторые имена переменных не являются достаточно описательными. Например, sr могло быть переименовано в scriptResult, а SMgrStatus - в status.
  4. Форматирование кода: Код не форматируется согласно единообразному шаблону. Лучше было бы использовать единообразный шаблон отступов и переноса строк.
  5. Альтернативные решения: Вместо использования Microsoft Scripting Control или SRSetRestorePoint() API можно создать точку восстановления с помощью других методов, таких как Windows Restore Point API (RPSAPI.h) или третьих-сторонних библиотек.

В примере ниже показано, как код мог быть улучшен:

type
  TSystemRestore = class
    procedure CreateRestorePoint(const Description: string);
    procedure CancelPreviousRestorePoint;
  end;

var
  SystemRestore: TSystemRestore;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SystemRestore := TSystemRestore.Create;
  try
    SystemRestore.CreateRestorePoint('Automatic Restore Point');
    ShowMessage('New restore point created.');
  except
    on E: Exception do
      ShowMessage('Error creating restore point: ' + E.Message);
  end;
  finally
    FreeAndNil(SystemRestore);
  end;
end;

procedure TSystemRestore.CreateRestorePoint(const Description: string);
begin
   // Create a new restore point using SRSetRestorePointA API
  var
    RestorePtSpec: RESTOREPOINTINFO;
    SMgrStatus: STATEMGRSTATUS;
  begin
    RestorePtSpec.dwEventType := BEGIN_SYSTEM_CHANGE;
    RestorePtSpec.dwRestorePtType := APPLICATION_INSTALL;
    RestorePtSpec.llSequenceNumber := 0;
    RestorePtSpec.szDescription := Description;

    if SRSetRestorePointA(@RestorePtSpec, @SMgrStatus) then
      ShowMessage('Restore point created.')
    else
      ShowMessage('Error creating restore point.');
  end;
end;

procedure TSystemRestore.CancelPreviousRestorePoint;
begin
   // Cancel the previous restore point using SRSetRestorePointA API
  var
    RestorePtSpec: RESTOREPOINTINFO;
    SMgrStatus: STATEMGRSTATUS;
  begin
    RestorePtSpec.dwEventType := END_SYSTEM_CHANGE;
    RestorePtSpec.dwRestorePtType := CANCELLED_OPERATION;
    RestorePtSpec.llSequenceNumber := PreviousSequenceNumber;

    if SRSetRestorePointA(@RestorePtSpec, @SMgrStatus) then
      ShowMessage('Previous restore point canceled.')
    else
      ShowMessage('Error canceling previous restore point.');
  end;
end;

В улучшенном коде используется отдельный класс TSystemRestore для обертывания логики создания и отмены точек восстановления. Он также включает обработку ошибок с помощью блоков try-except и согласованное назвование переменных и форматирование кода.

Создать Системную Точку Восстановления (XP) для создания и удаления точек восстановления в системе Windows XP.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:16:08/0.0058279037475586/1