Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.039 c
9-1115410135
AlterEgo of WondeRu
2005-05-07 00:08
2005.08.28
OpenGL. При уменьшении изображения пропадают линии


11-1106217318
Эдик
2005-01-20 13:35
2005.08.28
Дополнительная форма


10-1101474613
grigory
2004-11-26 16:10
2005.08.28
При закрытие Outlook процесс остается висеть..


10-1080215297
Max_Fin
2004-03-25 14:48
2005.08.28
DCOM и LPSTR


1-1123675705
littlebat
2005-08-10 16:08
2005.08.28
массив структур в делфи




   Наверх