Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> shortcut's link information 
:(
    Опции темы
MFSham
Дата 2.10.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Столкнулся со следующей проблемой : надо выдернуть из файла *.lnk путь к *.exe. Решение данной проблемы нашел в drkb. Вот исходник :
Код

uses  
  ShlObj,  
  ComObj,  
  ActiveX,  
  CommCtrl;  

type  
  PShellLinkInfoStruct = ^TShellLinkInfoStruct;  
  TShellLinkInfoStruct = record  
    FullPathAndNameOfLinkFile: array[0..MAX_PATH] of Char;  
    FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of Char;  
    ParamStringsOfFileToExecute: array[0..MAX_PATH] of Char;  
    FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of Char;  
    Description: array[0..MAX_PATH] of Char;  
    FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of Char;  
    IconIndex: Integer;  
    HotKey: Word;  
    ShowCommand: Integer;  
    FindData: TWIN32FINDDATA;  
  end;  

procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);  
var  
  ShellLink: IShellLink;  
  PersistFile: IPersistFile;  
  AnObj: IUnknown;  
begin  
  // access to the two interfaces of the object  
  AnObj       := CreateComObject(CLSID_ShellLink);  
  ShellLink   := AnObj as IShellLink;  
  PersistFile := AnObj as IPersistFile;  

  // Opens the specified file and initializes an object from the file contents.  
  PersistFile.Load(PWChar(WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile)), 0);  
  with ShellLink do  
  begin  
    // Retrieves the path and file name of a Shell link object.  
    GetPath(lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute,  
      SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile),  
      lpShellLinkInfoStruct^.FindData,  
      SLGP_UNCPRIORITY);  

    // Retrieves the description string for a Shell link object.  
    GetDescription(lpShellLinkInfoStruct^.Description,  
      SizeOf(lpShellLinkInfoStruct^.Description));  

    // Retrieves the command-line arguments associated with a Shell link object.  
    GetArguments(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute,  
      SizeOf(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));  

    // Retrieves the name of the working directory for a Shell link object.  
    GetWorkingDirectory(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy,  
      SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));  

    // Retrieves the location (path and index) of the icon for a Shell link object.  
    GetIconLocation(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon,  
      SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon),  
      lpShellLinkInfoStruct^.IconIndex);  

    // Retrieves the hot key for a Shell link object.  
    GetHotKey(lpShellLinkInfoStruct^.HotKey);  

    // Retrieves the show (SW_) command for a Shell link object.  
    GetShowCmd(lpShellLinkInfoStruct^.ShowCommand);  
  end;  
end;  

procedure TForm1.Button1Click(Sender: TObject);  
const  
  br = #13#10;  
var  
  LinkInfo: TShellLinkInfoStruct;  
  s: string;  
begin  
  FillChar(LinkInfo, SizeOf(LinkInfo), #0);  
  LinkInfo.FullPathAndNameOfLinkFile := 'C:\WINNT\Profiles\user\Desktop\FileName.lnk';  
  GetLinkInfo(@LinkInfo);  
  with LinkInfo do  
    s := FullPathAndNameOfLinkFile + br +  
      FullPathAndNameOfFileToExecute + br +  
      ParamStringsOfFileToExecute + br +  
      FullPathAndNameOfWorkingDirectroy + br +  
      Description + br +  
      FullPathAndNameOfFileContiningIcon + br +  
      IntToStr(IconIndex) + br +  
      IntToStr(LoByte(HotKey)) + br +  
      IntToStr(HiByte(HotKey)) + br +  
      IntToStr(ShowCommand) + br +  
      FindData.cFileName + br +  
      FindData.cAlternateFileName;  
  Memo1.Lines.Add(s);  
end;  




По нажатию кнопки имеется такая строка :
LinkInfo.FullPathAndNameOfLinkFile := 'C:\WINNT\Profiles\user\Desktop\FileName.lnk'
Проблема в том, что мне надо загнать в LinkInfo.FullPathAndNameOfLinkFile
стороку, которая получается в ходе выполнения программы, т.е.
LinkInfo.FullPathAndNameOfLinkFile := str (str : string)
не проходит, т.к. не совподают типы данных.
Может кто подскажет что нужно сделать?
Заранее благодарен.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Albinos_x
Дата 3.10.2005, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



Код

LinkInfo.FullPathAndNameOfLinkFile :=Char(str (str : string));



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
MFSham
Дата 3.10.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Не проходит smile
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Romikgy
Дата 4.10.2005, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



А так:
Код

StrPCopy(LinkInfo.FullPathAndNameOfLinkFile,'C:\WINNT\Profiles\user\Desktop\FileName.lnk');



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MFSham
Дата 5.10.2005, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Большое спасибо smile
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.