WinStarter

14.03.2017

Программа для автоматического запуска приложений после старта компьютера.

Большое количество приложений в автозагрузке создают излишнюю единовременную нагрузку на машину. Эту программу писал, для того, чтобы можно было указать с какой задержкой загружать приложения.

Писал под Delphi 7, но по идее должно компилироваться и на новых версиях.

Дизайн минималистичный:

pic1

Код основного модуля:

uFrmMain.pas (Download)

 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.

Скачать исходники

Категории: Delphi
Яндекс.Метрика