![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск .lnk [D6, WinXP]
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);