Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск .lnk [D6, WinXP]


Страницы:   1 2

webpauk ©   (2005-07-13 11:01:00) 

Пытаюсь: ShellExecute(0, nil, PChar(OpenDialog1.FileName), nil, nil, SW_SHOWNORMAL);
Ничего не происходит.


webpauk   (2005-07-13 12:29:00) [1]

Сам спросил, сам и отвечу:
uses
 ..., ShellApi, ShlObj, activex, ComObj;

procedure ...
var
  S: String;
  W: cardinal;
  LinkFile: IPersistFile;
  ShellObject: IUnknown;
  ShellLink: IShellLink;
  FoundName: array[0..MAX_PATH-1] of Char;
  LinkPath: PWideChar;
  FData: TWin32FindData;
  res: integer;
  Ss: String;
begin
  if FileExists( FileName) then
  begin
     if pos(AnsiUpperCase('.lnk'), AnsiUpperCase(( FileName)=0 then
     begin
        ShellExecute(Handle, 'open', PChar(( FileName), nil, nil, SW_SHOWNORMAL);
        W:=GetLastError;
        if w<>0 then ShowMessage(SysErrorMessage(GetLastError));
     end
     else
     begin
        try
           CoInitialize(nil);
           ShellObject:=CreateComObject(CLSID_ShellLink);
           LinkFile:=ShellObject as IPersistFile;
           LinkPath:=PWChar(WideString( FileName);
           res:=LinkFile.Load(LinkPath,STGM_READ);
           if res=S_OK then
           begin
              ShellLink:=ShellObject as IShellLink;
              ShellLink.GetPath(@FoundName,MAX_PATH,FData,SLGP_RAWPATH);
              SS:=FoundName;
           end;
        finally
           ShellObject:=Unassigned;
           CoUninitialize;
        end;
        ShellExecute(0, 'open', PChar(SS), nil, nil, sw_show);
        W:=GetLastError;
        if w<>0 then ShowMessage(SysErrorMessage(GetLastError));
     end;
  end
  else
  begin
     MessageDlg('Ёк!', mtError, [mbOk], 0);
  end;


webpauk   (2005-07-13 12:04:00) [2]

Ладно пойдем другим способом.
Как вытащить из *.lnk файл на который он ссылается?


webpauk   (2005-07-13 12:02:00) [3]


> alpet ©   (13.07.05 11:59) [20]
> webpauk   (13.07.05 11:55) [18]
> Другим способом (из проводника) сей ярлык запускается?

Ага


webpauk   (2005-07-13 12:00:00) [4]


> Alexander Panov ©  

пробовал 8-(
а на другом компе *.lnk запускаются без проблем!
Значит что-то сдохло у меня!


alpet   (2005-07-13 11:59:00) [5]

webpauk   (13.07.05 11:55) [18]
Другим способом (из проводника) сей ярлык запускается?


Alexander Panov   (2005-07-13 11:57:00) [6]

webpauk   (13.07.05 11:49) [16]
да файл существует, если не *.lnk - запускается


Ну так создай ссылку заново и попробуй.


webpauk   (2005-07-13 11:55:00) [7]

файлы *.lnk с рабочего стола


alpet   (2005-07-13 11:51:00) [8]

webpauk   (13.07.05 11:47) [15]
Любопытно. И все же какой Файл должен запускаться данной ссылкой, может его и нет вообще на данном компе, или к нему не привязана никакая программа (типа .pdf без установленного Acrobat Reader).


webpauk   (2005-07-13 11:49:00) [9]


> alpet ©  


да файл существует, если не *.lnk - запускается


webpauk   (2005-07-13 11:47:00) [10]

а на другом компе работает без проблем


alpet   (2005-07-13 11:44:00) [11]

webpauk   (13.07.05 11:40) [12]
На какой файл ссылается твой линк ? Он хоть с чем-то ассоциирован, чтобы его можно было открыть?


webpauk   (2005-07-13 11:42:00) [12]

Кстати говоря 'explore' и 'find' - тоже болт


webpauk   (2005-07-13 11:40:00) [13]

FileExists('C:\*.lnk')=True
ShellExecute - болт


alpet   (2005-07-13 11:35:00) [14]

И еще - у тебя должен быть соответствующий файл 111.lnk. Я сейчас попробывал - в принципе работает (запускается обозначенный линком файл, в моем случае far):

uses windows, sysutils, ShellApi;
begin
ShellExecute (0, nil, 'C:\TEMP\111.lnk', nil, '.', SW_SHOW);
end.


webpauk   (2005-07-13 11:34:00) [15]

Указанному файлу не сопоставлено ни одно приложение для выполнения данной операции


alpet   (2005-07-13 11:29:00) [16]

webpauk   (13.07.05 11:26) [8]
Так, а код ошибки какой ?


webpauk   (2005-07-13 11:26:00) [17]


> alpet ©  

неа


Alexander Panov   (2005-07-13 11:25:00) [18]

lpDirectory
 [in] Pointer to a null-terminated string that specifies the default directory.

Указывается полный путь.


Anatoly Podgoretsky   (2005-07-13 11:20:00) [19]

alpet ©   (13.07.05 11:12) [1]
Это действие по умолчанию и правило хорошего тона рекомендуют использовать именно nil если нужно стандартное поведение.


alpet   (2005-07-13 11:17:00) [20]

С другой стороны, для XP второй параметр nil означает действие по умолчанию или тот-же самый open. Попробуй для начала задать имя файла непосредственно ShellExecute (0, 'open', 'C:\111.lnk', nil, '.', SW_SHOW);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо