Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.026 c
1-1107467537
griban
2005-02-04 00:52
2005.02.20
Zapusk makrosa Excel iz Delphi


11-1092129163
Алексей
2004-08-10 13:12
2005.02.20
Глупый вопрос


14-1107252090
Околокомпьютерный
2005-02-01 13:01
2005.02.20
Радость у меня


4-1104861759
programmerts
2005-01-04 21:02
2005.02.20
Можно ли скрыть свой процесс в Delphi или запретить его завершени


10-1084267941
VK220
2004-05-11 13:32
2005.02.20
проблема с COM. совсем загнался





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский