Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Информация из ярлыка (*.lnk), Перевод кода Delphi 
:(
    Опции темы
Malloc
Дата 15.11.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 16.8.2005
Где: Челябинск, ЧМЗ

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



Хочу переделать код Delphi для вытаскивания информации о ярлыке, но не знаю, какие заголовочные файлы включить.

В Delphi включаются следующие модули:
Код

  uses    
     ShlObj,    
     ComObj,    
     ActiveX,    
     CommCtrl; 


Какие мне нужно взять заголовочные файлы? Функцию я написал в отдельном от окна модуле. При компиляции пишет, что не знает таких типов и констант, как IShellLink, IPersistFile, CreateComObject, CLSID_ShellLink, SLGP_UNCPRIORITY. 

Думаю, что надо включить ComObj.hpp, ActiveX.hpp, CommCtrl.hpp, но все равно есть ошибки.
PM MAIL   Вверх
Partizan
Дата 15.11.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



а shlobj.hpp не подключал?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Malloc
Дата 15.11.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 16.8.2005
Где: Челябинск, ЧМЗ

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



Подключил, все равно не находит такие типы. 

Поискал, где IShellLink определен, нашел shobjidl.h. Но при подключении он, по-видимому, конфликтует с vcl.h. Пишет:

[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'

При отдельной компиляции модуля возникает всего одна ошибка: 

[C++ Error] myclasses.cpp(13): E2451 Undefined symbol 'CLSID_ShellLink'.   

В данном модуле я не использую vcl.h, но когда я его прикрепляю к форме, появляются ошибки выше. Может, нужно вместо shobjidl.h нужно взять какой-то другой файл? 
PM MAIL   Вверх
SenkraD
Дата 15.11.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



либо пишы эту функцию в другом файле, либо в самом верху напиши такое
#define NO_WIN32_LEAN_AND_MEAN


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Partizan
Дата 16.11.2006, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



Цитата(Malloc @ 15.11.2006,  19:15)
Подключил, все равно не находит такие типы. 

Поискал, где IShellLink определен, нашел shobjidl.h. Но при подключении он, по-видимому, конфликтует с vcl.h. Пишет:

[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'

При отдельной компиляции модуля возникает всего одна ошибка: 

[C++ Error] myclasses.cpp(13): E2451 Undefined symbol 'CLSID_ShellLink'.   

В данном модуле я не использую vcl.h, но когда я его прикрепляю к форме, появляются ошибки выше. Может, нужно вместо shobjidl.h нужно взять какой-то другой файл?

про избавление от multiple declaration была тема...я помню точно... фпоиск...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
dumb
Дата 16.11.2006, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Partizan, над твоим постом рецепт.
PM MAIL   Вверх
Malloc
Дата 16.11.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 16.8.2005
Где: Челябинск, ЧМЗ

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



Спасибо, помогло.  
PM MAIL   Вверх
Malloc
Дата 16.11.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 16.8.2005
Где: Челябинск, ЧМЗ

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



Теперь выдает исключение. Фрагмент кода

Код

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);  


я переделал так:

Код

  IShellLink    *ShellLink;
  IPersistFile  *PersistFile;
  IUnknown      *AnObj = CreateComObject(CLSID_ShellLink);

  // access to the two interfaces of the object
  ShellLink   = (IShellLink*)  AnObj;
  PersistFile = (IPersistFile*)AnObj;


  // Opens the specified file and initializes an object from the file contents.

  PersistFile->Load(WideString(lpShellLinkInfoStruct->FullPathAndNameOfLinkFile).c_bstr(), 0);


Появляется исключительная ситуация в последней строчке (Load...). Может быть, я типы как-то неправильно перевел (из  IUnknown в IPersistFile)?
PM MAIL   Вверх
SenkraD
Дата 16.11.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Ну вот тебе пример простенькой програмки:
вот функция для получения инфы о ярлыке
Код

#include <shlobj.h>

AnsiString InfLink(AnsiString Path)
{
 AnsiString str;
 IShellLink *Link;
 char S[255];
 _WIN32_FIND_DATA pfd;
 DWord fFlags;
 Word Hotkey;
 int ShowCmd;
 IPersistFile *ppf;

 CoInitialize(NULL);
 CoCreateInstance(CLSID_ShellLink, NULL,
           CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&Link);
 Link->QueryInterface(IID_IPersistFile, (void**)&ppf);



 if (ppf->Load(WideString(Path), true)== S_OK)
 {
   str=str + ("Ярлык - " + Path) + "\n";
   Link->GetPath(S, 256, &pfd, fFlags);
   str=str + "Связан с объектом - " + AnsiString(S)  + "\n";
   Link->GetDescription(S, 256);
   str=str + "Описание - " +AnsiString (S) + "\n";
   Link->GetWorkingDirectory(S, 256);
   str=str + "Рабочий каталог - " + AnsiString(S) + "\n";
   Link->GetArguments(S, 256);
   if (S != "")
      str=str +"Аргументы отсутствуют" + "\n";
      else str = str + "Аргументы - " +  AnsiString (S) + "\n";
   Link->GetHotkey(&Hotkey);
   if (Hotkey == 0)
      str=str + "Горячие клавиши не назначены" + "\n";
      else str = str + "Горячие клавиши " + AnsiString(Hotkey) + "\n";
   Link->GetShowCmd(&ShowCmd);
   switch( ShowCmd)
    {
     case SW_SHOWNORMAL: str=str + "Обычный размер окна";
          break;
     case SW_MAXIMIZE: str=str + "Окно развертывается на весь экран";
          break;
     case SW_SHOWMINNOACTIVE: str=str + "Окно свертывается в значок";
    }
 }
 CoUninitialize();
 return str;
}


Это сообщение отредактировал(а) SenkraD - 17.11.2006, 00:11

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  Example.rar 3,81 Kb


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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