как создать ярлык?

Тема в разделе "WASM.WIN32", создана пользователем valix7, 1 дек 2006.

  1. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    сабж, программно естествено... заранее спасибо
     
  2. 10_Brasil

    10_Brasil New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    54
    нашел на первой странице которую гугл выдает

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

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В масме есть пример:
    C:\masm32\com\examples\shortcut
     
  4. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    спасибо!
     
  5. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    На RSDN хорошо описывается. Но на с++. В качестве справочного материала пойдет.
    Мы тут на wasm.ru не знаем, что такое с++ ;)))

    Вдруг кому-нибудь понадобится.
    На wasm.ru обновленный пакет ассемблера без этого примерчика:
     
  6. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    а без использования COM, какие еще варианты есть ?
    только запатчить другой ярлык или собрать свой по формату lnk?
     
  7. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    мб кому то будет интерессно, внутри есть все структуры и код, можно написать без проблем чтобы в сырую создавать ярлыки.
    Просто тоже столкнулся с такой проблемой, может есть более гуманные способы и без исользования COM.
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Как для меня, нет ничего гуманнее COM'a
     
  9. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    А де эти структуры документированы у макрасафака?
    Хотелось бы работающих структур.

    Самый простой тип ярлыка, правда работает через раз:
    Код (Text):
    1. [InternetShortcut]
    2. URL=file:///HELLO.EXE
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Ну вы и придури. Есть интерфейсы системы для создания ярлыков, а вы трахаете мозг(((
    Если есть причина - напишите, иначе...траляля и много матных слов