Программа для автоматического запуска приложений после старта компьютера.
Большое количество приложений в автозагрузке создают излишнюю единовременную нагрузку на машину. Эту программу писал, для того, чтобы можно было указать с какой задержкой загружать приложения.
Писал под Delphi 7, но по идее должно компилироваться и на новых версиях.
Дизайн минималистичный:
Код основного модуля:
unit uFrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IniFiles, CheckLst, ExtCtrls, ShellApi, Math;
type
TfrmMain = class(TForm)
Memo1: TMemo;
CheckListBox1: TCheckListBox;
tmrTicTok: TTimer;
lblTimer: TLabel;
btnNext: TButton;
btnSkip: TButton;
btnPause: TButton;
tmrStartup: TTimer;
lblRnd: TLabel;
procedure FormCreate(Sender: TObject);
procedure tmrTicTokTimer(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnSkipClick(Sender: TObject);
procedure btnPauseClick(Sender: TObject);
procedure tmrStartupTimer(Sender: TObject);
private
{ Private declarations }
iCurTimer : integer;
public
{ Public declarations }
procedure ShowTime(iTime :integer);
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
type
RProgram = record
Name, path : string;
timer, showCmd : integer;
end;
CMain = class
private
aPrograms : array of RProgram;
iProgramsTotal : integer;
iCurrentProgram : integer;
procedure addProgram(prg : RProgram);
procedure showList();
// procedure sort();
procedure start();
procedure run();
function getPos():integer;
constructor Create;
public
{ Public declarations }
end;
var
sCurrentPath : string;
oMain : CMain;
procedure TfrmMain.FormCreate(Sender: TObject);
var
iRnd : integer;
begin
randomize;
iRnd:= RandomRange(1, 10) * 1000;
lblRnd.Caption:= inttostr(iRnd);
tmrStartup.Interval:= iRnd;
tmrStartup.Enabled:= True;
end;
{ CMain }
constructor CMain.Create;
begin
iProgramsTotal:=0;
iCurrentProgram:=0;
end;
procedure CMain.addProgram(prg: RProgram);
begin
inc(iProgramsTotal);
setLength(aPrograms, iProgramsTotal);
aPrograms[iProgramsTotal -1]:= prg;
end;
procedure CMain.showList();
var
i : integer;
begin
for i:=0 to self.iProgramsTotal -1 do
begin
frmMain.CheckListBox1.Items.Add(self.aPrograms[i].name);
end;
end;
{
procedure CMain.sort;
var
i, j, iMinVal, iMinIndex: integer;
oTmpPrg : RProgram;
begin
for i:=0 to iProgramsTotal -1 do
begin
iMinVal:= aPrograms[i].order;
iMinIndex:= i;
for j:=i to iProgramsTotal -1 do
begin
if aPrograms[j].order < iMinVal then
begin
iMinVal:= aPrograms[j].order;
iMinIndex:= j;
end;
end;
if iMinVal < aPrograms[i].order then
begin
oTmpPrg:= aPrograms[i];
aPrograms[i]:= aPrograms[iMinIndex];
aPrograms[iMinIndex]:= oTmpPrg;
end;
end;
end;
}
procedure CMain.start;
var
oPrg : RProgram;
begin
if iCurrentProgram >= iProgramsTotal then
begin
//- MessageDlg('Done', mtWarning, [mbOK], 0);
frmMain.Close();
end
else
begin
oPrg:= aPrograms[iCurrentProgram];
frmMain.ShowTime(oPrg.timer);
end
;
end;
procedure TfrmMain.ShowTime(iTime: integer);
begin
iCurTimer:= iTime;
tmrTicTok.Enabled:= True;
end;
procedure TfrmMain.tmrTicTokTimer(Sender: TObject);
begin
if CheckListBox1.Checked[oMain.getPos()] = TRUE then
begin
iCurTimer:= -1;
end;
if iCurTimer >= 0 then
begin
lblTimer.Caption:= IntToStr(iCurTimer);
dec(iCurTimer);
end
else
begin
tmrTicTok.Enabled:=False;
oMain.run();
end
;
end;
procedure CMain.run;
var
oPrg : RProgram;
begin
if frmMain.CheckListBox1.Checked[oMain.getPos()] = TRUE then
begin
//do nothing
end
else
begin
oPrg:= aPrograms[iCurrentProgram];
if FileExists(oPrg.path) then
begin
ShellExecute(frmMain.Handle, nil, PChar(oPrg.path), nil, nil, oPrg.showCmd);
end
else
begin
frmMain.lblTimer.Caption:='Error';
end
;
frmMain.CheckListBox1.Checked[iCurrentProgram]:=True;
end
;
inc(iCurrentProgram);
start();
end;
procedure TfrmMain.btnNextClick(Sender: TObject);
begin
iCurTimer:=0;
end;
procedure TfrmMain.btnSkipClick(Sender: TObject);
begin
tmrTicTok.Enabled:=False;
inc(oMain.iCurrentProgram);
oMain.start();
end;
procedure TfrmMain.btnPauseClick(Sender: TObject);
begin
if tmrTicTok.Enabled then
begin
btnPause.Caption:='Start';
end
else
begin
btnPause.Caption:='Stop';
end
;
tmrTicTok.Enabled:= not tmrTicTok.Enabled;
end;
function CMain.getPos: integer;
begin
Result:= iCurrentProgram;
end;
procedure TfrmMain.tmrStartupTimer(Sender: TObject);
var
ini : TIniFile;
i : integer;
prg : RProgram;
sSectionName : string;
HM: THandle;
begin
tmrStartup.Enabled:= False;
HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'WinStarter777'); // 160803
if HM <> 0 then
begin
ShowMessage('Уже запушено !');
end
else
begin
HM := CreateMutex(nil, false, 'WinStarter777');
sCurrentPath:= ExtractFilePath(Application.ExeName);
oMain:= CMain.Create;
ini:= TIniFile.Create(sCurrentPath+'settings.ini');
ini.ReadSections(Memo1.Lines);
for i:=0 to Memo1.Lines.Count -1 do
begin
sSectionName:= Memo1.Lines[i];
prg.Name:= sSectionName;
prg.path:= ini.ReadString(sSectionName, 'path', '');
// prg.order:= ini.ReadInteger(sSectionName, 'order', 10);
prg.timer:= ini.ReadInteger(sSectionName, 'timer', 10);
prg.showCmd:= ini.ReadInteger(sSectionName, 'showCmd', 5);
oMain.addProgram(prg);
end;
ini.Free;
//- oMain.sort();
// CheckListBox1.Items:= oMain.getList();
oMain.showList();
oMain.start();
end
;
end;
end.
Скачать исходники