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

Вниз

Как запустить lnk сети программно?   Найти похожие ветки 

 
Кто б сомневался ©   (2010-08-07 00:09) [0]

Здравствуйте, подскажите ньюанс.
Вроде все просто, но одновременно сложно.
Есть ярлык lnk при нажатии на который включается интернет. Но если его запускать программно через ShellExecute вываливается ошибка (неподдерживаемый тип файла). Как его запустить программно?


 
Rouse_ ©   (2010-08-07 00:20) [1]

Вытащить из ярлыка путь к исполняемому файлу и запустить его?


 
Кто б сомневался ©   (2010-08-07 00:29) [2]


> Вытащить из ярлыка путь к исполняемому файлу и запустить
> его?


Это ярлык для запуска интернета. Там GUID.
Вытаскивать пути по GUID работает, но только если GUID указывает на файл. Здесь же он не указывает на файл.


 
Кто б сомневался ©   (2010-08-07 01:29) [3]

Возможно кто то знает как включить выбранное соединение программно?
К примеру одно из выбранных в апплете Network Connections.


 
antonn ©   (2010-08-07 01:53) [4]


> Возможно кто то знает как включить выбранное соединение
> программно?
> К примеру одно из выбранных в апплете Network Connections.
>

мож так? http://forum.vingrad.ru/topic-72772.html


 
Дмитрий С ©   (2010-08-07 02:55) [5]

ShellExecute должен запускать любой ярлык, разве нет?


 
Кто б сомневался ©   (2010-08-07 03:29) [6]


> Дмитрий С ©   (07.08.10 02:55) [5]

Нет.

Rouse_ ©   (07.08.10 00:20) [1]

Можно ли сделать при помощи WNet функций подобную вещь - запустить соединение? Я нашел на сайте ваш пример с этим api . Можно ли собрать список подключений? Т.е. те ярлыки что лежат в Network Connections


 
Кто б сомневался ©   (2010-08-07 03:33) [7]


>  Т.е. те ярлыки что лежат в Network Connections

Название подключений можно собрать и с реестра. Но вот как их запустить..


> antonn ©   (07.08.10 01:53) [4]


Он платный этот компонент. И плюс тяжелый - там куча левого. Не нужен весь тот огромнейший фукнционал который он дает.


 
Димка На   (2010-08-07 04:21) [8]

Завтра проверю, имхо, должен запустить любой.


 
grisme ©   (2010-08-07 08:33) [9]

rasdial же.


 
antonn ©   (2010-08-07 13:57) [10]


> Он платный этот компонент. И плюс тяжелый - там куча левого.
>  Не нужен весь тот огромнейший фукнционал который он дает.
>

там и про интерфейс говорится, не только про компонент


> grisme ©   (07.08.10 08:33) [9]
>
> rasdial же.

а если в "сетевых" только "подключение по локальной сети"?


 
grisme ©   (2010-08-07 15:09) [11]


> antonn ©   (07.08.10 13:57) [10]
>
> а если в "сетевых" только "подключение по локальной сети"?
>

[телепатор] думаю, rasdial тут вполне так подойдёт. [/телепатор]
ибо такие "подключения по локальной сети", при однократном включении, поднимаются автоматически (по дефолту, конечно же). ^^


 
Кто б сомневался ©   (2010-08-07 19:14) [12]

Вобщем с Ras я разбирался, он чет не хотел работать, скорее всего из за того, что написан для ранних Delphi - там Ansi я реплэйсом заменим все на Ansi все равно не работает. Разбиратся я особо не хотел, т.к. модуль там большой.

Вобщем взял я INetConnection. Простой и рабочий. Все включает выключает, и как раз отображается текущие сетевые подключения из Network Connections.

Вот пример


procedure TForm2.GetConnectionList(Strings : TStrings);
var
 pEnum: IEnumVariant;
 vNetCon: OleVARIANT;
 dwRetrieved: Cardinal;
 pUser: NETCONLib_TLB.PUserType1;
 NetCon : INetConnection;
begin
 Strings.Clear;

 pEnum := ( NetSharingManager.EnumEveryConnection._NewEnum as
IEnumVariant);
 while (pEnum.Next(1, vNetCon, dwRetrieved) = S_OK) do
 begin
    (IUnknown(vNetCon) as INetConnection).GetProperties(pUser);
    NetCon := (IUnknown(vNetCon) as INetConnection);

    //if (pUser.Status in [NCS_DISCONNECTED, NCS_CONNECTING])
  //  and (pUser.MediaType in [NCM_LAN,NCM_SHAREDACCESSHOST_LAN,NCM_ISDN] ) then
    begin
   
      Strings.Add(pUser.pszwName );
      //IdList.Add(GuidToString(pUser.guidId));
    end;
 end;
end;


Модуль NETCONLib_TLB - генерится как Type Library


 
Кто б сомневался ©   (2010-08-07 19:16) [13]

Еще не забудьте activeX добавить.


> Модуль NETCONLib_TLB

NETCONLib_TLB.pas


 
Дмитрий С ©   (2010-08-08 22:56) [14]

Я хз как ты делал. Вот этот простой код работает:

 ShellExecute(
   Handle,
   nil,
   "d:\test.lnk",
   nil,
   nil,
   SW_NORMAL
 )


d:\test.lnk - ярлык на подключение.
Это работает даже в 7ке (только требует подтверждения).


 
Кто б сомневался ©   (2010-08-09 17:15) [15]


> Дмитрий С ©   (08.08.10 22:56) [14]

Поверь как я только не делал.
Запустил твой пример, скопипастил. Отключил инет. Не работает. Возвращает ту же ошибку.


 
Кто б сомневался ©   (2010-08-09 17:17) [16]

Кстати, возможно это связано с битностью. Т.к. у меня x64 XP. Если запускать ее в тотал коммандере - то он закрывается. Если в Explorer то все ок. думаю в Win 7 x64 будет также.


 
Кто б сомневался ©   (2010-08-09 17:18) [17]

Если запускать через Выполнить - выбрасывает Windows cannot open this file


 
Кто б сомневался ©   (2010-08-09 17:20) [18]

Короче универсальное решение уже найдено - INetConnection, и оно точно будет работать на всех ОС > w2k. Плюс очень простое.


 
Anatoly Podgoretsky ©   (2010-08-09 19:22) [19]

> Кто б сомневался  (09.08.2010 17:18:17)  [17]

Так тут не до программирования.



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

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

Наверх




Память: 0.51 MB
Время: 0.011 c
2-1281933918
Гость
2010-08-16 08:45
2010.11.21
Как в ini-файле сдвинуть секцию вверх или вниз?


15-1282002935
Дмитрий С
2010-08-17 03:55
2010.11.21
Синхронизация доступа к хешу.


2-1283085939
guest
2010-08-29 16:45
2010.11.21
listbox


15-1281731393
Юрий
2010-08-14 00:29
2010.11.21
С днем рождения ! 14 августа 2010 суббота


2-1283164995
Jolik
2010-08-30 14:43
2010.11.21
Как синхронизируется http протокол...