Autorun.exe та .ini-файли. Коди програми
Написано на Delphi
Приклад файлів: 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);
якщо R>105, R:=R-100;
якщо G>105 then G:=G-100;
якщо 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.
Опубліковано:
Оновленно: 09.10.2023
Serhii K Home Page © 2003-2024 |