Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизЗапуск .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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c