18 / 18 / 3
Регистрация: 28.06.2010
Сообщений: 77
1

Программно создать ярлык

16.08.2012, 09:49. Показов 5669. Ответов 4
Метки нет (Все метки)

Всем привет. Необходимо создать ярлык сетевого диска и поместить на рабочий стол.
Подскажите как это сделать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2012, 09:49
Ответы с готовыми решениями:

Как программно создать ярлык?
Прошу помощи знающих людей! Для курсовой сказали сделать установщик своей программы. Установщик...

Создать ярлык на рабочем столе
Как создать ярлык на рабочем столе?В чем ошибка? void CreateLink(String PathObj,String...

Программно создать ярлык к программе
День добрый понадобилось создать ярлык к моей программе. можете подсказать как это программно...

Создать программно ярлык с иконкой
Задача. Создать программно ярлык. Но не просто ярлык. А чтобы еще иконка была со своей картинкой....

4
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
16.08.2012, 11:14 2
Создание ярлыка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// для  использования функции необходимо подключить файл
// shlobj.h
//  lpszPathObj - путь к объекту, для которого будет
// создаваться ярлык
//  lpszPathLink - где будет создаватья ярлык
// lpszDesc - описание  ярлыка
HRESULT CreateLink(LPCSTR lpszPathObj, LPSTR  lpszPathLink, LPSTR lpszDesc)
{
    HRESULT hres;
    IShellLink  *psl;
    CoInitialize(NULL);
    hres =  CoCreateInstance(CLSID_ShellLink, NULL,
    CLSCTX_INPROC_SERVER,  IID_IShellLink, (void  **)&psl);
    if(SUCCEEDED(hres))
    {
        IPersistFile  *ppf;
        psl->SetPath(lpszPathObj);
        psl->SetDescription(lpszDesc);
        hres  = psl->QueryInterface(IID_IPersistFile,  (void**)&ppf);
        if(SUCCEEDED(hres))
        {
            wchar_t  wsz[MAX_PATH];
            MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz,  MAX_PATH);
            hres = ppf->Save(wsz,  true);
            ppf->Release();
        }
        psl->Release();
        CoUninitialize();
    }
    return  hres;
}
Или так
API обеспечивает COM-интерфейс по имени IShellLink, который позволяет Вам создать ярлык. Чтобы создать ярлык на рабочем столе, обратимся к объекту IShellLink, заполним его атрибуты, и сохраним ярлык.

Пример кода ниже демонстрирует, как сделать ярлык. В этом примере, ярлык будет сохранен в корне диска C
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//----------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // Позволим пользователю выбрать файл в диалоговом окне 
    // выбора файлов и затем создадим ярлык на этот файл.
    if(OpenDialog1->Execute())
        CreateShortCut(OpenDialog1->FileName);
}
//----------------------------------------------------------------------
void TForm1::CreateShortCut(const AnsiString &file)
{
    // IShellLink позволит нам создать ярлык.   
    // IPersistFile сохранит ярлык на жесткий диск С. 
    IShellLink* pLink;
    IPersistFile* pPersistFile;
 
    // Первым делом инициализируем COM библиотеку
    if(SUCCEEDED(CoInitialize(NULL)))
    {
        // Если инициализация прошла успешно, то получим
        // объект IShellLink вызвав CoCreateInstance.
        if(SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL,
                                      CLSCTX_INPROC_SERVER,
                                      IID_IShellLink, (void **) &pLink)))
        {
            // если все прошло успешно - заполним атрибуты ярлыка
            pLink->SetPath(file.c_str());
            pLink->SetDescription("Woo hoo, look at Homer's shortcut");
            pLink->SetShowCmd(SW_SHOW);
 
            // Теперь необходимо сохранить ярлык диске. Объект
            // IShellLink также содержит интерфейс IPersistFile.
            // Получим интерфейс IPersistFile вызвав QueryInterface.
            if(SUCCEEDED(pLink->QueryInterface(IID_IPersistFile,
                                               (void **)&pPersistFile)))
            {
                // Если все успешно, вызовем метод Save
                // объекта IPersistFile для сохранения/записи ярлыка.
                WideString strShortCutLocation("C:\\bcbshortcut.lnk");
                pPersistFile->Save(strShortCutLocation.c_bstr(), TRUE);
                pPersistFile->Release();
            }
            pLink->Release();
        }
 
        // После вызова CoInitialize необходимо вызвать CoUninitialize 
        CoUninitialize();
    }
}
вот еще описание
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <objidl.h> 
#include <shlobj.h> 
... 
//--------------------------------------------------------------------- 
#define HOTKEY(modifier,key) ((((modifier)&0xff)<<8)|((key)&0xff)) 
//--------------------------------------------------------------------- 
// Создание ярлыка 
// Входные параметры: 
//  pwzShortCutFileName - путь и имя ярлыка, например, "C:\\Блокнот.lnk" 
//  Если не указан путь, ярлык будет создан в папке, указанной в следующем параметре. 
//  Прим.: Windows сама НЕ добавляет к имени расширение .lnk 
//  pszPathAndFileName  - путь и имя exe-файла, например, "C:\\Windows\\NotePad.Exe" 
//  pszWorkingDirectory - рабочий каталог, например, "C:\\Windows" 
//  pszArguments        - аргументы командной строки, например, "C:\\Doc\\Text.Txt" 
//  wHotKey             - горячая клавиша, например, для Ctrl+Alt+A     HOTKEY(HOTKEYF_ALT|HOTKEYF_CONTROL,'A') 
//  iCmdShow            - начальный вид, например, SW_SHOWNORMAL 
//  pszIconFileName     - путь и имя файла, содержащего иконку, например, "C:\\Windows\\NotePad.Exe" 
//  int iIconIndex      - индекс иконки в файле, нумеруется с 0 
bool __fastcall CreateShortCut( 
                LPWSTR pwzShortCutFileName, 
                LPTSTR pszPathAndFileName, 
                LPTSTR pszWorkingDirectory, 
                LPTSTR pszArguments, 
                WORD wHotKey, 
                int iCmdShow, 
                LPTSTR pszIconFileName, 
                int iIconIndex) { 
   IShellLink * pSL; 
   IPersistFile * pPF; 
   HRESULT hRes; 
   // Получение экземпляра компонента "Ярлык" 
   hRes = CoCreateInstance(CLSID_ShellLink,
                           0,
                           CLSCTX_INPROC_SERVER,
                           IID_IShellLink,
                           (LPVOID *)&pSL); 
   if( SUCCEEDED(hRes) ) { 
      hRes = pSL->SetPath(pszPathAndFileName); 
      if( SUCCEEDED(hRes) ) { 
         hRes = pSL->SetArguments(pszArguments); 
         if( SUCCEEDED(hRes) ) { 
            hRes = pSL->SetWorkingDirectory(pszWorkingDirectory); 
            if( SUCCEEDED(hRes) ) { 
               hRes = pSL->SetIconLocation(pszIconFileName,iIconIndex); 
               if( SUCCEEDED(hRes) ) { 
                  hRes = pSL->SetHotkey(wHotKey); 
                  if( SUCCEEDED(hRes) ) { 
                     hRes = pSL->SetShowCmd(iCmdShow); 
                     if( SUCCEEDED(hRes) ) { 
                        // Получение компонента хранилища параметров 
                        hRes = pSL->QueryInterface(IID_IPersistFile,(LPVOID *)&pPF); 
                        if( SUCCEEDED(hRes) ) { 
                           // Сохранение созданного ярлыка 
                           hRes = pPF->Save(pwzShortCutFileName,TRUE); 
                           pPF->Release(); 
                        } 
                     } 
                  } 
               } 
            } 
         } 
      } 
      pSL->Release(); 
   } 
   return SUCCEEDED(hRes); 
}

Выбирай что хочешь, не забывай о кнопке поиск.
1
Эксперт С++
8372 / 6108 / 613
Регистрация: 10.12.2010
Сообщений: 28,517
Записей в блоге: 30
16.08.2012, 20:44 3
Создать ярлык на рабочем столе
Cоздать ярлык
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
16.08.2012, 21:50 4
Я делаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void CreateLink(String PathObj,String WorkDir,WideString PathLink,
                String Description,String Arguments,
                int ShowCmd)
{
    HRESULT hres;
    IShellLink *NewLink;
    CoInitialize(NULL);
    hres = CoCreateInstance(CLSID_ShellLink, NULL,
                            CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&NewLink);
    if(SUCCEEDED(hres))
    {
        NewLink->SetPath(PathObj.c_str());
        NewLink->SetWorkingDirectory(WorkDir.c_str());
        NewLink->SetDescription(Description.c_str());
        NewLink->SetArguments(Arguments.c_str());
        NewLink->SetShowCmd(ShowCmd);
        IPersistFile *ppf;
        NewLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
        ppf->Save(PathLink, True);
    }
    CoUninitialize();
}
//---------------------------------------------------------------------------
void __fastcall TMain::Button17Click(TObject *Sender)
{
    AnsiString Dir;
    char stol[MAX_PATH];
    LPITEMIDLIST pidl;
    SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl);
    SHGetPathFromIDList(pidl, stol);
    Dir= stol;
    CreateLink(Edit1->Text ,"%WINDIR%" ,Dir+"\\Съемный диск "+Edit1->Text.SubString(1,1)+".lnk","Съемный диск","",SW_SHOWNORMAL);
}
1
18 / 18 / 3
Регистрация: 28.06.2010
Сообщений: 77
17.08.2012, 04:37  [ТС] 5
Огромное спасибо за помощь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2012, 04:37

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как создать ярлык программно?
Как создать ярлык программно? Что всмысле туда писать? если тупо открыть блокнотом - открывает...

Создать программно ярлык для приложения
Требуется создать ярлык для своей программы (или необязательно своей) в какой-либо папке, к примеру...

Как программно можно создать ярлык к любому файлу?
Здравствуйте. Подскажите, как программно можно создать ярлык к любому файлу?

Как программно создать Label на Frame, которая программно создана на UserForms
Всем доброго времени суток! Программно создать Frame на UserForms можно таким кодом: With...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.