Что нового

[Сеть, интернет] Создать ярлык сетевого подключения(к интернету)

erlik

Продвинутый
Сообщения
317
Репутация
84
Собственно вопрос в шапке темы - облазил пол инета - но как создавать ярлыки на подобные ActiveX объекты так и не нашел (ни средствами самой винды, ни хотя бы JScript). Осталась надежда что хотя бы связка AutoIt+WinAPI поможет.
GUID у ярлыка сетевого подключения {BA126AD7-2166-11D1-B1D0-00805FC1270E} - но как с ним работать - непонятно. Через Пуск-Выполнить он не пашет (в отличие скажем от GUID'а Моего компьютера ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}).
Стандартный метод AutoIt
Код:
FileCreateShortcut
ярлык создает - но ему как фиолетово на то что ярлык нерабочий. И как быть?
ЗЫ: Нужно это для проги, которая у меня создает интернет-подключение из бэкапа телефонной книги(то есть сразу и логинит пользователя и инет запускает), единственно - ярлык на десктоп создавать она не умеет.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
попробуй так:
Код:
$sConnectInput = InputBox('Имя подключения', 'Введите Имя подключения:', '', '') ; Вводим имя подключения
If @error Then Exit
; Создаёт ярлык
FileCreateShortcut(@SystemDir & "\rasphone.exe", @DesktopDir & "\" & $sConnectInput  & ".lnk",@SystemDir,'-d "' & $sConnectInput & '"', "Ярлик сетевого подключения", @SystemDir & "\netshell.dll", "", "105")
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
beliy
Спасибо за предложенный вариант, но таким образом создается альтернативный вариант ярлыка(замечу просто ярлыка и ничего более) для подключения, а отнюдь не родной ActiveX объект Windows (ну может и не ActiveX, но не суть важно :smile: ). Главный минус этого ярлыка - невозможность через него же отключить интернет. Поэтому необходимо создание именно родного объекта ярлыка подключений удаленного доступа.
ЗЫ: Есть прога pppoe_setup.exe, которая создает пустой(без пароля и логина) объект такого рода- но так как в декомпиляции прог я не силен, не могу ее расковырять, чтобы понять как она это делает :( Может кто юзал ее?
------------------------------------------------------------
...Спустя полвека исканий ;)
Почти нашел как это сделать - через родные функции Windows - заглянул в netshell.dll и выяснил что там наличествует такой метод как HrCreateDesktopIcon - на 99% уверен что это именно он создает искомый ярлык интернет-подключения, но...запуск rundll32.exe netshell.dll,HrCreateDesktopIcon результата не дал. Видимо методу требуются аргументы. Какие именно Гугль молчит...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
erlik
если у тебя есть подключение (типа дозвона), то предоставленный скрипт работает..проверил..просто для создания ярлыка нужно вводить точное имя подключения..то есть я создал подключение под именем inet то и в диалоговом окне скрипта нужно вводить это же имя - inet. тогда все работает
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
можно модифицировать скрипт от beliy
Код:
$sConnectInput=FileSelectFolder("Выберите подключение", "::{7007ACC7-3202-11D1-AAD2-00805FC1270E}")
If $sConnectInput = '' Then Exit
FileCreateShortcut(@SystemDir & "\rasphone.exe", @DesktopDir & "\" & $sConnectInput  & ".lnk",@SystemDir,'-d "' & $sConnectInput & '"', "Ярлик сетевого подключения", @SystemDir & "\netshell.dll", "", "105")

тогда с именем не ошибешься :smile:
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
Камрады (Александр в том числе) ну не подходит мне скрипт создания стандартного ярлыка - мне нужно чтобы создавался ярлык идентичный тому, который создает сама Windows - в котором есть и кнопка подключить и отключить. А она создает не ярлык, а ActiveX объект - как она это делает я уже примерно нашел (пример выше), но не знаю как заставить это работать.

PS:Скрипт от beliy безусловно рабочий, но... см. выше.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
2 erlik
для каждого подключения на разный компьютерах для сетевого подключения будет разный GUID и сделать скрипт который корректно создавать ярлык через GUID немного проблематично.
По HrCreateDesktopIcon, то в сети документации по ней бегло найти не удалось. Попробуй спросить по ней на сайтах типа oszone, ru-board, msdn.
Но нашол скрипт на VBScript который корректно создает ярлык, но самостоятельно портировать под Autoit не получилось, мб гуру помогут. Собственно скрипт:
Код:
Option Explicit

Const ssfCONNECTIONS = &H0031
Const ssfDESKTOP = &H0000
'Const ssfCOMMON_DESKTOPDIRECTORY = &H0019

Dim objShell
Dim objFolderConnections
Dim objFolderDesktop
'Dim objFolderAllUsersDesktop
Dim objSubFolder


Set objShell = WScript.CreateObject("Shell.Application")
Set objFolderConnections = objShell.NameSpace(ssfCONNECTIONS)

If (Not objFolderConnections Is Nothing) Then
    For Each objSubFolder In objFolderConnections.Items
        If objSubFolder.Name = "Имя подключения" Then
            Set objFolderDesktop = objShell.NameSpace(ssfDESKTOP) 'objFolderAllUsersDesktop
            
            If (Not objFolderDesktop Is Nothing) Then
                objFolderDesktop.CopyHere objSubFolder
            End If
        End If
    Next
End If

Set objFolderDesktop = Nothing ' objFolderAllUsersDesktop
Set objFolderConnections = Nothing
Set objShell = Nothing

WScript.Quit 0

В скрипте вместо "Имя подключения" пишем имя нужного подключения.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$objShell= ObjCreate("Shell.Application")
$objFolderConnections= $objShell.NameSpace(49)
    For $objSubFolder In $objFolderConnections.Items
        If $objSubFolder.Name = "Имя подключения" Then
           $objFolderDesktop = $objShell.NameSpace(0)
               $objFolderDesktop.CopyHere($objSubFolder)
        EndIf
    Next
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
beliy, sngr
Камрады, Вы все таки сделали это :beer:
Идеально - именно то что надо :ok: Эх, был бы рядом - обоим пива бы поставил.
В общем спасибо огромное. Теперь моя прога все что надо будет уметь делать.
Все таки форум рулит - хорошие здесь люди.
 
Верх