Autorun.exe та .ini-файли. Коди програми


Написано на Delphi 3.0


Приклад файлів:  Unit1.pas   List01.ini  Зкачати все.


 

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls,IniFiles, ExtCtrls;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ListBox1: TListBox;
ListBox2: TListBox;
RichEdit1: TRichEdit;
Label1: TLabel;
Timer1: TTimer;
BitBtn3: TBitBtn;
procedure FormActivate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

var //Здесь размещаются переменные, которые будут доступны из всех процедур.

RunPathList: array[1..999] of String; //Список путей к запускаемым файлам.

DescriptionList: array[1..999] of String; //Список описаний или пути к описаниям.

ListFile: array[1..99] of String; //Список файлов с информацией

Path:String; //Корневой каталог диска.

procedure TForm1.FormActivate(Sender: TObject); //Сама процедура (начало)

var //Тут размещаются переменные, которые будут доступны в пределах этой процедуры.

i,n,k,Found:integer; //Различные переменные счетчиков

SearchRec:TSearchRec; //Переменная используемая при поиске

ini:TIniFile; //Определения класса для работы с .ini файлами

Category,Name,Description,RunPath:String; //думаю, понятно из названий

begin

label1.Caption:='0'; //Тут будет количество найденных программ

Path:=ParamStr(0);//ParamStr(n), где n>=0. При n=0 возвращает путь и имя файла к нашей запущенной программе. При n>0 возвращает параметры, которые были переданы программе при запуске (Например: «autorun.exe /param1 name»). Функция ParamCount возвращает количество параметров разделенных пробелом (т.е. n=0...ParamCount).

Path:=Path[1]+':\';//Выделяем логический диск. Это первый символ. К нему добавляем приставку «:\»

i:=1;

Found := FindFirst(Path+'list??.ini', faVolumeID, SearchRec);//Поиск первого файла по маске х:\list??.ini

while Found = 0 do //Зацикливаемся, пока есть новые файлы

 begin

 if FileExists(Path+SearchRec.Name)=true then //Проверяем, что найден файл

  begin

  ListFile[i]:=Path+SearchRec.Name;//Добавляем в список файлов типа list??.ini

  Inc(i); //Увеличиваем переменную і на единицу

  end;

 Found := FindNext(SearchRec);

 end;

FindClose(SearchRec); //Освобождаем память

ListFile[i]:='END'; //Добавляем текст «END» в список файлов. Для того, чтобы потом быстро определить конец списка.

if ListFile[1]='END' then ShowMessage('На диске '+Path+' не найдено ни одного конфигурационного файла.'); //Если в первой строчке списка «END», значит не найдено ни одного файлаL. Выводим сообщение.

k:=1;

for i:=1 to 99 do //Перебираем список от 1 до 99 в цикле

 begin

 if ListFile[i]='END' then Break; //пока не встретим «END»

 ini:=TIniFile.Create(ListFile[i]); //Открываем файл

 label1.Caption:=IntToStr(StrToInt(label1.Caption)+ini.ReadInteger('MAIN','ProgramsCount',0)); //Увеличиваем количество программ в файле

 for n:=1 to ini.ReadInteger('MAIN','ProgramsCount',0) do //Перебираем все записи с 1 до значения «ProgramsCount», указаного в файле.

  begin

  Category:=ini.ReadString('Program'+Format('%.3d',[n]),'Category','без категории');//Считываем категорию. Функцией «Format» в данном случае задается формат чисел типа: 001,002,003...

  if ListBox1.Items.IndexOf(Category) = -1 then //Выполняем поиск такой же категории уже находящейся в списке ListBox1. В случае удачи функция возвращает номер позиции, в противном случае «–1»

   begin

   ListBox1.Items.Add(Category);//Если нету - добавляем

   end;

  end;

 end;

ini.Free;

label1.Caption:='На этом диске '+label1.Caption+' программ(а).';//Делаем надпись более информативной для пользователя

end;

 

procedure TForm1.ListBox1Click(Sender: TObject);

var

ini:TIniFile;

i,n,k:integer;

Category:String;

begin

k:=1;

ListBox2.Items.Clear;//Очищаем все строчки ListBox2

RichEdit1.Text:='';//Очищаем окно с описанием

Label1.Caption:='';

for i:=1 to 99 do

 begin

 if ListFile[i]='END' then Break;

 ini:=TIniFile.Create(ListFile[i]);

 for n:=1 to ini.ReadInteger('MAIN','ProgramsCount',0) do

  begin   Category:=ini.ReadString('Program'+Format('%.3d',[n]),'Category','без категории');

  if Category = ListBox1.Items.Strings[ListBox1.ItemIndex] then //Если найденная в файле категория совпадает с выбранной в ListBox1, то считывается информация о программе

   begin

   //ListBox2.Items.Add(Format('%.4d',[k])+' '+ini.ReadString('Program'+Format('%.3d',[n]),'Name','без имени')); //Считываем Имя программы ListBox2.Items.Add(ini.ReadString('Program'+Format('%.3d',[n]),'Name','без имени')); //которое добавляется в список ListBox2    RunPathList[k]:=Path+ini.ReadString('Program'+Format('%.3d',[n]),'Path','неизвестно'); //Путь, для запуска выбранной пользователем программы

   DescriptionList[k] :=ini.ReadString('Program'+Format('%.3d',[n]),'Description','Все ясно из названия!'); //Описание выбранной программы

   Inc(k);

   end;

  end;

 end;

ini.Free;

end;

 

procedure TForm1.ListBox2Click(Sender: TObject);

var

n:integer;

begin

screen.Cursor:=crHourGlass; //Устанавливаем вид курсора «песочные часы»

Label1.Caption:=RunPathList[ListBox2.ItemIndex+1]; //Строка запуска программы

if FileExists(Path+DescriptionList[ListBox2.ItemIndex+1]) then //Если файл существует RichEdit1.Lines.LoadFromFile(Path+DescriptionList[ListBox2.ItemIndex+1]) //открываем его

  else

 RichEdit1.Text:=DescriptionList[ListBox2.ItemIndex+1]; //иначе выводим текст в поле описания

screen.Cursor:=crDefault; //Устанавливается вид курсора «по умолчанию»

end;

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var

Result:Integer;

begin

Result:=Windows.WinExec(PChar(Label1.caption),SW_SHOWDEFAULT); //Запускаем на выполнение программу, путь и имя которой мы предварительно занесли в текст метки Label1. Результат выполнения операции возвращается переменной Result. Далее идет обработка возможных ошибок

if Result=0 then MessageDlg('Недостаточно ресурсов для запуска программы',mtError,[mbOk],0);

if Result=ERROR_BAD_FORMAT then MessageDlg('Неправильный формат .ЕХЕ файла',mtError,[mbOk],0);

if Result=ERROR_FILE_NOT_FOUND then MessageDlg('Файл не найден'#13#10+Label1.Caption,mtError,[mbOk],0);

if Result=ERROR_PATH_NOT_FOUND then MessageDlg('Неверный указанный путь'#13#10+Label1.Caption,mtError,[mbOk],0);

end;

 

 

procedure TForm1.Timer1Timer(Sender: TObject);
var
X,Y,C,R,G,B:Integer;
i:integer;
begin
Randomize;
for i:=0 to 11 do
begin
X:=Random(Screen.Width);
Y:=Random(Screen.Height);
C:=GetPixel(GetDC(0),X,Y);
R:=GetRValue(C);
G:=GetGValue(C);
B:=GetBValue(C);

if R>105 then R:=R-100;
if G>105 then G:=G-100;
if B>105 then B:=B-100;

C:=RGB(R,G,B);
SetPixel(GetDC(0),X,Y,C);
end;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Form2.ShowModal;
end;

end.

 

Приклад програми автозапуска autorun.exe

  25.08.2007