Форум: "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.061 c