Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Подключение/отключение по локальной сети 
Author Message
Flasher



PostPosted: Fri Mar 05, 2010 12:15    Post subject: Reply with quote

Пару недель назад нашёл несколько раздельных решений своего вопроса. Решил таки выложить. Надеюсь кому-то будет полезным. Хотелось бы увидеть мнение о работоспособности предложенного людей с динамическим IP, а также у кого не WinXP, а, скажем, семёрка или Виста.

Ну первый и известный многим способ, упомянутый в первом посте, это включение/выключение сетевой платы с помощью devcon . Код кнопки:
    TOTALCMD#BAR#DATA
    devcon
    enable(disable) PCI\VEN_xxxx
    Путь\ваша библиотека иконок.dll,№
    Включить(Отключить) сетевую карту (сеть, интернет)
    %COMMANDER_PATH%\Utils\

    -1
Положите devcon.exe, например, в папку Utils вашего Коммандера. Откройте Диспетчер устройств(Device Manager), в секции <Сетевые платы> вызовите Свойства своей из контекстного меню, перейдите на вкладку <Сведения>, из окошка скопируйте четыре символа после PCI\VEN_ и вставьте в графу Параметры этой кнопки вместо xxxx

Следующий способ с помошью батника:
Code:
@echo off
if {%3}=={} @echo Syntax: ConnInterface Action InterfaceName Status&goto :EOF
setlocal
set Action=%1
set IFN=%2
set Action=%Action:"=%
if /i "%action%" EQU "C" goto con
if /i "%action%" EQU "D" goto dis
if /i "%action%" EQU "S" goto sta
@echo Error: ConnInterface %1 %2 %3 - Action is must be C,D, or S
endlocal
goto :EOF
:con
set IC=cnic %IFN% -c -s -v
goto doit
:dis
set IC=cnic %IFN% -d -s -v
goto doit
:sta
set status=E
set wrk=E
for /f "Tokens=*" %%s in ('cnic %IFN% -s -v^|find "connected"') do (
 set wrk=%%s
)
set wrk=%wrk:"=%
if "%wrk%" EQU "E" goto finish
set wrk=%wrk:*disconnected=D%
if "%wrk%" EQU "D" set status=D&goto finish
set wrk=%wrk:*connected=C%
if "%wrk%" EQU "C" set status=C
:finish
endlocal&set %3=%status%
goto :EOF
:doit
set status=E
for /f "Tokens=*" %%s in ('%IC%^|find "Operation succeded"') do (
 set status=Y
)
if "%status%" EQU "E" goto finish
goto sta
Сохраните код, например, в ConnInterface.bat , положите его в каталог вместе с распакованным отсюда CNic.exe
Код кнопки для него:
    TOTALCMD#BAR#DATA
    %COMMANDER_PATH%\Utils\chp\chp.exe ConnInterface
    C(D) "Подключение по локальной сети" %PATHEXT%
    Icons\Включить(Выключить)_сеть.ico
    Включить(Выключить) локальную сеть (интернет)
    %COMMANDER_PATH%\Utils\ConnInterface\
    1
    -1
Утилита chp скрывает чёрные окна.

Ну и третий способ выкладываю для пишущих в Autoit, поскольку требуется в доработке. В отличии от предыдущих должен удовлетворять моей задаче Включать/Выключать одной кнопкой. Ведёт себя некорректно, постоянно идёт на включение(к автору пока не обращался).

Code:
 _NetConnection_Verb("Подключение по локальной сети", "&Отключить")

MsgBox (48, "Сообщение", "Адаптер отключен!")

 _NetConnection_Verb("Подключение по локальной сети", "&Включить")

MsgBox (64, "Сообщение", "Адаптер включен!")

Func _NetConnection_Verb($sConnectionName, $sVerb)
    Local $sFolderName = "Сетевые подключения"
    Local $oNetConnections, $oConnection
    Local $oShellApp = ObjCreate("Shell.Application")
    Local $oControlPanel = $oShellApp.Namespace(3)
    For $oFolderItem In $oControlPanel.Items
        If $oFolderItem.Name = $sFolderName Then
            $oNetConnections = $oFolderItem.GetFolder
            ExitLoop
        EndIf
    Next
    If Not(IsObj($oNetConnections)) Then Return SetError(1, 0, False)
    For $oFolderitem In $oNetConnections.Items
        If StringInStr($oFolderitem.Name, $sConnectionName) Then
            $oConnection = $oFolderitem
            ExitLoop
        EndIf
    Next
    If Not(IsObj($oConnection)) Then Return SetError(2, 0, False)
    $oConnection.InvokeVerb($sVerb)
    Sleep(1000)
EndFunc

Если возникнет реализация объединения в одну кнопку Connect/Disconnect по одному из из первых двух способов, буду примного благодарен.


Last edited by Flasher on Sun Mar 07, 2010 15:19; edited 7 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group