Форум: "WinAPI";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
ВнизКак прочитать путь к файлу из *.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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c