Subversion Repositories recyclebinunit

Rev

Rev 23 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit Main;
  2.  
  3. // TODO: Also include BC++ Versions
  4. {$IFNDEF BCB}
  5. {$DEFINE DEL1UP}
  6. {$IFNDEF VER80}
  7. {$DEFINE DEL2UP}
  8. {$IFNDEF VER90}
  9. {$DEFINE DEL3UP}
  10. {$IFNDEF VER100}
  11. {$DEFINE DEL4UP}
  12. {$IFNDEF VER120}
  13. {$DEFINE DEL5UP}
  14. {$IFNDEF VER130}
  15. {$DEFINE DEL6UP}
  16. {...}
  17. {$ENDIF}
  18. {$ENDIF}
  19. {$ENDIF}
  20. {$ENDIF}
  21. {$ENDIF}
  22. {$ENDIF}
  23.  
  24. {$IFDEF DEL6UP}
  25. {$WARN UNIT_PLATFORM OFF}
  26. {$ENDIF}
  27.  
  28. interface
  29.  
  30. uses
  31.   Windows, SysUtils, Forms, Controls, StdCtrls,
  32.   ExtCtrls, Classes, Dialogs;
  33.  
  34. type
  35.   TMainForm = class(TForm)
  36.     openDialog: TOpenDialog;
  37.     outputMemo: TMemo;
  38.     topPanel: TPanel;
  39.     rightPanel: TPanel;
  40.     btnReadOwnRecyclers: TButton;
  41.     leftPanel: TPanel;
  42.     btnReadRecyclerFile: TButton;
  43.     outputPanel: TPanel;
  44.     saveDialog: TSaveDialog;
  45.     btnShowConfig: TButton;
  46.     btnSaveTextDump: TButton;
  47.     procedure btn_read_click(Sender: TObject);
  48.     procedure btn_readown_click(Sender: TObject);
  49.     procedure btnSaveTextDumpClick(Sender: TObject);
  50.     procedure btnShowConfigClick(Sender: TObject);
  51.   public
  52.     procedure ReadRecycler(filename: string);
  53.   end;
  54.  
  55. var
  56.   MainForm: TMainForm;
  57.  
  58. implementation
  59.  
  60. uses
  61.   RecyclerFunctions;
  62.  
  63. {$R *.dfm}
  64.  
  65. function _BoolToEnabledDisabled(b: boolean): string;
  66. begin
  67.   if b then
  68.     result := 'Enabled'
  69.   else
  70.     result := 'Disabled';
  71. end;
  72.  
  73. function _BoolToYesNo(b: boolean): string;
  74. begin
  75.   if b then
  76.     result := 'Yes'
  77.   else
  78.     result := 'No';
  79. end;
  80.  
  81. {$IFNDEF DEL6UP}
  82. // Only available since Delphi 6
  83. function DirectoryExists(const directory: string): boolean;
  84. var
  85.   attr: integer;
  86. begin
  87.   attr := getfileattributes(pchar(directory));
  88.   result := (attr <> -1) and (file_attribute_directory and attr <> 0);
  89. end;
  90. {$ENDIF}
  91.  
  92. procedure TMainForm.ReadRecycler(filename: string);
  93. var
  94.   x: TStringList;
  95.   i: integer;
  96.   tmp, fn: string;
  97. begin
  98.   outputMemo.Visible := false;
  99.   application.ProcessMessages;
  100.  
  101.   if (uppercase(copy(extractfilename(filename), 0, 2)) = '$I') or
  102.      (uppercase(copy(extractfilename(filename), 0, 2)) = '$R') then
  103.   begin
  104.     outputMemo.Lines.Add('Reading directory:');
  105.     tmp := extractfilepath(filename);
  106.   end
  107.   else
  108.   begin
  109.     tmp := filename;
  110.     if directoryexists(tmp) then
  111.       outputMemo.Lines.Add('Reading directory:')
  112.     else
  113.       outputMemo.Lines.Add('Reading file:');
  114.   end;
  115.  
  116.   outputMemo.Lines.Add(tmp);
  117.   outputMemo.lines.add('');
  118.  
  119.   if not RecyclerIsValid(filename) then
  120.   begin
  121.     outputMemo.lines.add('Recycler is not valid.');
  122.     outputMemo.lines.add('');
  123.   end
  124.   else
  125.   begin
  126.     x := TStringList.Create;
  127.     try
  128.       RecyclerListIndexes(filename, x);
  129.       if x.Count = 0 then
  130.       begin
  131.         outputMemo.lines.add('No items available.');
  132.         outputMemo.lines.add('');
  133.       end;
  134.       for i := 0 to x.Count - 1 do
  135.       begin
  136.         fn := RecyclerCurrentFilenameAndPath(tmp, x[i]);
  137.         outputMemo.lines.add(inttostr(i+1)+'. Entry');
  138.         outputMemo.lines.add('# Unique ID: ' + changefileext(x[i], ''));
  139.         outputMemo.lines.add('# Recycler filename: '+fn);
  140.  
  141.         if fileexists(fn) then
  142.           outputMemo.lines.add('  -> Found')
  143.         else
  144.           outputMemo.lines.add('  -> Not found');
  145.  
  146.         {$IFDEF DEL6UP}
  147.         outputMemo.lines.add('# Deleted: '+
  148.           datetimetostr(RecyclerGetDateTime(tmp, x[i])));
  149.         {$ELSE}
  150.         outputMemo.lines.add('# Deleted: You have to compile this demo with Delphi 6 or higher.');
  151.         {$ENDIF}
  152.         outputMemo.lines.add('# Original filename: '+
  153.           RecyclerGetSource(tmp, x[i]));
  154.         outputMemo.lines.add('# Unicode filename: '+
  155.           RecyclerGetSourceUnicode(tmp, x[i]));
  156.         outputMemo.lines.add('# Source device: '+
  157.           RecyclerGetSourceDrive(tmp, x[i]));
  158.         outputMemo.lines.add('# Original size on disk: '+
  159.           inttostr(RecyclerOriginalSize(tmp, x[i]))+' Byte');
  160.         outputMemo.lines.add('');
  161.       end;
  162.     finally
  163.       x.Free;
  164.     end;
  165.   end;
  166.  
  167.   outputMemo.Visible := true;
  168. end;
  169.  
  170. procedure TMainForm.btn_read_click(Sender: TObject);
  171. begin
  172.   if openDialog.Execute() then
  173.   begin
  174.     outputMemo.Clear;
  175.     ReadRecycler(openDialog.filename);
  176.   end;
  177. end;
  178.  
  179. procedure TMainForm.btn_readown_click(Sender: TObject);
  180. var
  181.   x, sl: TStringList;
  182.   i, j: integer;
  183.   somethingfound: boolean;
  184. begin
  185.   outputMemo.Visible := false;
  186.   try
  187.     application.ProcessMessages;
  188.  
  189.     outputMemo.Clear;
  190.     x := TStringList.Create;
  191.     try
  192.       RecyclerGetAllRecyclerDrives(x);
  193.       somethingfound := false;
  194.       if x.Count > 0 then
  195.       begin
  196.         for i := 0 to x.Count - 1 do
  197.         begin
  198.           // ReadRecycler(RecyclerGetPath(x[i][1]), true);
  199.  
  200.           sl := TStringList.Create;
  201.           try
  202.             RecyclerGetInfofiles(x[i][1], true, sl);
  203.             if sl.Count > 0 then
  204.             begin
  205.               for j := 0 to sl.Count - 1 do
  206.               begin
  207.                 ReadRecycler(sl.Strings[j]);
  208.                 somethingfound := true;
  209.               end;
  210.             end;
  211.           finally
  212.             sl.Free;
  213.           end;
  214.         end;
  215.       end;
  216.       if not somethingfound then
  217.       begin
  218.         outputMemo.lines.add('No recyclers found.');
  219.         outputMemo.lines.add('');
  220.       end;
  221.     finally
  222.       x.Free;
  223.     end;
  224.   finally
  225.     outputMemo.Visible := true;
  226.   end;
  227. end;
  228.  
  229. procedure TMainForm.btnSaveTextDumpClick(Sender: TObject);
  230. begin
  231.   if saveDialog.Execute then
  232.   begin
  233.     outputMemo.Lines.SaveToFile(saveDialog.FileName);
  234.   end;
  235. end;
  236.  
  237. procedure TMainForm.btnShowConfigClick(Sender: TObject);
  238. var
  239.   d: char;
  240.   sl: TStringList;
  241.   i: integer;
  242. begin
  243.   outputMemo.Visible := false;
  244.   try
  245.     application.ProcessMessages;
  246.  
  247.     outputMemo.Clear;
  248.  
  249.     outputMemo.Lines.Add(RecyclerLibraryVersion);
  250.  
  251.     outputMemo.Lines.Add('');
  252.     outputMemo.Lines.Add('= Possible recyclers (fixed drives) =');
  253.     outputMemo.Lines.Add('');
  254.  
  255.     for d := 'A' to 'Z' do
  256.     begin
  257.       outputMemo.Lines.Add('Recycler is possible at drive '+d+': ' + _BoolToYesNo(RecyclerIsPossible(d)));
  258.     end;
  259.  
  260.     outputMemo.Lines.Add('');
  261.     outputMemo.Lines.Add('= Valid recyclers =');
  262.     outputMemo.Lines.Add('');
  263.  
  264.     for d := 'A' to 'Z' do
  265.     begin
  266.       outputMemo.Lines.Add('Drive '+d+': ' + _BoolToYesNo(RecyclerIsValid(d)));
  267.     end;
  268.  
  269.     outputMemo.Lines.Add('');
  270.     outputMemo.Lines.Add('= Current status =');
  271.     outputMemo.Lines.Add('');
  272.  
  273.     if RecyclerQueryFunctionAvailable then
  274.     begin
  275.       outputMemo.Lines.Add('GLOBAL Empty = ' + _BoolToYesNo(RecyclerIsEmpty));
  276.       outputMemo.Lines.Add('GLOBAL Number of items = ' + IntToStr(RecyclerGetNumItems));
  277.       outputMemo.Lines.Add('GLOBAL Size = ' + IntToStr(RecyclerGetSize) + ' Bytes');
  278.       for d := 'A' to 'Z' do
  279.       begin
  280.         if not RecyclerIsPossible(d) then Continue; // Important since Windows Vista throws Exceptions!
  281.         outputMemo.Lines.Add('Drive '+d+' Empty = ' + _BoolToYesNo(RecyclerIsEmpty(d)));
  282.         outputMemo.Lines.Add('Drive '+d+' Number of items = ' + IntToStr(RecyclerGetNumItems(d)));
  283.         outputMemo.Lines.Add('Drive '+d+' Size = ' + IntToStr(RecyclerGetSize(d)) + ' Bytes');
  284.       end;
  285.     end
  286.     else
  287.     begin
  288.       outputMemo.Lines.Add('Empty, Number of items, Size:');
  289.       outputMemo.Lines.Add('        Functionality not working with your operating system.');
  290.     end;
  291.  
  292.     outputMemo.Lines.Add('');
  293.     outputMemo.Lines.Add('= Name and Infotips =');
  294.     outputMemo.Lines.Add('');
  295.  
  296.     outputMemo.Lines.Add('Name: '+RecyclerGetName());
  297.     outputMemo.Lines.Add('Info Tip: '+RecyclerGetInfoTip());
  298.     outputMemo.Lines.Add('Intro Text: '+RecyclerGetIntroText());
  299.     outputMemo.Lines.Add('Class-ID: '+RecyclerGetCLSID());
  300.  
  301.     outputMemo.Lines.Add('');
  302.     outputMemo.Lines.Add('= Icons =');
  303.     outputMemo.Lines.Add('');
  304.  
  305.     outputMemo.Lines.Add('Default Icon: '+RecyclerGetDefaultIconString());
  306.     if RecyclerQueryFunctionAvailable then
  307.     begin
  308.       outputMemo.Lines.Add('Current Icon (Empty / Full): '+RecyclerGetCurrentIconString());
  309.     end
  310.     else
  311.     begin
  312.       outputMemo.Lines.Add('Current Icon (Empty / Full):');
  313.       outputMemo.Lines.Add('        Functionality not working with your operating system.');
  314.     end;
  315.     outputMemo.Lines.Add('Full Icon: '+RecyclerGetFullIconString());
  316.     outputMemo.Lines.Add('Empty Icon: '+RecyclerGetEmptyIconString());
  317.  
  318.     outputMemo.Lines.Add('');
  319.     outputMemo.Lines.Add('= Events =');
  320.     outputMemo.Lines.Add('');
  321.  
  322.     outputMemo.Lines.Add('Empty Event Name: '+RecyclerEmptyEventGetName());
  323.     outputMemo.Lines.Add('Empty Event Current Sound: '+RecyclerEmptyEventGetCurrentSound());
  324.     outputMemo.Lines.Add('Empty Event Default Sound: '+RecyclerEmptyEventGetDefaultSound());
  325.  
  326.     sl := TStringList.Create;
  327.     try
  328.       RecyclerEmptyEventGetSoundCategories(sl);
  329.       for i := 0 to sl.Count - 1 do
  330.       begin
  331.         outputMemo.Lines.Add(Format('Event "%s" = %s', [sl.Strings[i], RecyclerEmptyEventGetSound(sl.Strings[i])]));
  332.       end;
  333.     finally
  334.       sl.Free;
  335.     end;
  336.  
  337.     outputMemo.Lines.Add('');
  338.     outputMemo.Lines.Add('= Nuke on Delete =');
  339.     outputMemo.Lines.Add('');
  340.  
  341.     outputMemo.Lines.Add('Group policy setting: ' + GPBoolToString(RecyclerGroupPolicyNoRecycleFiles));
  342.     outputMemo.Lines.Add('Global settings selected: ' + _BoolToYesNo(RecyclerHasGlobalSettings));
  343.     outputMemo.Lines.Add('Global setting: ' + _BoolToEnabledDisabled(RecyclerGlobalIsNukeOnDelete()));
  344.     for d := 'A' to 'Z' do
  345.     begin
  346.       // if not RecyclerIsPossible(d) then Continue;
  347.       outputMemo.Lines.Add('Individual setting for drive '+d+': ' + _BoolToEnabledDisabled(RecyclerSpecificIsNukeOnDelete(d)));
  348.       outputMemo.Lines.Add('Auto determinated setting for drive '+d+' (includes group policy and global setting): ' + _BoolToEnabledDisabled(RecyclerIsNukeOnDeleteAutoDeterminate(d)));
  349.     end;
  350.  
  351.     outputMemo.Lines.Add('');
  352.     outputMemo.Lines.Add('= Usage Percent =');
  353.     outputMemo.Lines.Add('');
  354.  
  355.     outputMemo.Lines.Add('Group policy setting: ' + IntToStr(RecyclerGroupPolicyRecycleBinSize));
  356.     outputMemo.Lines.Add('Global settings selected: ' + _BoolToYesNo(RecyclerHasGlobalSettings));
  357.     outputMemo.Lines.Add('Global setting: ' + IntToStr(RecyclerGlobalGetPercentUsage()));
  358.     for d := 'A' to 'Z' do
  359.     begin
  360.       // if not RecyclerIsPossible(d) then Continue;
  361.       outputMemo.Lines.Add('Setting for drive '+d+': ' + IntToStr(RecyclerSpecificGetPercentUsage(d)));
  362.       outputMemo.Lines.Add('Auto determinated setting for drive '+d+' (includes group policy and global setting): ' + IntToStr(RecyclerGetPercentUsageAutoDeterminate(d)));
  363.     end;
  364.  
  365.     outputMemo.Lines.Add('');
  366.     outputMemo.Lines.Add('= Confirmation Dialog =');
  367.     outputMemo.Lines.Add('');
  368.  
  369.     outputMemo.Lines.Add('Setting in Shell: ' + _BoolToEnabledDisabled(RecyclerShellStateConfirmationDialogEnabled()));
  370.     outputMemo.Lines.Add('Setting in Group Policy: ' + GPBoolToString(RecyclerGroupPolicyConfirmFileDelete()));
  371.     outputMemo.Lines.Add('Resulting Setting (Group policy before Shell): ' + _BoolToEnabledDisabled(RecyclerConfirmationDialogEnabled()));
  372.   finally
  373.     outputMemo.Visible := true;
  374.   end;
  375. end;
  376.  
  377. end.
  378.