Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2008, 14:25   #1
MAcK
Форумчанин
 
Регистрация: 09.11.2006
Сообщений: 274
Плохо C# Создания ярлыка

Как создать ярлык, чтобы не таскать с собой длл Interop.IWshRuntimeLibrary.dll
Есть ли какието апи функции?
Единственный приличный формат, разработанный Microsoft'ом, - format c:
MAcK вне форума Ответить с цитированием
Старый 02.07.2008, 22:55   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

[DLLImport] + "shell32.dll" + IShellLink

Лови геморой...

.
Вложения
Тип файла: rar shell.rar (4.3 Кб, 124 просмотров)

Последний раз редактировалось merax; 02.07.2008 в 23:21.
merax вне форума Ответить с цитированием
Старый 10.07.2008, 12:40   #3
MAcK
Форумчанин
 
Регистрация: 09.11.2006
Сообщений: 274
По умолчанию

Большое спасибо
Единственный приличный формат, разработанный Microsoft'ом, - format c:
MAcK вне форума Ответить с цитированием
Старый 14.08.2008, 17:27   #4
MAcK
Форумчанин
 
Регистрация: 09.11.2006
Сообщений: 274
Вопрос

Цитата:
Сообщение от merax Посмотреть сообщение
[DLLImport] + "shell32.dll" + IShellLink

Лови геморой...

.
Всё работает замечательно, вот только есть ещё одна проблема ... надо создать ярлык из ярлыка
Из ярлыка надо достать аргументы ... не подскажешь каг??? или как(из примера)в переменную IWshShortcut присвоить "ярлык", чтобы потом достать аргумент?
Единственный приличный формат, разработанный Microsoft'ом, - format c:
MAcK вне форума Ответить с цитированием
Старый 14.08.2008, 18:48   #5
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Аргументы ярлыка...

Инициализировать, если это еще не было сделано, COM-библиотеку вызовом функции CoInitialize (или CoInitializeEx).
Создать с помощью функции CoCreateInstance экземпляр COM-класса ShellLink и получить указатель на его интерфейс IPersistFile.
Загрузить вызовом метода Load требуемый ярлык, указав желаемый режим доступа к его свойствам — чтение (STGM_READ), запись (STGM_WRITE) или чтение/запись (STGM_READWRITE).
Получить указатель на интерфейс IShellLink „нашего“ COM-объекта, вызвав метод QueryInterface через полученный ранее указатель на IPersistFile.
Если существует вероятность того, что объект, на который ссылается ярлык, был перемещен — вызвать через полученный указатель метод Resolve для поиска объекта.
Получить и (или) назначить требуемые свойства ярлыка, вызвав через указатель на IShellLink его методы GetXxxx и (или) SetXxxx соответственно.
При необходимости — сохранить сделанные изменения с помощью метода Save интерфейса IPersistFile.
„Отпустить“ полученные интерфейсы, вызвав для каждого из них метод Release.
Завершить, если это необходимо, работу с COM-библиотекой вызовом функции CoUninitialize (перед этим можно вызвать функцию CoFreeUnusedLibraries для выгрузки из памяти всех неиспользуемых более COM-серверов).

Код:
#include "stdafx.h"
#include <conio.h>

#include <objidl.h>
#include <shlobj.h>


void print_shortcut_target(LPCTSTR pszShortcut)
{
   IPersistFile* ppf;
   IShellLink* pshl;
   WIN32_FIND_DATA wfd;

   // инициализируем COM-библиотеку
   ::CoInitialize(NULL);

   // создаем COM-объект и получаем указатель на IPersistFile
   ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
      IID_IPersistFile, (void**)&ppf);

   // открываем ярлык
#if defined(_UNICODE)
   ppf->Load(pszShortcut, STGM_READ);
#else
   LPWSTR pwszTemp = new WCHAR[_MAX_PATH];
   mbstowcs(pwszTemp, pszShortcut, _MAX_PATH);
   ppf->Load(pwszTemp, STGM_READ);
   delete[] pwszTemp;
#endif

   // получаем указатель на IShellLink
   ppf->QueryInterface(IID_IShellLink, (void**)&pshl);

   // ищем объект, на который ссылается ярлык
   pshl->Resolve(NULL, SLR_ANY_MATCH | SLR_NO_UI);

   // получаем имя объекта и выводим его на консоль
   LPTSTR pszTarget = new TCHAR[_MAX_PATH];
   pshl->GetPath(pszTarget, _MAX_PATH, &wfd, 0);
   _putts(pszTarget);
   delete[] pszTarget;

   pshl->Release();
   ppf->Release();

   ::CoFreeUnusedLibraries();
   ::CoUninitialize();
}

int _tmain(int argc, _TCHAR* argv[])
{
	print_shortcut_target("C:\\Users\\merax\\Desktop\\Visual C++ 2008.lnk");
	getch();
	return 0;
}
Пример получает полный путь до исполняемого файла, от его ярлыка...
merax вне форума Ответить с цитированием
Старый 15.08.2008, 09:17   #6
MAcK
Форумчанин
 
Регистрация: 09.11.2006
Сообщений: 274
По умолчанию

Спасибо, как раз в нете нашёл что нужно сначала нужно
>Инициализировать, если это еще не было сделано, COM-библиотеку вызовом функции CoInitialize

а то пробовал делать всё остальное без этого и получал null, Вы ещё раз подтвердили мной прочитанное ... кленты - это редиски
Единственный приличный формат, разработанный Microsoft'ом, - format c:
MAcK вне форума Ответить с цитированием
Старый 16.08.2008, 12:22   #7
MAcK
Форумчанин
 
Регистрация: 09.11.2006
Сообщений: 274
По умолчанию

Сори, не глянул на язык, а еcть примерчик на с#?
Единственный приличный формат, разработанный Microsoft'ом, - format c:
MAcK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создания католога Lostoffuture PHP 2 01.07.2008 07:50
создания бота kobras Работа с сетью в Delphi 1 01.12.2007 14:41
способы создания баз Ванька БД в Delphi 2 20.11.2007 12:42
Создания Класса Mickle Общие вопросы Delphi 1 30.04.2007 00:44
Свойства ярлыка Fainder Win Api 1 26.04.2007 15:26