Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как убрать кавычки в свойствах ярлыка? 
:(
    Опции темы
Коп
  Дата 20.8.2003, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 11.7.2002

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



Есть функция, к-ая создает ярлык в указанном месте диска к указанному объекту. Но вот в чем проблема: если в передаваемом имени объекта стоят пробелы, то это имя в заключается в двойные кавычки. А как же тогда передавать параметры для запускаемой программы (полное имя к-ой передается)? notify.gif
Подскажите, пожалуйста, очень надо!

А вот и сама функция:
Код
#include <shlobj.h>  //Для работы с ярлыками (функция Create_Icon)
#include <dir.h>  //Для функции Is_Dir (char *dir_name)
#include <string.h>
//---------------------------------------------------------------------------

void __fastcall Create_Icon(char *link_fullname, char *prog_name, char *ico4link = NULL, int ico_num = 0, char *work_dir = NULL);
bool __fastcall Is_Dir(char *dir_name);
//---------------------------------------------------------------------------

void __fastcall Create_Icon(char *link_fullname, char *prog_name, char *ico4link, int ico_num, char *work_dir)
{//Функция создает ярлык с зад-ым именем icon_fullname к объекту prog_name с
//рабочим каталогом work_dir (если он не указан явно, то это каталог, в
//котором лежит этот объект), значком из ico4link под номером ico_num
//#include <shlobj.h>
CoInitialize(NULL);
IShellLink *SLink;
HRESULT HRes = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
IID_IShellLink, ( LPVOID*)&SLink);
HRes = SLink->SetPath(prog_name);// Путь к запускаемой программе, для которой создаем ярлык

if (ico4link != NULL)//Если ресурс значка указан явно, то устанавливаем его
HRes = SLink->SetIconLocation(ico4link, ico_num);//Устанавливает значок для ярлыка

if (work_dir[0] != NULL) goto dir_set; //Если р. каталог задан, используем его
work_dir = prog_name;
if (!Is_Dir(work_dir))
  {//Если файл НЕ директория,то берем ее рабочую директорию
  work_dir[strlen(work_dir) - strlen(strrchr(work_dir, '\') + 1)] = '<!--POST BOX-->';
  }
dir_set:

HRes = SLink->SetWorkingDirectory(work_dir);// Рабочий каталог для програмы

IPersistFile *PF;
HRes = SLink->QueryInterface(IID_IPersistFile, (LPVOID*)&PF);

wchar_t *w_link_name = (wchar_t *) malloc(MAX_PATH);
MultiByteToWideChar(CP_ACP, 0, link_fullname, -1, w_link_name, MAX_PATH);

HRes = PF->Save(w_link_name, TRUE);
SLink->Release();
CoUninitialize();
w_link_name = NULL;
}
//---------------------------------------------------------------------------

bool __fastcall Is_Dir(char *dir_name)
{//Проверяет, является ли передаваемое имя директорией
//#include <dir.h>
char *cur_dir;
cur_dir = (GetCurrentDir()).c_str();
if (chdir(dir_name)) return false;
chdir(cur_dir);
return true;
}
//---------------------------------------------------------------------------

PM MAIL ICQ   Вверх
kruchinin
Дата 20.8.2003, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.4.2003

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



Если имя содержит пробелы,то
например
Progr Win.exe

<путь...\>"Progr Win.exe" <параметр 1> <параметр 2>...
PM MAIL   Вверх
Step
Дата 21.8.2003, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



kruchinin, а не в ковычки случайно...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Коп
Дата 21.8.2003, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 11.7.2002

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



Может не очень понятно написал sad.gif
Приведу пример:
Мне надо запустить программу
Код
C:\WWW\PHP\php.exe
и передать ей параметры
Код
-lASD -ASDD

Таким образом функции я передаю строку следующего содержания:
Код
C:\WWW\PHP\php.exe -lASD -ASDD
И в свойствах ярлыка она заключается в кавычки, которых БЫТЬ НЕ ДОЛЖНО!

Надеюсь, сейчас понятно, что мне надо wink.gif
PM MAIL ICQ   Вверх
kruchinin
Дата 21.8.2003, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.4.2003

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



Могу только дать пример функции для создания ярлыка
Код

HRESULT CreateLink(LPCSTR lpszPathObj,
   LPSTR lpszPathLink, LPSTR lpszDesc, LPSTR lpszDir)
{
   HRESULT hres;
   IShellLink* psl;


   // Get a pointer to the IShellLink interface.
   hres = CoCreateInstance(CLSID_ShellLink, NULL,
       CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&psl);
   if (SUCCEEDED(hres)) {
       IPersistFile* ppf;

       // Set the path to the shortcut target, and add the
       // description.
       hres = psl->SetPath(lpszPathObj);

       hres = psl->SetDescription(lpszDesc);

 hres = psl->SetWorkingDirectory(lpszDir);

      // Query IShellLink for the IPersistFile interface for saving the
      // shortcut in persistent storage.
       hres = psl->QueryInterface( IID_IPersistFile,
           (void**)&ppf);

       if (SUCCEEDED(hres)) {
           WORD wsz[MAX_PATH];
 
 

           // Ensure that the string is ANSI.
           int i=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, lpszPathLink, -1,
               wsz, MAX_PATH);
 

           // Save the link by calling IPersistFile::Save.
           hres = ppf->Save(wsz , TRUE);
           ppf->Release();
       }
       psl->Release();
   }
   return hres;
}

1-й параметр - путь до exe файла
2-й параметр - путь до создаваемого ярлыка(соответственно и имя)
3-й параметр - название ярлыка
4-й параметр - рабочая папка ярлыка
Возможно некоторые параметры не совсем я верно описал, но у меня эта функция нормально создавала ярлыки. Кстати она взята (мной сильно доработана) из помощи Borland C++ 5.0
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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