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

Вниз

Ярлычек   Найти похожие ветки 

 
Vaitek ©   (2004-12-31 13:14) [0]

Глупый вопрос про то как запустить ярлык *.lnk
Делаю так:
ShellExecute(Handle,"open","explorer","C:\mylink.lnk",nil,SW_NORMAL);

Ярлык запускается, но Explorer выдает окошко, в котором спрашивает, что сделать с объектом - открыть или сохранить. Честно говоря надоело какждый раз нажимать "Open". Может есть какой альтарнативный способ запуска?


 
Gero ©   (2004-12-31 15:11) [1]

ShellExecute(Handle,"open","C:\mylink.lnk",nil,nil,SW_SHOW);


 
Vaitek ©   (2004-12-31 15:36) [2]

Так вообще ничего не запускает.


 
GuAV ©   (2004-12-31 15:51) [3]

ShellExecute(Handle,nil,"C:\mylink.lnk",nil,nil,SW_SHOW);


 
Vaitek ©   (2004-12-31 16:33) [4]

И так тоже не работает. Вообще.


 
jack128 ©   (2004-12-31 16:51) [5]

у меня например и вариант Gero, и вариант GuAV выдают EExternalException с кодом ошибки STATUS_INVALID_HANDLE. Но программа при этом запускается. Так что в принципе можно это исключение глушить..Правда непонятно причем здесь хендл...


 
GuAV ©   (2004-12-31 16:57) [6]

jack128 ©   (31.12.04 16:51) [5]

У меня ничего подобного не выдаёт.
"Украина - не Россия"© :-)


 
GuAV ©   (2004-12-31 17:09) [7]

2 Vaitek ©

Caption := Format("Error #%d - %s",
 [GetLastError, SysErrorMessage(GetLastError)]);

что скажет ?


 
Vaitek ©   (2004-12-31 17:11) [8]

handle он нужен. Ексепшенов нет, ничего давить не приходится, просто тихо возвращается код какой-то ошибки, и все.

Но, гордо крикнув "Мы пойдем другим путем!" я написал такой код,
который сам нажимает на кнопочку "Открыть". 8-) Всо нормально, хотя если кто знает ак обойтись без этого гемора - жду ответа.

     c := FindWindow(nil,"File Download - Security Warning");
     If c <> 0 then
     Begin
       c := GetWindow(c,GW_CHILD);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       c := GetWindow(c,GW_HWNDNEXT);
       SendMessage(c,BM_Click,0,0);
     End


 
jack128 ©   (2004-12-31 17:58) [9]

Можно вытянуть из ярлыка имя файла на который он ссылатся и запускать сам этот файл..

function ExtractPathFromLink(LinkFileName: string): string;
var
 Link: IShellLinkA;
 File_: IPersistFile;
 intf: IUnknown;
 ffd: TWin32FindData;
begin
 if (CoCreateInstance(CLSID_ShellLink, nil,
           CLSCTX_INPROC_SERVER, IShellLinkA, intf) = 0) and
   (intf.QueryInterface(IShellLinkA, Link) = 0) and
   (Link.QueryInterface(IPersistFile, File_) = 0) and
   (File_.Load(PWideChar(WideString(LinkFileName)), STGM_READ) = 0) then
 begin
   SetLength(Result, 255);
   if Link.GetPath(PChar(Result), 255, ffd, SLGP_UNCPRIORITY) = 0 then
   begin
     SetLength(Result, StrLen(PChar(Result)));
     Exit;
   end;
 end;
 raise Exception.Create("Ошибка");
end;


 
Vaitek ©   (2004-12-31 18:05) [10]

Да там не файл, там ссылка на dialup соединение.


 
GuAV ©   (2004-12-31 18:18) [11]

Ещё раз проверил с dial-up соединением - мой код работает.

[7] ?


 
jack128 ©   (2004-12-31 18:26) [12]

но вообще то что странное происходит.. Вот сейчас снова проверил код ГуАВ - нет ошибок. Диал ап не проверял, но впн соединение вполне запускается..Мдя. "Россия - не Украина" (c) Я. :-)


 
Vaitek ©   (2004-12-31 18:32) [13]

перепроверил. вызываю так:

ShellExecute(Handle,"open",PChar(ExtractPathFromLink("C:\INET.lnk")),nil,nil,SW_SHOW);

Получаю сообщение об ошибке. Не срабатывает первое условие. То, которое:  
(CoCreateInstance(CLSID_ShellLink, nil,
CLSCTX_INPROC_SERVER, IShellLinkA, intf) = 0)


 
Vaitek ©   (2004-12-31 18:32) [14]

перепроверил. вызываю так:

ShellExecute(Handle,"open",PChar(ExtractPathFromLink("C:\INET.lnk")),nil,nil,SW_SHOW);

Получаю сообщение об ошибке. Не срабатывает первое условие. То, которое:  
(CoCreateInstance(CLSID_ShellLink, nil,
CLSCTX_INPROC_SERVER, IShellLinkA, intf) = 0)


 
jack128 ©   (2004-12-31 18:58) [15]

нужно подлючить модуль ComObj или вручную инициализировать СОМ...


 
jack128 ©   (2004-12-31 19:01) [16]

а, стоп. Если это линк НЕ на файл или папку, то естественно ничего не будет работать..


 
Vaitek ©   (2004-12-31 22:01) [17]

О чем я и говорил, когда писал, что
"Да там не файл, там ссылка на dialup соединение."


 
GuAV ©   (2004-12-31 22:09) [18]

таки как насчёт
ShellExecute(Handle,nil,"C:\mylink.lnk",nil,nil,SW_SHOW);
Caption := Format("Error #%d - %s",
[GetLastError, SysErrorMessage(GetLastError)]);


 
Vaitek ©   (2005-01-01 00:14) [19]

Ну, на самом деле, получетсся код 0 - оперция завершена успешно... И Hinst - 42, что больше 32, а занчит не ошибка... Но вот только ничего не запускается. Все равно. Новогодние глюки блин.


 
VMcL ©   (2005-01-01 06:53) [20]

>ShellExecute(Handle, nil, "C:\mylink.lnk", nil, nil, SW_SHOW);

У меня так работает. В качестве C:\mylink.lnk использовалась ссылка на сетевое соединение. Пробовал два разных соединения: ADSL и dial-up.


 
Vaitek ©   (2005-01-01 11:58) [21]

И интересно, где глюк? В 2003 SP1 винде или 2005 Delphi? Потому как где кривизна в моих руках я понять не могу.


 
Cobalt ©   (2005-01-02 01:15) [22]

2 VMcL ©   (01.01.05 06:53) [20]
У меня такой код не возвращает ошибки, но и ничего не открывается.
Ярлык - на VPN-соединение.
WinXP SP2.


 
VMcL ©   (2005-01-03 11:57) [23]

>>Cobalt ©  (02.01.05 01:15) [22]

Сделал тестовое VPN-соединение (на 127.0.0.1:). Проверил. Работает  (открывается окно для ввода логина/пароля). Win2K, SP4.

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ShellExecute(Handle, nil, "C:\_VPN Test.lnk", nil, nil, SW_SHOW) <= HINSTANCE_ERROR then
     RaiseLastOSError;
end;



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

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

Наверх




Память: 0.52 MB
Время: 0.043 c
14-1106855341
Ihor Osov'yak
2005-01-27 22:49
2005.02.20
Ищется антиквариат - QuickReport 1.0c


1-1107343188
hgd
2005-02-02 14:19
2005.02.20
Выставление отступа


14-1106707761
Думкин
2005-01-26 05:49
2005.02.20
С Днем рождения! 26 января


1-1107726203
Barbos
2005-02-07 00:43
2005.02.20
Добавление эл-в в TreeView


1-1107460707
necky
2005-02-03 22:58
2005.02.20
Вопрос по записи в TMemoryStream