Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как создать ярлык?


Автор: Klin 22.11.2002, 05:05
сабж

Автор: Baa 22.11.2002, 07:18
Блин... когда ж люди начнут в ФАК заглядывать... ведь для вас ж стараемси...
http://www.forum.vingrad.ru/cgi-bin/newforum/ikonboard.cgi?act=ST;f=31;t=957

Автор: Klin 22.11.2002, 18:09
Воо ошибки:
Код
[C++ Ошибка] Unit1.cpp(20): E2268 Call to undefined function 'CoInitialize'
 [C++ Ошибка] Unit1.cpp(21): E2451 Undefined symbol 'IShellLink'
 [C++ Ошибка] Unit1.cpp(21): E2451 Undefined symbol 'SLink'
 [C++ Ошибка] Unit1.cpp(22): E2268 Call to undefined function 'CoCreateInstance'
 [C++ Ошибка] Unit1.cpp(22): E2451 Undefined symbol 'CLSID_ShellLink'
 [C++ Ошибка] Unit1.cpp(23): E2451 Undefined symbol 'IID_IShellLink'
 [C++ Ошибка] Unit1.cpp(32): E2451 Undefined symbol 'LPITEMIDLIST'
 [C++ Ошибка] Unit1.cpp(32): E2379 Statement missing;
 [C++ Ошибка] Unit1.cpp(34): E2268 Call to undefined function 'SHGetSpecialFolderLocation'
 [C++ Ошибка] Unit1.cpp(34): E2451 Undefined symbol 'CSIDL_DESKTOP'
 [C++ Ошибка] Unit1.cpp(34): E2451 Undefined symbol 'pl'
 [C++ Ошибка] Unit1.cpp(35): E2268 Call to undefined function 'SHGetPathFromIDList'
 [C++ Ошибка] Unit1.cpp(39): E2034 Cannot convert 'unsigned short *' to 'wchar_t *'
 [C++ Ошибка] Unit1.cpp(39): E2342 Type mismatch in parameter 'lpWideCharStr' (wanted 'wchar_t *', got 'unsigned short *')
 [C++ Ошибка] Unit1.cpp(40): E2034 Cannot convert 'unsigned short *' to 'const wchar_t *'
 [C++ Ошибка] Unit1.cpp(40): E2342 Type mismatch in parameter 'pszFileName' (wanted 'const wchar_t *', got 'unsigned short *')
 [C++ Ошибка] Unit1.cpp(42): E2268 Call to undefined function 'CoUninitialize'
 [C++ Предупреждение] Unit1.cpp(43): W8004 'HRes' is assigned a value that is never used

Автор: Baa 23.11.2002, 00:29
Ну а всякие ShellApi подключить и т.д.?
з.ы. тут уж все в твоих руках... у меня все это работает...

Автор: Klin 23.11.2002, 01:29
А как (совсем забыл)?

Автор: Baa 23.11.2002, 03:11
я хз как это в билдере делается... наерно нечто навроде
#include <shellapi.hpp>
или как-то так...

Автор: Klin 23.11.2002, 03:46
hpp?

Автор: Klin 23.11.2002, 04:03
Код
[C++ Ошибка] Unit1.cpp(20): E2268 Call to undefined function 'CoInitialize'
 [C++ Ошибка] Unit1.cpp(21): E2451 Undefined symbol 'IShellLink'
 [C++ Ошибка] Unit1.cpp(21): E2451 Undefined symbol 'SLink'
 [C++ Ошибка] Unit1.cpp(22): E2268 Call to undefined function 'CoCreateInstance'
 [C++ Ошибка] Unit1.cpp(22): E2451 Undefined symbol 'CLSID_ShellLink'
 [C++ Ошибка] Unit1.cpp(23): E2451 Undefined symbol 'IID_IShellLink'
 [C++ Ошибка] Unit1.cpp(32): E2451 Undefined symbol 'LPITEMIDLIST'
 [C++ Ошибка] Unit1.cpp(32): E2379 Statement missing;
 [C++ Ошибка] Unit1.cpp(34): E2268 Call to undefined function 'SHGetSpecialFolderLocation'
 [C++ Ошибка] Unit1.cpp(34): E2451 Undefined symbol 'CSIDL_DESKTOP'
 [C++ Ошибка] Unit1.cpp(34): E2451 Undefined symbol 'pl'
 [C++ Ошибка] Unit1.cpp(35): E2268 Call to undefined function 'SHGetPathFromIDList'
 [C++ Ошибка] Unit1.cpp(39): E2034 Cannot convert 'unsigned short *' to 'wchar_t *'
 [C++ Ошибка] Unit1.cpp(39): E2342 Type mismatch in parameter 'lpWideCharStr' (wanted 'wchar_t *', got 'unsigned short *')
 [C++ Ошибка] Unit1.cpp(40): E2034 Cannot convert 'unsigned short *' to 'const wchar_t *'
 [C++ Ошибка] Unit1.cpp(40): E2342 Type mismatch in parameter 'pszFileName' (wanted 'const wchar_t *', got 'unsigned short *')
 [C++ Ошибка] Unit1.cpp(42): E2268 Call to undefined function 'CoUninitialize'

Не хочет!

Автор: Baa 23.11.2002, 05:30
#include <ShlObj.hpp>
#include <ActiveX.hpp>
#include <ComObj.hpp>
#include <ShellApi.hpp>

Автор: Klin 23.11.2002, 16:17
Теже самые ошибки...

Автор: Klin 23.11.2002, 17:57
Baa, слушай можешь на мыло мне бросить проект?

Мыло: [email protected]

Автор: HexoGenus 26.11.2002, 06:47
Цитата(Klin @ 23.11.2002, 09:57)
Baa, слушай можешь на мыло мне бросить проект?

Мыло: [email protected]

Хммммм.... на моей первой версии Буилдера работает
првда пришлось малость подправить...
Для эксперимента я создал форму и на ней кнопочку создающую ярлык...
проверь все ли ты написал и куда вставил #include
Код

//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include <shlobj.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
fastcall TForm1::Button1Click(TObject *Sender)
{
//
/*
Shell link creator, by Iliya
mailto: [email protected]
*/
//......
  CoInitialize(NULL);
  IShellLink * SLink;
  HRESULT HRes = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
  IID_IShellLink, ( LPVOID*)&SLink);
  HRes = SLink->SetPath("C:\\app.exe");// Путь к запускаемой программе, для которой создаем ярлык
  HRes = SLink->SetWorkingDirectory("C:\\");// Рабочий каталог для програмы

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

 // WORD path[MAX_PATH];
 // Тип Ворд исправил на вчар :-)))
  WCHAR path[MAX_PATH];
  TCHAR buf1[MAX_PATH];

  LPITEMIDLIST pl;

  SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pl);
  SHGetPathFromIDList(pl, buf1);

  lstrcat(buf1, "\\");
  lstrcat(buf1, "link_for_app_1.lnk");

  MultiByteToWideChar(CP_ACP, 0, buf1, -1, path, MAX_PATH);
  HRes = PF->Save(path, TRUE);// Сохранить
  // А нафиг нам HRes ???
  // У меня сразу все заработало
  // правда пришлось по диску искать куда link_for_app_1.lnk
  // забрасывается :-)
  SLink->Release();
  CoUninitialize();
}
//---------------------------------------------------------------------------

Автор: Fantasist 27.11.2002, 09:57
Цитата
// А нафиг нам HRes
 // У меня сразу все заработало

А HRes - это как бы для контроля успешности выполнения.  :)
Только переменная есть, а контроль все равно не производиться.

Автор: Klin 27.11.2002, 17:10
Код
[C++ Ошибка] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Ошибка] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Ошибка] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Ошибка] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'

Ну что за зараза!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:sneaky2  :sneaky2  :sneaky2  :sneaky2  :sneaky2  :sneaky2  :sneaky2

Автор: Klin 30.12.2002, 20:42
YYYYYYYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSSSS
:) :)  :) :) :) :) :) :)
Код
//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
#include <vcl.h>

#pragma hdrstop


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
fastcall TForm1::Button1Click(TObject *Sender)
{
CoInitialize(NULL);
 IShellLink * SLink;
 HRESULT HRes = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
 IID_IShellLink, ( LPVOID*)&SLink);
 HRes = SLink->SetPath("C:\\app.exe");// Путь к запускаемой программе, для которой создаем ярлык
 HRes = SLink->SetWorkingDirectory("C:\\");// Рабочий каталог для програмы

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

// WORD path[MAX_PATH];
// Тип Ворд исправил на вчар :-)))
 WCHAR path[MAX_PATH];
 TCHAR buf1[MAX_PATH];

 LPITEMIDLIST pl;

 SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pl);
 SHGetPathFromIDList(pl, buf1);

 lstrcat(buf1, "\\");
 lstrcat(buf1, "link_for_app_1.lnk");

 MultiByteToWideChar(CP_ACP, 0, buf1, -1, path, MAX_PATH);
 HRes = PF->Save(path, TRUE);// Сохранить
 // А нафиг нам HRes
 // У меня сразу все заработало
 // правда пришлось по диску искать куда link_for_app_1.lnk
 // забрасывается :-)
 SLink->Release();
 CoUninitialize();

}
//---------------------------------------------------------------------------

НАКОНЕЦТО! :happy

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)