Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.10;
Скачать: CL | DM;

Вниз

Как прочитать путь к файлу из *.lnk (ярлыка)   Найти похожие ветки 

 
vulsims   (2002-08-25 12:17) [0]

Я читаю простым образом открываю файл *.lnk и по байтам извлекаю
путь. Все было бы хорошо если бы структура файла была все время
одинаковой, так нет Форточки пишут ярлыки как хотят.

Вот сам вопрос, как продвинуто прочитать ярлык, Винда его читает
как то?


 
Song ©   (2002-08-25 16:54) [1]

См. методы класса iShellLink


 
Mike_Z   (2002-08-27 10:20) [2]

Не будем так лаконичны ;-)))
В Uses добавь, по моему, ShlObj, ComObj, ActiveX.


Procedure CreateLink(Const LinkFile: String; Const IcoIndex: Integer; Const ShowCmd: DWORD;
Const Path, Params, WorkDir, Description, IconPath: String);
Var
IObject : IUnknown;
SLink : IShellLink;
PFile : IPersistFile;
Begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject As IShellLink;
PFile := IObject As IPersistFile;
With SLink Do
Begin
SetArguments(PChar(Params));
SetDescription(PChar(Description));
SetPath(PChar(Path));
SetIconLocation(PChar(IconPath), IcoIndex);
SetShowCmd(ShowCmd);
SetWorkingDirectory(PChar(WorkDir));
End;
PFile.Save(PWChar(WideString(LinkFile)), False);
End;

Function GetLinkParams(LinkFile: String; Var IcoIndex: Integer; Var ShowCmd: DWORD;
Var Path, Params, WorkDir, Description, IconPath: String): Boolean;
Var
WideFile : WideString;
Buf : Array[1..1024] Of Char;
I : Integer;
fd : TWin32FindData;

DefObject : IUnknown;
DefSLink : IShellLink;
DefPFile : IPersistFile;
Begin
Result := False;
DefObject := CreateComObject(CLSID_ShellLink);
DefSLink := DefObject As IShellLink;
DefPFile := DefObject As IPersistFile;
WideFile := LinkFile;
If DefPFile.Load(PWChar(WideFile), 0) = S_OK Then
With DefSLink Do
Begin
If GetDescription(@Buf, SizeOf(Buf)) = NOERROR Then
Description := Copy(Buf, 1, lstrlen(@Buf)) Else Description := "";
If GetArguments(@Buf, SizeOf(Buf)) = NOERROR Then
Params := Copy(Buf, 1, lstrlen(@Buf)) Else Params := "";
If GetPath(@Buf, SizeOf(Buf), fd, 0) = NOERROR Then
Path := Copy(Buf, 1, lstrlen(@Buf)) Else Path := "";
If GetWorkingDirectory(@Buf, SizeOf(Buf)) = NOERROR Then
WorkDir := Copy(Buf, 1, lstrlen(@Buf)) Else WorkDir := "";
If GetIconLocation(@Buf, SizeOf(Buf), I) = NOERROR Then
Begin
IconPath := Copy(Buf, 1, lstrlen(@Buf));
IcoIndex := I;
End Else Begin IconPath := "";
IcoIndex := 0;
End;
If GetShowCmd(I) = NOERROR Then
ShowCmd := I Else ShowCmd := SW_SHOW;
Result := True;
End;
End;


 
Dimka Maslov ©   (2002-08-27 14:17) [3]

http://delphibase.endimus.com/?action=viewtopic&topic=filelink



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
4-32055
SPeller
2002-08-22 20:44
2002.10.10
Скроллбар


1-31802
Tundra
2002-10-02 09:21
2002.10.10
Как узнать какие DLL и какие функции юзает приложение.


1-31734
AFrolov
2002-09-30 15:09
2002.10.10
как рисовать стрелки направления сортировки в загаловках DBGrig?


1-31688
REA
2002-09-25 16:14
2002.10.10
DLL и компоненты


14-31950
Солнышко
2002-09-13 10:57
2002.10.10
Здесь есть неженатые?