Форум программистов, компьютерный форум CyberForum.ru

Зарегестрировать программу в меню пуск - C++

Восстановить пароль Регистрация
 
Miller-1981
33 / 32 / 0
Регистрация: 26.01.2009
Сообщений: 592
10.08.2012, 12:56     Зарегестрировать программу в меню пуск #1
Как программно зарегестрировать программу в меню пуск - если у кого нибудь ссылочки на доку. Средствами api желательно, чтобы универсально для любого ide было
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.08.2012, 13:08     Зарегестрировать программу в меню пуск #2
достаточно добавть ярлык в папку с ярлыками меню Пуск, разве нет?
TopLoader
 Аватар для TopLoader
41 / 41 / 4
Регистрация: 10.12.2011
Сообщений: 128
10.08.2012, 13:11     Зарегестрировать программу в меню пуск #3
Да, никакой особой регистрации в меню Пуск нет, достаточно создать ярлык в папке C:\Users\<Имя пользователя>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
Miller-1981
33 / 32 / 0
Регистрация: 26.01.2009
Сообщений: 592
10.08.2012, 13:11  [ТС]     Зарегестрировать программу в меню пуск #4
Программно хотелось бы это сделать - как ярлык сформировать? файл lnk?
Almiqui
Почетный модератор
 Аватар для Almiqui
13977 / 3593 / 87
Регистрация: 11.06.2009
Сообщений: 11,800
10.08.2012, 13:13     Зарегестрировать программу в меню пуск #5
то в тему, то ли нет
вообще-то ТС делает так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool TInstallerForm::ProgCommand(AnsiString sCommand)
{
 char  macrocmd[255];
 TDdeClientConv *DdeClient;
 DdeClient = new TDdeClientConv(0);
 DdeClient->SetLink("PROGMAN","PROGMAN");
 DdeClient->OpenLink(); // Устанавливаем связь по DDE
 strcpy(macrocmd,("["+sCommand+"]").c_str()); //{ Подготавливаем ASCIIZ строку }
 bool PC=DdeClient->ExecuteMacro(macrocmd,false);
 DdeClient->CloseLink();// { Закрываем связь по DDE }
 delete DdeClient;
 return PC;
}
 
 AnsiString path = edtInstallFolder->Text+"\\";
  AnsiString path1 = path+"SaveFlash.exe";
  AnsiString path2 = path+"UnInstall.exe";
  ProgCommand("CreateGroup(SaveFlash,)");
  AnsiString str="AddItem("+path1+",SaveFlash,"+path1+",0,,,"+path+",,)";
  ProgCommand(str);
  str="AddItem("+path2+",UnInstall,"+path2+",0,,,"+path+",,)";
  ProgCommand(str);
но у него не получается что-то .. Это я украл его вопрос с другого форума. Хотя ТС - профи Профессионал-разработчик программного обеспечения С++/Delphi/php , чего я лезу ?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.08.2012, 13:15     Зарегестрировать программу в меню пуск #6
Miller-1981, в гугле забанили? или с английским проблемы?
первая ссылка по запросу how to create lnk c++
http://www.codeproject.com/Articles/...uts-link-files
Miller-1981
33 / 32 / 0
Регистрация: 26.01.2009
Сообщений: 592
10.08.2012, 13:19  [ТС]     Зарегестрировать программу в меню пуск #7
Цитата Сообщение от Almiqui Посмотреть сообщение
то в тему, то ли нет
вообще-то ТС делает так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool TInstallerForm::ProgCommand(AnsiString sCommand)
{
 char  macrocmd[255];
 TDdeClientConv *DdeClient;
 DdeClient = new TDdeClientConv(0);
 DdeClient->SetLink("PROGMAN","PROGMAN");
 DdeClient->OpenLink(); // Устанавливаем связь по DDE
 strcpy(macrocmd,("["+sCommand+"]").c_str()); //{ Подготавливаем ASCIIZ строку }
 bool PC=DdeClient->ExecuteMacro(macrocmd,false);
 DdeClient->CloseLink();// { Закрываем связь по DDE }
 delete DdeClient;
 return PC;
}
 
 AnsiString path = edtInstallFolder->Text+"\\";
  AnsiString path1 = path+"SaveFlash.exe";
  AnsiString path2 = path+"UnInstall.exe";
  ProgCommand("CreateGroup(SaveFlash,)");
  AnsiString str="AddItem("+path1+",SaveFlash,"+path1+",0,,,"+path+",,)";
  ProgCommand(str);
  str="AddItem("+path2+",UnInstall,"+path2+",0,,,"+path+",,)";
  ProgCommand(str);
но у него не получается что-то .. Это я украл его вопрос с другого форума. Хотя ТС - профи Профессионал-разработчик программного обеспечения С++/Delphi/php , чего я лезу ?
получил удовлетворение? что у профи чтото не получается? и такое бывает. Тут через dde в названии каталоге если присутсвуют символы "(" и ")" - то метод не работает а именно для папки Program files (x86) - если можешь помоги если нет не хай стебаться. поэтому решил полностью прописать алгоритм по шагово -а тут спрашиваюб вдруг у кого готовый есть алгоритм создания lnk.
Almiqui
Почетный модератор
 Аватар для Almiqui
13977 / 3593 / 87
Регистрация: 11.06.2009
Сообщений: 11,800
10.08.2012, 14:02     Зарегестрировать программу в меню пуск #8
to TC
Цитата Сообщение от Miller-1981 Посмотреть сообщение
получил удовлетворение?
нет. Душа моя в печали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 18:31     Зарегестрировать программу в меню пуск
Еще ссылки по теме:

Разработать программу, в которой будет организовано меню, выбор функций меню C++
C++ Разработать программу, меню которой позволяет выполнять следующие функции
Не выбирает необходимую программу. Условные операторы в меню C++

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

Или воспользуйтесь поиском по форуму:
Miller-1981
33 / 32 / 0
Регистрация: 26.01.2009
Сообщений: 592
10.08.2012, 18:31  [ТС]     Зарегестрировать программу в меню пуск #9
Все супер получилось. Всем спасибо.
ссылки с доступным описанием:
http://msdn.microsoft.com/en-us/libr...ating_Shortcut
http://www.realcoding.net/teach/Delp...31/Index4.html

Делюсь кодом. На билдере правда, но кому надо тот типы поменяет:
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
//путь к объекту, на который ссылается ярлык (lpszPathObj);
// рабочий каталог для этого объекта (lpszWorkDir);
// путь к значку, соответствующему объекту (lpszIcon);
// описание объекта (lpszDesc);
// lpszPathLink -путь к файлу lnk
HRESULT CreateLink(LPCSTR lpszPathObj, LPCSTR lpszWorkDir, LPCSTR lpszIcon, LPCSTR lpszPathLink, LPCSTR lpszDesc)
{
    HRESULT hres;
    IShellLink* psl;
 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
    if (SUCCEEDED(hres))
    {
        IPersistFile* ppf;
 
        psl->SetPath(lpszPathObj);
        psl->SetWorkingDirectory(lpszWorkDir);
        psl->SetIconLocation(lpszIcon,0);
        psl->SetDescription(lpszDesc);
 
        hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
 
        if (SUCCEEDED(hres))
        {
            WCHAR wsz[MAX_PATH];
 
            MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);
 
            hres = ppf->Save(wsz, TRUE);
            ppf->Release();
        }
        psl->Release();
    }
    return hres;
}
//----------------------------------------------------------------------------
AnsiString __fastcall GetProramFilesFolder(int FoldID)
{
  char szDir[MAX_PATH];
  SHGetFolderPath(0, FoldID/*CSIDL_PROGRAM_FILES*/, 0, 0, szDir);
  return szDir;
}
 
Функция вызова:
 
  AnsiString path = GetProramFilesFolder(CSIDL_PROGRAM_FILES)+"\\SaveFlash\\";
  AnsiString path1 = path+"SaveFlash.exe";
  AnsiString path2 = GetProramFilesFolder(CSIDL_COMMON_PROGRAMS)+"\\SaveFlash\\";
  CreateDir(path2);
  DeleteFile(path2+"SaveFlash.lnk");
  CreateLink(path1.c_str(), path.c_str(), path1.c_str(), (path2+"SaveFlash.lnk").c_str(),"SaveFlash");
  path1 = path+"UnInstall.exe";
  DeleteFile(path2+"UnInstall.lnk");
  CreateLink(path1.c_str(), path.c_str(), path1.c_str(), (path2+"UnInstall.lnk").c_str(),"SaveFlash");
Yandex
Объявления
10.08.2012, 18:31     Зарегестрировать программу в меню пуск
Ответ Создать тему
Опции темы

Текущее время: 10:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru