home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Softwarová Záchrana 3
/
Softwarova-zachrana-3.bin
/
StartRight
/
source.zip
/
UnitFormEdit.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2004-10-05
|
30KB
|
1,030 lines
unit UnitFormEdit;
{
Purpose:
- show the contents of the startright's run key and the startup folder
- allow removal of items
- allow for sorting of items
Updates:
Show the icons of each item
Show the system's "File Properties" dialog
Enable/Disable functionality
New EndProgramOnClose functionality to show "new items"
}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UnitMyRegistry, ComCtrls, StdCtrls,
UnitMyKeys, UnitListViewMover , Buttons, ImgList, ExtCtrls;
type
TFrmEdit = class(TForm)
ILStartupIcons: TImageList;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
ILRunKeyIcons: TImageList;
Panel1: TPanel;
btnTop: TSpeedButton;
btnUp: TSpeedButton;
btnDown: TSpeedButton;
btnBottom: TSpeedButton;
lvRunkeySort: TListView;
btnDeleteRun: TSpeedButton;
bRunProperties: TButton;
Panel2: TPanel;
lvRunkeyDisabled: TListView;
bRunkeyEnable: TButton;
Splitter1: TSplitter;
Panel3: TPanel;
btnTop2: TSpeedButton;
lvStartup: TListView;
btnUp2: TSpeedButton;
btnDown2: TSpeedButton;
btnBottom2: TSpeedButton;
btnDeleteStartup: TSpeedButton;
bStartupProperties: TButton;
Panel4: TPanel;
lvStartupDisabled: TListView;
bStartupEnable: TButton;
Splitter2: TSplitter;
lblVersion: TLabel;
Shape1: TShape;
Shape2: TShape;
Label1: TLabel;
Label2: TLabel;
btnExclude: TSpeedButton;
btnExcludeStartup: TSpeedButton;
bRunkeyOtherProperties: TButton;
bStartupOtherProperties: TButton;
txtPause: TEdit;
btnSetPause: TButton;
btnSetStartupPause: TButton;
txtStartupPause: TEdit;
btnRunkeyDelete: TButton;
btnStartupDelete: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnTopClick(Sender: TObject);
procedure btnUpClick(Sender: TObject);
procedure btnDownClick(Sender: TObject);
procedure btnBottomClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnTop2Click(Sender: TObject);
procedure btnUp2Click(Sender: TObject);
procedure btnDown2Click(Sender: TObject);
procedure btnBottom2Click(Sender: TObject);
procedure btnDeleteRunClick(Sender: TObject);
procedure btnDeleteStartupClick(Sender: TObject);
procedure lvRunkeySortClick(Sender: TObject);
procedure lvStartupClick(Sender: TObject);
procedure bRunPropertiesClick(Sender: TObject);
procedure bStartupPropertiesClick(Sender: TObject);
procedure lvStartupDisabledClick(Sender: TObject);
procedure bStartupEnableClick(Sender: TObject);
procedure bRunkeyEnableClick(Sender: TObject);
procedure lvRunkeyDisabledClick(Sender: TObject);
procedure btnExcludeClick(Sender: TObject);
procedure btnExcludeStartupClick(Sender: TObject);
procedure bRunkeyOtherPropertiesClick(Sender: TObject);
procedure bStartupOtherPropertiesClick(Sender: TObject);
procedure bSelectNewRunItemsClick(Sender: TObject);
procedure btnSetPauseClick(Sender: TObject);
procedure btnSetStartupPauseClick(Sender: TObject);
procedure btnRunkeyDeleteClick(Sender: TObject);
procedure btnStartupDeleteClick(Sender: TObject);
private
{ Private declarations }
r : TMyRegistry;
EndProgramOnClose : boolean;
function OKToDelete() : boolean;
function OKToExclude() : boolean;
procedure LoadData;
procedure SaveData;
procedure ShowPropertiesDialog(filename : string);
public
{ Public declarations }
procedure SetEndProgramOnClose(value : boolean);
function SelectNewItems : boolean;
procedure ShowNewItems;
procedure InitGUI;
end;
var
FrmEdit: TFrmEdit;
implementation
Uses shellAPI, shlobj, UnitItemManager,
UnitFrmAbout, UnitSpecialPaths{for extracting ICONS}, UnitFrmDummyRunner,
UnitFrmOptions, UnitUtils;
const PAUSE_DEFAULT = 'Default';
const DISABLED_STATUS = 'Disabled';
const EXCLUDED_STATUS = 'Excluded';
const NO_LONGER_EXISTS_VALUE = '[Item no longer exists in system''s runkey]';
{$R *.dfm}
procedure TFrmEdit.InitGUI;
var c : TListColumn;
begin
lvRunkeySort.Columns.Clear;
c := lvRunkeySort.Columns.Add;
c.Caption := 'Key';
c.Width := Trunc(lvRunkeySort.ClientWidth * 0.18);
c := lvRunkeySort.Columns.Add;
c.Caption := 'Value';
c.Width := Trunc(lvRunkeySort.ClientWidth * 0.55);
c := lvRunkeySort.Columns.Add;
c.Caption := 'New';
c.Width := Trunc(lvRunkeySort.ClientWidth * 0.1);
c := lvRunkeySort.Columns.Add;
c.Caption := 'Pause(ms)';
c.Width := Trunc(lvRunkeySort.ClientWidth * 0.15);
c := lvRunkeySort.Columns.Add;
c.Caption := 'User';
c.Width := Trunc(lvRunkeySort.ClientWidth * 0.15);
// disabled/excluded run keys
lvRunkeyDisabled.Columns.clear;
c := lvRunkeyDisabled.Columns.Add;
c.Caption := 'Disabled Key';
c.Width := Trunc(lvRunkeyDisabled.ClientWidth * 0.2);
c := lvRunkeyDisabled.Columns.Add;
c.Caption := 'Disabled Value';
c.Width := Trunc(lvRunkeyDisabled.ClientWidth * 0.5);
c := lvRunkeyDisabled.Columns.Add;
c.Caption := 'Status';
c.Width := Trunc(lvRunkeyDisabled.ClientWidth * 0.2);
c := lvRunkeyDisabled.Columns.Add;
c.Caption := 'New';
c.Width := Trunc(lvRunkeyDisabled.ClientWidth * 0.1);
lvStartup.Columns.clear;
c := lvStartup.Columns.Add;
c.Caption := 'Startup Shortcuts';
c.Width := trunc(lvStartup.ClientWidth * 0.7);
c := lvStartup.Columns.Add;
c.Caption := 'New';
c.Width := Trunc(lvStartup.ClientWidth * 0.1);
c := lvStartup.Columns.Add;
c.Caption := 'Pause(ms)';
c.Width := Trunc(lvStartup.ClientWidth * 0.15);
lvStartupDisabled.Columns.clear;
c := lvStartupDisabled.Columns.Add;
c.Caption := 'Shortcuts';
c.width := Trunc(lvStartupDisabled.ClientWidth * 0.7);
c := lvStartupDisabled.Columns.Add;
c.Caption := 'Status';
c.width := Trunc(lvStartupDisabled.ClientWidth * 0.2);
c := lvStartupDisabled.Columns.Add;
c.Caption := 'New';
c.Width := Trunc(lvStartupDisabled.ClientWidth * 0.1);
self.PageControl1.ActivePageIndex := 0;
self.LoadData;
end;
procedure TFrmEdit.ShowNewItems;
begin
if not self.Visible then begin
self.Position := poScreenCenter;
self.InitGUI;
//self.SelectNewItems;
self.Show;
end;
end;
procedure TFrmEdit.SetEndProgramOnClose(value : boolean);
begin
EndProgramOnClose := value;
end;
procedure TFrmEdit.FormCreate(Sender: TObject);
begin
r := TMyRegistry.Create();
end;
procedure TFrmEdit.FormDestroy(Sender: TObject);
begin
r.Free;
end;
procedure TFrmEdit.FormShow(Sender: TObject);
begin
//self.LoadData;
end;
procedure TFrmEdit.LoadData;
function GetSmallShortcutIcon(FileName: String): HICON;
var
FileInfo: TSHFileInfo;
begin
SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON
or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
Result := FileInfo.hIcon;
end;
procedure ExtractAndSetIconRunkey(li : TListItem; keyvalue : string);
var sEXE : string;
IconIndex : word;
icon : TIcon;
begin
// find ICON of EXE item
// add default icon if can't find the file
//
sEXE := '';
sEXE := UnitMyKeys.FindExecutableFromRunValue(keyvalue);
If FileExists(sEXE) then begin
IconIndex := 0;
icon := TIcon.Create;
icon.Handle := 0;
icon.Handle := ShellAPI.ExtractAssociatedIcon(hInstance, PChar(sEXE), IconIndex);
if (icon.Handle <> 0) then begin
ILRunKeyIcons.AddIcon(icon);
end;
icon.Free;
li.ImageIndex := ILRunKeyIcons.Count - 1;
end else begin
li.ImageIndex := 0;
end;
end;
procedure ExtractAndSetIconShortcut(li : TListItem; filename : string);
var icon : TIcon;
begin
//
// find ICON of .LNK item
// add default icon if can't find the file
//
if FileExists(filename) then begin
icon := TIcon.Create;
icon.Handle := 0;
icon.Handle := GetSmallShortcutIcon(li.caption);
if (icon.Handle <> 0) then begin
ILStartupIcons.AddIcon(icon);
end;
icon.Free;
li.ImageIndex := ILStartupIcons.Count - 1;
end else begin
li.ImageIndex := 0;
end;
end;
var
data, s, user : string;
i, sortIndex, delay : integer;
li : TListItem;
//link : IShellLink;
DisabledValues, ExcludedValues : TStringList;
begin
lvRunkeySort.Clear;
//
// read the sorted RunKey values & their dat
//
ILRunKeyIcons.Clear;
ILRunKeyIcons.AddIcon(Application.Icon);
for i := 0 to UnitMyKeys.GetRunSortCount - 1 do begin
s := UnitMyKeys.GetRunSortData(i);
if (s <> '') then begin
li := lvRunkeySort.Items.add;
li.Caption := UnitMyKeys.GetRunSortValue(i);
li.SubItems.Add(s);
if (UnitMyKeys.GetIsNewRunkey(li.caption)) then begin
li.subitems.Add('Yes');
end else begin
li.subitems.Add('');
end;
delay := UnitMyKeys.GetCustomDelay(li.caption);
if delay = 0 then begin
li.SubItems.Add(PAUSE_DEFAULT);
end else begin
li.SubItems.Add(IntToStr(delay));
end;
user := UnitMyKeys.GetRunLocation(li.caption);
if (user <> UnitUtils.UNKNOWN_USER) then begin
if UnitMyKeys.GetRunLocationRootkey(li.caption) = HKEY_CURRENT_USER then begin
li.SubItems.Add(user);
end;
end else begin
li.SubItems.Add('');
end;
ExtractAndSetIconRunkey(li, s);
end;
end;
//
// Shortcurt data
//
lvStartup.Clear;
ILStartupIcons.Clear;
ILStartupIcons.AddIcon(Application.Icon);
if (r.ValueExistsInteger(SR_STARTUPSORT_KEY, SR_SORTINDEX_VALUE, sortIndex)) then begin
for i := 0 to (sortIndex - 1) do begin
s := r.GetDataString(SR_STARTUPSORT_KEY, IntToStr(i));
if (s <> '') then begin
li := lvStartup.Items.Add;
li.caption := s;
if (UnitMyKeys.GetIsNewStartup(ExtractFilename(li.caption))) then begin
li.subitems.Add('Yes');
end else begin
li.subitems.Add('');
end;
delay := UnitMyKeys.GetCustomDelay(li.caption);
if delay = 0 then begin
li.SubItems.Add(PAUSE_DEFAULT);
end else begin
li.SubItems.Add(IntToStr(delay));
end;
ExtractAndSetIconShortcut(li, li.caption);
end;
end;
end;
// disabled startup items
lvStartupDisabled.Items.Clear;
disabledValues := TStringList.Create;
r.GetValues(SR_STARTUPDISABLE_KEY, DisabledValues);
for i := 0 to (disabledValues.Count - 1) do begin
s := r.GetDataString(SR_STARTUPDISABLE_KEY, disabledValues.Strings[i]);
if (s <> '') then begin
li := lvStartupDisabled.items.Add;
li.caption := s ;
li.SubItems.Add(DISABLED_STATUS);
if (UnitMyKeys.GetIsNewStartup(ExtractFilename(s))) then begin
li.SubItems.Add('Yes');
end else begin
li.SubItems.Add('');
end;
ExtractAndSetIconShortcut(li, li.caption);
end;
end;
// excluded startup items
ExcludedValues := TStringList.Create;
r.GetValues(SR_STARTUPEXCLUDE_KEY, ExcludedValues);
for i := 0 to (ExcludedValues.Count - 1) do begin
{the data may or may not include the full path to the shortcut}
li := lvStartupDisabled.items.Add;
data := r.GetDataString(SR_STARTUPEXCLUDE_KEY, Excludedvalues[i]);
if not (fileExists(data)) then begin
ItemManager.CorrectExcludedShortcutItem(Excludedvalues[i]);
li.caption := r.GetDataString(SR_STARTUPEXCLUDE_KEY, Excludedvalues[i]);
end else begin
li.caption := data;
end;
li.SubItems.Add(EXCLUDED_STATUS);
if (UnitMyKeys.GetIsNewStartup(ExtractFilename(s))) then begin
li.SubItems.Add('Yes');
end else begin
li.SubItems.Add('');
end;
ExtractAndSetIconShortcut(li, li.caption);
end;
ExcludedValues.Free;
// disabled runkey items
lvRunkeyDisabled.Items.Clear;
disabledValues := TStringList.Create;
r.GetValues(SR_RUNDISABLED_KEY, disabledValues);
for i := 0 to (disabledValues.Count - 1) do begin
li := lvRunkeyDisabled.items.Add;
li.caption := disabledValues.Strings[i];
li.SubItems.add( r.GetDataString(SR_RUNDISABLED_KEY, disabledValues.Strings[i]) );
li.SubItems.Add(DISABLED_STATUS);
if (UnitMyKeys.GetIsNewRunkey(li.caption)) then begin
li.SubItems.Add('Yes');
end else begin
li.SubItems.Add('');
end;
s := li.SubItems[0];
ExtractAndSetIconRunkey(li, s);
end;
disabledValues.Free;
//
// excluded runkey items
//
ExcludedValues := TStringList.Create;
r.GetValues(SR_RUNEXCLUDE_KEY, ExcludedValues);
i := ExcludedValues.IndexOf(SR_STARTRIGHT_VALUE);
if (i <> -1) then ExcludedValues.Delete(i);
{don't show ME in the excluded list}
for i := 0 to (ExcludedValues.Count - 1) do begin
s := r.GetDataString(WINDOWS_RUN_KEY, ExcludedValues.Strings[i]);
li := lvRunkeyDisabled.Items.add;
if (s = '') then begin
li.caption := ExcludedValues.Strings[i];
li.SubItems.Add(NO_LONGER_EXISTS_VALUE);
li.SubItems.Add(EXCLUDED_STATUS);
li.ImageIndex := 0;
end else begin
li.caption := ExcludedValues.Strings[i];
li.SubItems.Add(s);
li.SubItems.Add(EXCLUDED_STATUS);
if (UnitMyKeys.GetIsNewRunkey(li.caption)) then begin
li.SubItems.Add('Yes');
end else begin
li.SubItems.Add('');
end;
ExtractAndSetIconRunkey(li, s);
end;
end;
ExcludedValues.Free;
end;
procedure TFrmEdit.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
self.SaveData;
if (self.EndProgramOnClose) then begin
FrmDummyRunner.HideIcon;
Application.Terminate;
end;
end;
procedure TFrmEdit.SaveData;
var i, j : integer;
begin
//
// delete the current RunSort key, and rebuild
//
r.EraseKey(SR_HOME_KEY, SR_SUB_RUNSORT);
j := 0;
for i := 0 to (lvRunkeySort.Items.count - 1) do begin
if (Trim(lvRunkeySort.Items[i].caption) <> '') then begin
r.SetDataString(SR_RUNSORT_KEY, IntToStr(j), lvRunkeySort.Items[i].caption);
j := j + 1;
end;
end;
r.SetDataInteger(SR_RUNSORT_KEY, SR_SORTINDEX_VALUE, lvRunkeySort.Items.Count );
//
// same for StartupSort key
//
r.EraseKey(SR_HOME_KEY, SR_SUB_STARTUPSORT);
for i := 0 to lvStartup.Items.count - 1 do begin
r.SetDataString(SR_STARTUPSORT_KEY, IntToStr(i), lvStartup.Items[i].caption);
end;
r.SetDataInteger(SR_STARTUPSORT_KEY, SR_SORTINDEX_VALUE, lvStartup.Items.Count );
//
// save the disabled items
for i := 0 to (lvRunkeyDisabled.Items.Count - 1) do begin
if (lvRunkeyDisabled.Items[i].SubItems[1] = DISABLED_STATUS) then begin
r.SetDataString(SR_RUNDISABLED_KEY, lvRunkeyDisabled.Items[i].Caption,
lvRunkeyDisabled.Items[i].SubItems[0] );
end;
end;
end;
//
// move the runkey items
//
procedure TFrmEdit.btnTopClick(Sender: TObject);
begin
UnitListViewMover.MoveSelectedTop(lvRunkeySort);
self.SaveData;
end;
procedure TFrmEdit.btnUpClick(Sender: TObject);
begin
UnitListViewMover.MoveSelectedUp(lvRunkeySort);
self.SaveData;
end;
procedure TFrmEdit.btnDownClick(Sender: TObject);
begin
UnitListViewMover.MoveSelectedDown(lvRunkeySort);
self.SaveData;
end;
procedure TFrmEdit.btnBottomClick(Sender: TObject);
begin
UnitListViewMover.MoveSelectedBottom(lvRunkeySort);
self.SaveData;
end;
//
// move the startup items
//
procedure TFrmEdit.btnTop2Click(Sender: TObject);
begin
UnitListViewMover.MoveSelectedTop(lvStartup);
self.SaveData;
end;
procedure TFrmEdit.btnUp2Click(Sender: TObject);
begin
UnitListViewMover.MoveSelectedUp(lvStartup);
self.SaveData;
end;
procedure TFrmEdit.btnDown2Click(Sender: TObject);
begin
UnitListViewMover.MoveSelectedDown(lvStartup);
self.SaveData;
end;
procedure TFrmEdit.btnBottom2Click(Sender: TObject);
begin
UnitListViewMover.MoveSelectedBottom(lvStartup);
self.SaveData;
end;
//
// show a property page
// enable/disable property buttons
//
procedure TFrmEdit.bRunPropertiesClick(Sender: TObject);
var f : string;
begin
f := UnitMyKeys.FindExecutableFromRunValue( lvRunkeySort.Selected.SubItems.Strings[0]);
if (f = '') then begin
Dialogs.ShowMessage('Cannot locate executable');
end else begin
self.ShowPropertiesDialog(f);
end;
end;
procedure TFrmEdit.bStartupPropertiesClick(Sender: TObject);
begin
self.ShowPropertiesDialog(lvStartup.Selected.caption);
end;
procedure TFrmEdit.lvRunkeySortClick(Sender: TObject);
var v : string;
begin
bRunProperties.Enabled := (lvRunkeySort.SelCount = 1);
if (lvRunkeySort.SelCount = 1) then begin
v := UnitFrmAbout.GetVersionString(
FindExecutableFromRunValue(lvRunkeySort.Selected.subitems[0]));
if (v = '') then begin
lblVersion.Caption := '';
end else begin
lblVersion.caption := ExtractFilename(lvRunkeySort.selected.caption) +
' version: ' + v;
end;
txtPause.Text := lvRunkeySort.Selected.subitems[2];
if txtPause.Text = PAUSE_DEFAULT then begin
txtPause.Text := FrmOptions.txtIntRunkeyPause.text;
end;
end else begin
lblVersion.caption := '';
end;
btnExclude.Enabled := (lvRunkeySort.SelCount > 0);
btnDeleteRun.Enabled := btnExclude.Enabled;
btnSetPause.Enabled := (lvRunkeySort.SelCount = 1);
txtPause.Enabled := btnSetPause.Enabled;
end;
procedure TFrmEdit.lvStartupClick(Sender: TObject);
begin
bStartupProperties.Enabled := (lvStartup.SelCount = 1);
btnDeleteStartup.Enabled := (lvStartup.SelCount > 0);
btnExcludeStartup.Enabled := (lvStartup.SelCount > 0);
btnSetStartupPause.Enabled := (lvStartup.SelCount = 1);
if (btnSetStartupPause.Enabled) then begin
txtStartupPause.Text := lvStartup.Selected.subitems[1];
if txtStartupPause.Text = PAUSE_DEFAULT then begin
txtStartupPause.Text := FrmOptions.txtIntStartupPause.text;
end;
end;
txtStartupPause.Enabled := btnSetStartupPause .Enabled;
end;
procedure TFrmEdit.ShowPropertiesDialog(filename : string);
var sei : TShellExecuteInfo;
begin
FillChar(sei, SizeOf(sei), #0);
sei.cbSize := SizeOf(sei);
sei.lpFile := PChar(filename);
sei.lpVerb := 'properties';
sei.fMask := SEE_MASK_INVOKEIDLIST;
ShellExecuteEx(@sei);
end;
//
// Disable/Exclude buttons & util dialog
//
function TFrmEdit.OKToDelete() : boolean;
begin
result := (MessageDlg(
'Disabled items are not run by Windows and not run by StartRight' +#13#10+
'Disable the selected item(s)?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes)
end;
function TFrmEdit.OKToExclude() : boolean;
begin
result := (MessageDlg(
'Excluded items are run by Windows and not managed by StartRight' +#13#10+
'Exclude the selected item(s)?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes)
end;
procedure TFrmEdit.btnExcludeClick(Sender: TObject);
var i : longint;
begin
if (self.OKToExclude) then begin
for i := 0 to (lvRunkeySort.Items.count - 1) do begin
if (lvRunkeysort.items[i].Selected) then begin
ItemManager.ExcludeRunkeyItem(
lvRunkeySort.Items[i].Caption);
end;
end;
lvRunkeySort.DeleteSelected;
self.LoadData;
end;
end;
procedure TFrmEdit.btnDeleteRunClick(Sender: TObject);
var i : longint;
li : TListItem;
begin
if self.OKToDelete then begin
// update any changes in order
// delete the Run value and delete it's associated sort key
// remove the item from the list
for i := 0 to (lvRunkeySort.Items.count - 1) do begin
if lvRunkeysort.items[i].Selected then begin
ItemManager.DisableRunkeyItem(lvRunkeySort.Items[i].Caption);
// move a copy to the disabled items
li := lvRunkeyDisabled.Items.Add;
li.Caption := lvRunkeySort.Items[i].Caption;
li.SubItems.Add(lvRunkeySort.items[i].SubItems[0]);
li.SubItems.Add(DISABLED_STATUS);
end;
end;
// reload the form data
self.LoadData;
btnDeleteRun.Enabled := false;
end;
end;
procedure TFrmEdit.btnDeleteStartupClick(Sender: TObject);
var i : longint;
sl : TStringList;
s : string;
begin
if (self.OKToDelete) then begin
self.SaveData;
sl := TStringList.Create;
for i := (lvStartup.Items.Count - 1) downto 0 do begin
if (not lvStartup.items[i].Selected) then CONTINUE;
sl.Add(lvStartup.items[i].Caption);
lvStartup.Items[i].Delete;
end;
for i := sl.Count - 1 downto 0 do begin
s := ItemManager.IncludeStartupItem(sl[i]);
ItemManager.DisableStartupItem(s);
end;
self.LoadData;
sl.Free;
btnDeleteStartup.Enabled := false;
btnExcludeStartup.Enabled := false;
bStartupProperties.Enabled := false;
end;
ItemManager.ResortStartupSortItems;
end;
procedure TFrmEdit.btnExcludeStartupClick(Sender: TObject);
var i : longint;
begin
if (self.OKToExclude) then begin
//self.SaveData;
for i := (lvStartup.Items.Count - 1) downto 0 do begin
if (not lvStartup.items[i].Selected) then CONTINUE;
ItemManager.ExcludeStartupItem(lvStartup.items[i].Caption);
lvStartup.Items[i].Delete;
end;
self.LoadData;
btnDeleteStartup.Enabled := false;
btnExcludeStartup.Enabled := false;
bStartupProperties.Enabled := false;
end;
end;
//
// Disable / Enable buttons
//
procedure TFrmEdit.lvStartupDisabledClick(Sender: TObject);
begin
if (lvStartupDisabled.SelCount = 1) then begin
bStartupEnable.Enabled := true;
bStartupOtherProperties.Enabled := true;
if (lvStartupDisabled.Selected.SubItems[0] = DISABLED_STATUS) then begin
bStartupEnable.Caption := 'Enable';
btnStartupDelete.Enabled := true;
end else begin
bStartupEnable.Caption := 'Include';
end;
end else begin
bStartupEnable.Enabled := false;
bStartupOtherProperties.Enabled := false;
btnStartupDelete.Enabled := false;
end;
end;
procedure TFrmEdit.bStartupEnableClick(Sender: TObject);
var shortcut : string;
begin
shortcut := lvStartupDisabled.Selected.Caption;
if (lvStartupDisabled.Selected.SubItems[0] = EXCLUDED_STATUS) then begin
ItemManager.IncludeStartupItem(shortcut);
end else begin
ItemManager.EnableStartupItem(shortcut);
end;
lvStartupDisabled.DeleteSelected;
bStartupEnable.Enabled := false;
bStartupOtherProperties.Enabled := false;
btnStartupDelete.Enabled := false;
self.LoadData;
end;
procedure TFrmEdit.bRunkeyEnableClick(Sender: TObject);
var i : integer;
begin
for i := 0 to (lvRunkeyDisabled.Items.count - 1) do begin
if (lvRunkeyDisabled.Items[i].Selected) then begin
if (lvRunkeyDisabled.Items[i].SubItems[1] = EXCLUDED_STATUS) then begin
ItemManager.IncludeRunkeyItem(lvRunkeyDisabled.Items[i].Caption);
end else begin
ItemManager.EnableRunkeyItem(lvRunkeyDisabled.Items[i].Caption);
end;
end;
end;
lvRunkeyDisabled.DeleteSelected;
self.LoadData;
bRunkeyEnable.Enabled := false;
bRunkeyOtherProperties.Enabled := false;
btnRunkeyDelete.Enabled := false;
end;
procedure TFrmEdit.btnRunkeyDeleteClick(Sender: TObject);
begin
if
MessageDlg('Permanently delete item?', mtConfirmation, [mbYes,mbNo], 0)
= mrYes then begin
r.DeleteDataString(SR_RUNDISABLED_KEY, lvRunkeyDisabled.Selected.caption);
self.LoadData;
end;
end;
procedure TFrmEdit.lvRunkeyDisabledClick(Sender: TObject);
begin
if (lvRunkeyDisabled.SelCount = 1) then begin
bRunkeyEnable.Enabled := true;
bRunkeyOtherProperties.Enabled := true;
btnRunkeyDelete.Enabled := false;
if (lvRunkeyDisabled.Selected.SubItems[1] = DISABLED_STATUS) then begin
bRunkeyEnable.Caption := 'Enable';
btnRunkeyDelete.Enabled := true;
end else begin
bRunkeyEnable.Caption := 'Include';
end;
end else begin
btnRunkeyDelete.Enabled := false;
bRunkeyEnable.Enabled := false;
bRunkeyOtherProperties.Enabled := false;
end;
end;
function TFrmEdit.SelectNewItems : boolean;
var values : TStringList;
i : integer;
li : TListItem;
topItemSet : boolean;
begin
// read new values
values := TStringList.Create;
r.GetValues(SR_RUNNEWITEMS_KEY, values);
// select new items
result := false;
lvRunkeySort.ClearSelection;
topItemSet := false;
for i := 0 to (values.Count - 1) do begin
li := lvRunkeySort.FindCaption(0,values.Strings[i],false,true,false);
if li = nil then CONTINUE;
li.Selected := true;
result := true;
{make the first item visible to the user}
if (not topItemSet) then begin
li.MakeVisible(true);
topItemSet := true;
end;
end;
values.free;
self.lvRunkeySortClick(self);
end;
procedure TFrmEdit.bRunkeyOtherPropertiesClick(Sender: TObject);
var f : string;
begin
f := UnitMyKeys.FindExecutableFromRunValue( lvRunkeyDisabled.Selected.SubItems.Strings[0]);
if (f = '') then begin
Dialogs.ShowMessage('Cannot locate executable');
end else begin
self.ShowPropertiesDialog(f);
end;
end;
procedure TFrmEdit.bStartupOtherPropertiesClick(Sender: TObject);
begin
self.ShowPropertiesDialog(lvStartupDisabled.Selected.caption);
end;
procedure TFrmEdit.bSelectNewRunItemsClick(Sender: TObject);
var values : TStringList;
i : integer;
li : TListItem;
topItemSet : boolean;
s : string;
begin
values := TStringList.Create;
// read new values
r.GetValues(SR_STARTUPNEW_KEY, values);
r.GetValueNames(values);
// select new items
lvRunkeySort.ClearSelection;
topItemSet := false;
for i := 0 to (values.Count - 1) do begin
s := r.ReadString(values.Strings[i]);
li := lvStartup.FindCaption(0,s,false,true,false);
if li = nil then CONTINUE;
li.Selected := true;
{make the first item visible to the user}
if (not topItemSet) then begin
li.MakeVisible(true);
topItemSet := true;
end;
end;
values.free;
if (not topItemSet) then ShowMessage('No new items');
self.lvStartupClick(self);
end;
procedure TFrmEdit.btnSetPauseClick(Sender: TObject);
var i : integer;
begin
try
i := StrToInt(txtPause.text);
except on e : exception do
begin
ShowMessage('Pause value must be numbers only');
EXIT;
end;
end;
UnitMyKeys.SetCustomDelay(lvRunkeySort.Selected.caption, i);
self.LoadData;
end;
procedure TFrmEdit.btnSetStartupPauseClick(Sender: TObject);
var i : integer;
begin
try
i := StrToInt(txtStartupPause.text);
except on e : exception do
begin
ShowMessage('Pause value must be numbers only');
EXIT;
end;
end;
UnitMyKeys.SetCustomDelay(lvStartup.Selected.caption, i);
self.LoadData;
end;
procedure TFrmEdit.btnStartupDeleteClick(Sender: TObject);
begin
if
MessageDlg('Permanently delete item?', mtConfirmation, [mbYes,mbNo], 0)
= mrYes then begin
r.DeleteDataString(
SR_STARTUPDISABLE_KEY,
ExtractFilename(lvStartupDisabled.Selected.caption));
self.LoadData;
end;
end;
end.