Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Запуск .lnk   Найти похожие ветки 

 
webpauk   (2005-07-13 11:01) [0]

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


 
alpet ©   (2005-07-13 11:12) [1]

А разве что-то должно происходить? Ты хоть какую-нибудь команду (в данном случае open) помимо имени файла указывать пробывал?

Смотри описание 2-го параметра функции:
<url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellex ecute.asp>Shell Execute</url>


 
alpet ©   (2005-07-13 11:13) [2]

ссылку надо скопировать, она "разорвалась".


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


> alpet

вообще то для всех остальных файлов запуск происходит даже без команды Open.


 
webpauk   (2005-07-13 11:16) [4]

Шарил в инете и там указано, что .lnk запускать без указания команды


 
alpet ©   (2005-07-13 11:17) [5]

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


 
Anatoly Podgoretsky ©   (2005-07-13 11:20) [6]

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


 
Alexander Panov ©   (2005-07-13 11:25) [7]

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

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


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


> alpet ©  

неа


 
alpet ©   (2005-07-13 11:29) [9]

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


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

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


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

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

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


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

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


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

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


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

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


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

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


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


> alpet ©  


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


 
alpet ©   (2005-07-13 11:51) [17]

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


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

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


 
Alexander Panov ©   (2005-07-13 11:57) [19]

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


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


 
alpet ©   (2005-07-13 11:59) [20]

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


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


> Alexander Panov ©  

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


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


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

Ага


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

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


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

Сам спросил, сам и отвечу:
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;



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.041 c
1-1123172908
Alex77777
2005-08-04 20:28
2005.08.28
Помогите решить задачу


4-1120906132
-=[ASH]=-
2005-07-09 14:48
2005.08.28
CD-Rom


14-1123250460
BiN
2005-08-05 18:01
2005.08.28
"Практические умы" наемников или "киллера вызывали?"


14-1123249871
Jeer
2005-08-05 17:51
2005.08.28
Ни кто из нас так ни где хорошо не работал как в своем резюме


8-1113384972
Fedor
2005-04-13 13:36
2005.08.28
Детектор движения