Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Ign0Rb
2 / 2 / 3
Регистрация: 04.07.2016
Сообщений: 64
Завершенные тесты: 1
1

Функция для создания ярлыка

29.07.2017, 21:10. Просмотров 226. Ответов 0

Нарыл на просторах киберфорума вот такой код:

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
#include <iostream>
#include <shlobj.h>
#include <ObjIdl.h>
 
using namespace std;
 
int main()
{
    HRESULT hres;
    IShellLink *psl = NULL;
    IPersistFile *pPf = NULL;
 
    hres = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&psl);
 
    if (SUCCEEDED(hres))
    {
        psl->SetPath("C:\test\SmcServer.exe");
        psl->SetWorkingDirectory("C:\test");
        psl->SetDescription("desc ololo");
        psl->SetArguments("");
        psl->SetShowCmd(SW_SHOWNORMAL);
 
        psl->QueryInterface(IID_IPersistFile, (void**)&pPf);
        pPf->Save(reinterpret_cast<LPCOLESTR>("C:\test.ink"), true);
    }
 
    CoUninitialize();
    return 0;
}
Он не работал, но я разобрался. Надо было просто подключить либы

Решил шагнуть дальше и сделать функцию для удобства:

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
#include <windows.h>
#include <iostream>
#include <Objbase.h>
#include <shlobj.h>
#include <ObjIdl.h>
 
using namespace std;
 
void CreateLink(const char* fullPathToFile, const char* workingDir, const char* desc, const char* args, const char* fullPathToOutputFile)
{
    CoInitialize(NULL);
    
    HRESULT hres;
    IShellLink *psl = NULL;
    IPersistFile *pPf = NULL;
 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
 
    if (SUCCEEDED(hres))
    {
        psl->SetPath(fullPathToFile);
        psl->SetWorkingDirectory(workingDir);
        psl->SetDescription(desc);
        psl->SetArguments(args);
        psl->SetShowCmd(SW_SHOWNORMAL);
 
        psl->QueryInterface(IID_IPersistFile, (void**)&pPf);
        pPf->Save(OLESTR(fullPathToOutputFile), true); // <<< ругается на вот эту строку
    }
 
    CoUninitialize();
}
 
int main()
{
    CreateLink("C:\\WINDOWS\\NOTEPAD.EXE", "C:\\WINDOWS", "", "", "C:\\Notepad.lnk");
    return 0;
}
Но меня посетила удивительная на мой взгляд ошибка:
In function `void CreateLink(const char*, const char*, const char*, const char*, const char*)':
28 `LfullPathToOutputFile' undeclared (first use this function)

Что-то я не понимаю, как это чинить и откуда взялось, ибо вот так работает:

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
#include <windows.h>
#include <iostream>
#include <Objbase.h>
#include <shlobj.h>
#include <ObjIdl.h>
 
using namespace std;
 
void CreateLink(const char* fullPathToFile, const char* workingDir, const char* desc, const char* args)
{
    CoInitialize(NULL);
    
    HRESULT hres;
    IShellLink *psl = NULL;
    IPersistFile *pPf = NULL;
 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
 
    if (SUCCEEDED(hres))
    {
        psl->SetPath(fullPathToFile);
        psl->SetWorkingDirectory(workingDir);
        psl->SetDescription(desc);
        psl->SetArguments(args);
        psl->SetShowCmd(SW_SHOWNORMAL);
 
        psl->QueryInterface(IID_IPersistFile, (void**)&pPf);
        pPf->Save(OLESTR("C:\\Notepad.lnk"), true);
    }
 
    CoUninitialize();
}
 
int main()
{
    CreateLink("C:\\WINDOWS\\NOTEPAD.EXE", "C:\\WINDOWS", "", "");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2017, 21:10
Ответы с готовыми решениями:

Откуда функция AllocConsole() черпает информацию для создания консоли?
Друзья! Напомню вам, что если в процессе X мы создадим (CreateProcess())...

Функция создания кнопок и обработка нажатия на них
Господа создаю кнопки при помощи своей функции , они создаются нормально , но...

картинка ярлыка?
у меня следующий вопрос! Я создаю на С++ программу, в папке debug нахожу ехе...

Создание ярлыка
#include &lt;iostream&gt; #include &lt;shlobj.h&gt; #include &lt;ObjIdl.h&gt; using...

Создание ярлыка
Всем доброго времени суток! Можете помочь сделать такой exe файл, который при...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2017, 21:10

Средства для создания GUI
Да, такие темы периодически всплывали. Но последняя более похожая датирована...

Класс для создания окна
Доброго времени суток уважаемые программисты! Помогите решить проблему которая...

Найти библиотеку для создания 3D игры
помогите найти библиотеку для создания 3D игры Добавлено через 10 минут...


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

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

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