В прошлом до добавления этих модулей программа работала нормально, функция "GetFileNamefromLink" не может работать без ",ShlObj, Windows,ComObj,ActiveX;".
вот эти ошибки
- Код: Выделить всё
unit1.pas(59,43) Hint: Local variable "FileInfo" does not seem to be initialized
unit1.pas(82,14) Error: Incompatible type for arg no. 1: Got "TSearchRec", expected "LongWord"
unit1.pas(111) Fatal: There were 1 errors compiling module, stopping
Алгоритм этой программы таков
1. когда я нажимаю кнопку 1 программа сканирует папку или диск, находит запускателей вирусов т.е ярлыков.lnk и заносит их в лист бокс
2. при нажатии на кнопку 3 значение выбранного элемента Лист Бокса заносится в Edit2.Text
3. при нажатии на кнопку 4 должно быть выведено на экран путь вируса, функция GetFileNamefromLink возврашает путь местоположения вируса.
вот сама программа
- Код: Выделить всё
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls
,ShlObj, Windows,ComObj,ActiveX;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
function GetFileNamefromLink(LinkFileName: string): string;
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
FileInfo: TWin32FINDDATA;
WidePath: array[0..MAX_PATH] of WideChar;
Buff: array[0..MAX_PATH] of Char;
begin
Result := '';
if (fileexists(Linkfilename) = false) then
exit;
MyObject := CreateComObject(CLSID_ShellLink);
MyPFile := MyObject as IPersistFile;
MySLink := MyObject as IShellLink;
StringToWideChar(LinkFileName, WidePath, SizeOf(WidePath));
MyPFile.Load(WidePath, STGM_READ);
MySLink.GetPath(Buff, Max_PATH, FileInfo, SLGP_UNCPRIORITY);
Result := buff;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
F: TSearchRec;
Path: string;
Attr: Integer;
begin
{Искать все файлы в заданной директории с расширение .wav}
Path := edit1.Text;//'c:\a\*.lnk'(*+'.mp3'*);
{которые имеют атрибуты "Только для чтения" и "Архивный"}
Attr := faAnyFile;
FindFirst(Path, Attr, F);
{Если хотя бы один файл найден, то продолжить поиск}
if F.name <> '' then
begin
ListBox1.Items.Add('c:\'+F.name); {Добавление в TListBox имени найденного файла}
while FindNext(F) = 0 do
ListBox1.Items.Add('c:\'+F.name);
end;
FindClose(F);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s:integer;
begin
s:=ListBox1.Items.Count;
ShowMessage(IntToStr(s));
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit2.Text:=ListBox1.Items[Listbox1.itemindex];
end;
procedure TForm1.Button4Click(Sender: TObject);
var
res:string;
GetFileName:string;
begin
GetFileName:= edit2.Text;
res:=GetFileNamefromLink(GetFileName);
ShowMessage(res);
end;
end.