Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2018, 22:25   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию Создание ярлыка на папку

привет, я честно гуглил, пытался переделать примеры которые находил, не вышло, максимум что получилось это ярлык на файл которого нет и без рабочей папки (как и у ярлыка на папку). обьясните пожалуйста как сделать ярлык на папку? есть папка автозагрузки и нужно создать на нее ярлык на рабочем столе (папку раб стола и папку авторана я уже получаю)


Нашел очень обобщенный вариант
если кому надо

Код:
function GetPathProgramms(): string;
const
  SHGFP_TYPE_CURRENT = 0;
var
  path: array [0 .. MAX_PATH] of char;
begin
  if SUCCEEDED(SHGetFolderPath(0, CSIDL_APPDATA, 0, SHGFP_TYPE_CURRENT,
    @path[0])) then
    Result := path + '\Microsoft\Windows\Start Menu\Programs\Startup'
  else
    Result := '';
end;

function CreateShortcut(const ShortcutDir, CmdLine, Param, WorkDir,DirName: string;
   LinkFile:String): Boolean;
var
  MyObject  : IUnknown;
  MySLink   : IShellLink;
  MyPFile   : IPersistFile;
  WideFile  : WideString;
  Directory, TempStr: String;
  Reg:TRegistry;
begin
  Result:=False;Directory:='';
  If (ShortcutDir='Desktop') or (ShortcutDir='Favorites') or
     (ShortcutDir='Programs') or (ShortcutDir='SendTo') or
     (ShortcutDir='Start Menu') or (ShortcutDir='Startup') then
    begin
      Reg:=TRegistry.Create;
      Reg.OpenKey('Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
      Directory := Reg.ReadString(ShortcutDir);
      Reg.Free;
      If not(DirName='') then
        Directory:=Directory+'\'+DirName;
    end;
  If DirectoryExists(ShortcutDir)  then
    Directory:=ShortcutDir
  else
    If Directory='' then  Exit;
  If not(FileExists(CmdLine)) and not(DirectoryExists(CmdLine)) then Exit;
  If linkFile='' then Exit;
  TempStr:=linkFile;
  If Length(linkFile)>4 then
    Delete(TempStr,1,Length(TempStr)-3);
  If not(AnsiUpperCase(TempStr)='LNK') then
    linkFile:=linkFile+'.lnk';
  MyObject := CreateComObject(CLSID_ShellLink);
  MySLink := MyObject as IShellLink;
  MyPFile := MyObject as IPersistFile;
  with MySLink do
    begin
      SetPath(PChar(CmdLine));
      SetArguments(PChar(Param));
      SetWorkingDirectory(PChar(WorkDir));
    end;
  if Directory[Length(Directory)]='\' then
    WideFile := Directory+LinkFile
  else
    WideFile := Directory+'\'+LinkFile;
  if MyPFile.Save(PWChar(WideFile), False)= S_OK then
    Result:=True;
end;
использование

Код:
CreateShortcut( 'Desktop', GetPathProgramms, '', '', '', 'Автозагрузка.lnk');

Последний раз редактировалось PTyTb32; 24.03.2018 в 23:33.
PTyTb32 вне форума Ответить с цитированием
Старый 25.03.2018, 01:12   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

В JEDI/jcl есть модуль JclShell.pas
В нём есть функции для работы с ярлыками. Возможно, это то, что тебе надо.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.03.2018, 07:08   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

я бы по-молодости сделал так: создал ярлык, открыл его в блокноте и весь исходный код сохранил бы в программе, предварительно выудив из него ссылку на файл или папку и другую информацию. Затем попробовал бы программным путём к другим папкам прикрутить эту ссылку. Да, метод извращенский, но в условиях отсутствия помощи со стороны наставников и учитывая, что меня в гугле забанили, так бы и поступил.
Код:
L        А      F‹     ая7/¶˜УPЯ·˜УPЯ·˜У                      t r 1     =L" 9495~1  \   пѕ=L} =L"*   ИР   7               ?@>B>:>;K  @>4.   A>1@0=89     „            -   8   \         ћГ®    C:\Users\  $                \\UCHITEL\Users Учитель\Desktop\протоколы род. собраний  . \ ?@>B>:>;K  @>4.   A>1@0=89Ж  	  *ё   1SPS0с%·пGҐс`Њћл¬A   
          ?@>B>:>;K  @>4.   A>1@0=89  1             0?:0  A  D09;0<8         @    ц/¶˜У       @    *Я·˜У    q   1SPSн0ЅЪC ‰G§шР¤sf"U   d       "   D e s k t o p   ( C : \ >;L7>20B5;8\ #G8B5;L)       ‘   1SPS¦jc(=•ТµЦ АOЩРu          1   C : \ U s e r s \ #G8B5;L\ D e s k t o p \ ?@>B>:>;K  @>4.   A>1@0=89            `     *X       uchitel         j¤tЖ¦y
A˜uњУFe~е3Љ5A©и†ёоeЛ·Ґj¤tЖ¦y
A˜uњУFe~е3Љ5A©и†ёоeЛ·Ґ
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 27.03.2018 в 07:11.
NetSpace вне форума Ответить с цитированием
Старый 27.03.2018, 08:18   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вот ссылка на создание ярлыка http://forum.sources.ru/index.php?showtopic=39479
Вот ссылка на чтение ярлыка http://forum.sources.ru/index.php?showtopic=41450
Обсуждение http://forum.sources.ru/index.php?showtopic=47058

В интернете в поисковике набирайте структура ярлыка windows

Возможно эта информация вам поможет.

Последний раз редактировалось Aliens_wolfs; 27.03.2018 в 08:22.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление ярлыка - C++ madpitbull C++ Builder 22 05.09.2017 09:09
Создание ярлыка для автозапуска. Указать Издателя программы Shouldercannon Общие вопросы Delphi 4 20.01.2017 13:38
Создание ярлыка с параметрами быстрого запуска сочетанем клавиш Night_Devil Общие вопросы Delphi 0 13.06.2012 02:37
Создание url ярлыка на рабочем столе Plexdeath Общие вопросы Delphi 0 04.08.2011 14:19
Свойства ярлыка Fainder Win Api 1 26.04.2007 15:26