Что нового

[Автоматизация] ICS (Общий доступ к интернету) EnableDisableICS.au3

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
AutoIt: 3.3.6.1+
Версия: 1.0

Категория: Автоматизация, Интернет, Сеть, Система

Описание: Функция для включения/отключения общего доступа к Интернету для указанного сетевого интерфейса
GfrQAFkIrbc.jpg

Код/Пример:
Код:
; Отключаем ICS:
_EnableDisableICS("D-Link DFE-520TX", "Hostednetwork", 0)
MsgBox(0,"Disable",@Error)

; Включаем ICS (подключение "D-Link DFE-520TX" "расшаривает" Интернет для подключения "Hostednetwork"):
_EnableDisableICS("WLAN", "Hostednetwork", 1)
MsgBox(0,"Enable",@Error)

Файл: EnableDisableICS.au3

История версий:
0.0: 10/10/2016, 16:09:29 Комментарий с исходником, который я правил (Автор Bryuhanov)
1.0: 28/01/2017

Код UDF:
Код:
#CS
Автор:			Bryuhanov    ( http://autoit-script.ru/index.php?topic=22965.0 )
Редактор:		Astel064		( http://autoit-script.ru/index.php?topic=25200 )
=====================================================================
Функция:			_EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)
Описание:		Включает, либо отключает общий доступ к интернету для указанного сетевого подключения
Синтаксис:		_EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)
Параметры:
							$sPublicConnectionName = Имя публичного подключения (с доступом к сети Интернет).
							$ssPrivateConnectionName = Имя приватного подключения (которому будет открыт доступ к сети Интернет).
							$bEnable = Если указано 1, то общий доступ будет открыт, иначе, если указано 0 - закрыт.

Возврат:		1=Успех, 0=Ошибка
@Error:			0=Успех, иначе:
		1-7:		Ошибка объекта
		-1, -2:	Не найдено одно (или оба соответственно) сетевое подключение
=====================================================================
#CE




#RequireAdmin

Func _EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)
Local $oNetSharingManager, $oConnectionCollection, $oItem, $EveryConnection, $objNCProps, $bFound=0


$oNetSharingManager = ObjCreate("HNetCfg.HNetShare.1")
	If NOT IsObj($oNetSharingManager) Then Return SetError(1,0,0)

$oConnectionCollection = $oNetSharingManager.EnumEveryConnection
	If NOT IsObj($oConnectionCollection) Then Return SetError(2,0,0)


For  $oItem In $oConnectionCollection
	; $oNetSharingManager.NetConnectionProps($oItem).Name
	$objNCProps = $oNetSharingManager.NetConnectionProps($oItem)
		If NOT IsObj($objNCProps) Then Return SetError(4,0,0)
		If $objNCProps.MediaType = 0 Then ContinueLoop
	
;	MsgBox(0, "Ics", "Guid="&$objNCProps.Guid & @CRLF&"Name="&$objNCProps.Name & @CRLF&"DeviceName="&$objNCProps.DeviceName & @CRLF&"Status="&$objNCProps.Status & @CRLF&"MediaType="&$objNCProps.MediaType & @CRLF&"Characteristics="&$objNCProps.Characteristics, 0, 0x000000)

	$EveryConnection = $oNetSharingManager.INetSharingConfigurationForINetConnection($oItem)
		If NOT IsObj($EveryConnection) Then Return SetError(3,0,0)
		
		If $objNCProps.name = $ssPrivateConnectionName Then
		$bFound += 1
;		MsgBox(0,"","Starting Internet Sharing For: " & $objNCProps.name)
			If $bEnable Then
			$EveryConnection.EnableSharing(1)
			Else
			$EveryConnection.DisableSharing()
			EndIf
		EndIf
Next



$oConnectionCollection = $oNetSharingManager.EnumEveryConnection
	If NOT IsObj($oConnectionCollection) Then Return SetError(5,0,0)


For  $oItem In $oConnectionCollection
	$objNCProps = $oNetSharingManager.NetConnectionProps($oItem)
		If NOT IsObj($objNCProps) Then Return SetError(6,0,0)
		If $objNCProps.MediaType = 0 Then ContinueLoop
	
	$EveryConnection = $oNetSharingManager.INetSharingConfigurationForINetConnection($oItem)
		If NOT IsObj($EveryConnection) Then Return SetError(7,0,0)
		
		If $objNCProps.name = $sPublicConnectionName Then
		$bFound += 1
;		MsgBox(0,"","Internet Sharing Success For: " & $objNCProps.name)
			If $bEnable Then
			$EveryConnection.EnableSharing(0)
			Else
			$EveryConnection.DisableSharing()
			EndIf
		EndIf
Next


	If $bFound = 2 Then Return SetError(0,0,1)
	If $bFound = 1 Then Return SetError(-1,0,0)
Return SetError(0,0,-2)
EndFunc









#CS
_EnableDisableICS("D-Link DFE-520TX", "Hostednetwork", 0)
MsgBox(0,"Disable",@Error)

_EnableDisableICS("WLAN", "Hostednetwork", 1)
MsgBox(0,"Enable",@Error)
 #CE

Источники: autoit-script.ru, kazunposh.wordpress.com
Автор(ы): Bryuhanov, Astel064
 

Вложения

  • EnableDisableICS.au3
    3.5 КБ · Просмотры: 14
A

Alofa

Гость
Включать-то оно включает, а вот при отключении:
Код:
_EnableDisableICS("Беспроводная сеть", "Ethernet", 0)

Func _EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)
; ...
	For $oItem In $oConnectionCollection
; ...
				$EveryConnection.DisableSharing() ; <-- Скрипт падает на этой строке
; ...
	Next
; ...				
EndFunc   ;==>_EnableDisableICS

Код:
>Exit code: -1073741819
Win10[x64]
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Alofa [?]
Включать-то оно включает, а вот при отключении:

Давайте разберемся, почему так: мне понадобится скриншот окна "Панель управления\Сеть и Интернет\Сетевые подключения", чтобы знать, какие типы подключений Вы используете. Сам я тестировал эту функцию на Win7 x64. Проверить на Win10 возможности нет, буду благодарен, если кто-либо еще проверит ее на десятке.
 

Вложения

  • 2018-01-29_020836.jpg
    2018-01-29_020836.jpg
    134.4 КБ · Просмотры: 13

mr.god

Новичок
Сообщения
2
Репутация
0
Я извиняюсь, а какие значения и как править в скрипте? Если вместо
Func _EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)
прописать строчку
Func _EnableDisableICS("Беспроводная сеть", "Ethernet", 0)
то выдает ошибку с галочкой под первой буквой названия соединения, т.е. Б
как делать?
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
mr.god [?]
Я извиняюсь, а какие значения и как править в скрипте? Если вместоFunc _EnableDisableICS($sPublicConnectionName, $ssPrivateConnectionName, $bEnable)прописать строчкуFunc _EnableDisableICS("Беспроводная сеть", "Ethernet", 0)то выдает ошибку с галочкой под первой буквой названия соединения, т.е. Бкак делать?

А скришнот (или полный текст описания) ошибки можно? Какая ОС (случайно не Win10 x64)?
Желательно кусок Вашего кода, откуда Вы запускаете функцию при включении ICS и кусок с отключением ICS...
 

mr.god

Новичок
Сообщения
2
Репутация
0
я новичок, мои действия таковы - скачал ваш файлик EnableDisableICS.au3, установил программу autoit_v3.3, далее запускаю ваш файлик и ничего не происходит, потом я меняю ниже мной описанную строчку как у вас в примере, в итоге выходит допустим такая часть

#RequireAdmin

Func _EnableDisableICS(most, openvpn, 0)
Local $oNetSharingManager, $oConnectionCollection, $oItem, $EveryConnection, $objNCProps, $bFound=0

и при запуске файлика ошибка, ругается на значение в скобках. Win server 2016
Просто я допускаю, что чтото не так или не там меняю. Прошу помощи, если не трудно
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
mr.god [?]
я новичок, мои действия таковы - скачал ваш файлик EnableDisableICS.au3, установил программу autoit_v3.3, далее запускаю ваш файлик и ничего не происходит, потом я меняю ниже мной описанную строчку как у вас в примере, в итоге выходит допустим такая часть

Код:
;Подключаем библиотеку, которая лежит в папке со скриптом (ее можно скачать из шапки темы)
#include "EnableDisableICS.au3"

; По Вашему примеру, подключение с именем most дает доступ в интернет, которым надо поделиться подключению с именем openvpn. Т.е. Интернет с most открывается для openvpn.


; Включаем общий доступ Интернета
_EnableDisableICS("most", "openvpn", 1)

; Выводим ошибку:
	If @Error Then
	MsgBox(0, "Enable ICS", "Ошибка "&@Error)
	Else
	MsgBox(0, "Enable ICS", "Успешно")
	EndIF


; Отключаем общий доступ Интернета
_EnableDisableICS("most", "openvpn", 0)

; Выводим ошибку:
	If @Error Then
	MsgBox(0, "Disable ICS", "Ошибка "&@Error)
	Else
	MsgBox(0, "Disable ICS", "Успешно")
	EndIF
 

Kutfe

Новичок
Сообщения
4
Репутация
0
Astel064 сказал(а):
mr.god [?]
Код:
;Подключаем библиотеку, которая лежит в папке со скриптом (ее можно скачать из шапки темы)
#include "EnableDisableICS.au3"

; По Вашему примеру, подключение с именем most дает доступ в интернет, которым надо поделиться подключению с именем openvpn. Т.е. Интернет с most открывается для openvpn.


; Включаем общий доступ Интернета
_EnableDisableICS("most", "openvpn", 1)

; Выводим ошибку:
	If @Error Then
	MsgBox(0, "Enable ICS", "Ошибка "&@Error)
	Else
	MsgBox(0, "Enable ICS", "Успешно")
	EndIF


; Отключаем общий доступ Интернета
_EnableDisableICS("most", "openvpn", 0)

; Выводим ошибку:
	If @Error Then
	MsgBox(0, "Disable ICS", "Ошибка "&@Error)
	Else
	MsgBox(0, "Disable ICS", "Успешно")
	EndIF

Прочитал, скачал, закинул файл EnableDisableICS.au3 в папку Include, но выдает ошибку Cannot parse #include
Если не трудно, можно алгоритм этой автоматизации чуть-чуть подробнее описать?
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Kutfe [?]
закинул файл EnableDisableICS.au3 в папку Include

Файл"EnableDisableICS.au3" не обязательно закидывать в папку "Include", его можно разместить рядом со скриптом.

• Чтобы использовать UDF из папки "Include", то синтаксис будет такой:
Код:
#include <EnableDisableICS.au3>


• Если UDF лежит рядом с исполняемым скриптом, то можно указать, как в моем примере:
Код:
#include "EnableDisableICS.au3"
 

Kutfe

Новичок
Сообщения
4
Репутация
0
Отлично! С этим понятно.
Далее мои действия, я копирую весь этот текст в окно программы и запускаю F5?

Но после этих действий ошибка ((
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Kutfe [?]
Но после этих действий ошибка ((

Где у Вас лежит UDF (файл библиотеки) "EnableDisableICS.au3"?
В Вашем случае, AutoIt не может подключить "EnableDisableICS.au3" в скрипт, т.к. не видит этот файл рядом со скриптом "Kapital.au3"...


Добавлено:
Сообщение автоматически объединено:

Kutfe, для Вас запихал все в один архив. Распакуйте содержимое архива (2 файла) в ОДНУ папку и запустите скрипт "Kapital.au3".

На 90% компьютерах под управлением Win7 и выше UDF работает.

Если Вы пишите программу для раздачи проводного интернета через подключенный к ПК Wi-Fi модуль, то могу Вам предложить свою бесплатную программу для этого: Hostednetwork
 

Вложения

  • ICS для Kutfe.zip
    1.7 КБ · Просмотры: 4

Kutfe

Новичок
Сообщения
4
Репутация
0
Astel064 [?]
т.к. не видит этот файл рядом со скриптом "Kapital.au3"...
Странно, они оба лежат в корне диска D:\
P.S. у меня кстати Win10_64

Мне на самом деле надо простенький скрипт, что бы раз в сутки он убирал и ставил галочку на разрешении общего доступа одного подключения в другом. Это надо для работы онлайн касс, что бы чеки отправлялись. А то какой-то затык с этим разрешением. Может где можно увеличить таймаут этого подключения?
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Kutfe [?]
Мне на самом деле надо простенький скрипт, что бы раз в сутки он убирал и ставил галочку на разрешении общего доступа одного подключения в другом

Сейчас заметил, что Ваша версия AutoIt 3.3.14.0, а моя 3.3.6.1 (для нее писалась эта UDF), может в этом проблема. Скомпилировал скрипт в 3.3.6.1 в виде консольного приложения в двух вариантах (x32 и x64) и залил архив на Яндекс.Диск.

У себя проверил, оба скрипта ("Kapital_x32.exe" и "Kapital_x64.exe") на моем ПК под Win7 x64 работают.

Код:
#Notrayicon
#RequireAdmin
#Region
#AutoIt3Wrapper_OutFile=Kapital_x32.exe
#AutoIt3Wrapper_OutFile_X64=Kapital_x64.exe
#AutoIt3Wrapper_UseX64=N
#AutoIt3Wrapper_Compile_both=Y
#AutoIt3Wrapper_Aut2exe=C:\Program Files (x86)\AutoIt3.3.6.1\Aut2ExeMinRes\Aut2exe.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Change2CUI=Y
#AutoIt3Wrapper_Res_Comment=ICS для Kutfe
#AutoIt3Wrapper_Res_Description=ICS для Kutfe
#AutoIt3Wrapper_Res_Fileversion=1.0.0.2
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=Y
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Res_LegalCopyright=Astel064
#AutoIt3Wrapper_res_requestedExecutionLevel=requireAdministrator
#AutoIt3Wrapper_res_Compatibility=Vista,Windows7,Windows8.1,Windows8,Windows10
#AutoIt3Wrapper_Res_SaveSource=Y
#AutoIt3Wrapper_Run_Before="C:\Program Files (x86)\AutoIt3.3.6.1\Utilits\CompileDelete\CompileDelete.exe" /Delete /32=%out% /64=%outx64%
#EndRegion


#include "EnableDisableICS.au3"

$sConnect_A = "Internet"
$sConnect_B = "Kassa"
$iErrors = 0

ConsoleWrite("Connect_A="&$sConnect_A&@CRLF&"Connect_B="&$sConnect_B&@CRLF&@CRLF)

ConsoleWrite("Disable ICS...")
_EnableDisableICS($sConnect_A, $sConnect_B, 0)
    If @Error Then
    ConsoleWrite(" ERROR #"&@Error&@CRLF)
    $iErrors += 1
    Else
    ConsoleWrite(" OK"&@CRLF)
    EndIF

Sleep(2500)

ConsoleWrite("Enable ICS...")
_EnableDisableICS($sConnect_A, $sConnect_B, 1)
    If @Error Then
    ConsoleWrite(" ERROR #"&@Error&@CRLF)
    $iErrors += 1
    Else
    ConsoleWrite(" OK"&@CRLF)
    EndIF

Sleep(2500)
ConsoleWrite("Exit Key="&$iErrors&@CRLF)
Exit $iErrors


Может где можно увеличить таймаут этого подключения?
Увы, этого я не знаю.

Надеюсь, что оба скрипта у Вас будут работать. В любом случае, жду Вашего ответа.
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Kutfe, ну так что?
 

Kutfe

Новичок
Сообщения
4
Репутация
0
Astel064 сказал(а):
Извиняюсь за долгий ответ. Всё работает как часы, выкл-вкл. Поставил в расписание файлик :ok:
Спасибо огромное :thumbs_up:
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Kutfe [?]
Извиняюсь за долгий ответ. Всё работает как часы, выкл-вкл. Поставил в расписание файлик
good.gif
Спасибо огромное

Вам спасибо за обратную связь, удачи :smile:
 
Верх