Seite 1 von 2

wie LAN trennen unter Windows10

Verfasst: 26.01.2018 22:59
von udg
Ich habe ein mini Tool geschrieben, dass mir mit klick auf den Button jeweils die Verbindung zum Inet trennen oder eben wieder herstellen soll.
Das ganze funktioniert unter Windows 7 wunderbar.
Leider bekommen wir unter Windows 10 keine Rechte, den LAN Adapter per Buttonklick zu trennen bzw, dann wieder mit dem Inet zu verbinden.

Hat jemand eine Lösung dafür?
Um den Vorgang durchführen zu können, benötigt die Exe bzw. das Kommando ADMIN Rechte die ich im Compiler via Checkbox aktiviere wenn ich das Ganze zu einer Exe compiliere.

Bild

hier der code:

Code: Alles auswählen

;
; Purebasic 5.61
;
; Compileroption --> Request Adminmode
; WINDOWS 7 COMMAND
; 
; lpszConnectionName$ ---> liest den Namen der Verbindung aus
;
; netsh.exe Interface set Interface name = "Lan-Verbindung" admin=disabled
; netsh.exe interface set Interface name = "Lan-Verbindung" admin=enabled
;
; WINDOWS 10 COMMAND
; netsh.exe interface set interface name="Lan-Verbindung" admin=enabled
; netsh.exe interface set interface name="Lan-Verbindung" admin=Disabled
;

EnableExplicit

Enumeration
#Wnd_Main
EndEnumeration

Enumeration
  #Cnt_Window
  ;:Exit Button
  #Btn_Exit
  #Img_BtnExit
  ;:Minimize Button
  #Btn_Minimize
  #Img_BtnMinimize
  ;:Draw Header
  #Header
  #Img_Header
  ;:Window Title
  #Titel
  ;:Font
  #Fnt_SegoeUI12
  #Fnt_SegoeUI14
  #Fnt_SegoeUI16
  #Fnt_Arial10
  
  #Btn_SwitchOff
  #Btn_SwitchOn 
  #Gadget_Exit
EndEnumeration

;:Define Colors
#Wnd_Color      = $868686 ; dark grey
#Col_Header     = $FFFFFF ; white
#Col_Footer     = $808080 ; mid grey
#Col_Text       = $666667 ; black grey
#Col_Container  = $F0F0F0 ; silver grey
#Col_TextHoover = $000000 ; Black
#Col_BtnHover   = $7575CE ; altblau
#Col_BtnLine    = $9A9A9A ; mittelgrau
#Col_BtnConnect = $96B491 ; hellgrün


;:Window size
#Wnd_Width     = 503     ; px
#Wnd_Height    = 280     ; px

Define lpdwFlags
Define lpszConnectionName$ = Space(255)

Global HyperLinkProc
Global hCurcor_Arrow = LoadCursor_(0, #IDC_HAND)
Global Font1 = LoadFont(#PB_Any, "Arial", 10, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI12, "Segoe Ui", 12, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI14, "Segoe Ui", 14, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI16, "Segoe Ui", 16, #PB_Font_HighQuality)

Define Event, EventType

Procedure Event_Gadget_Exit()
  
  Protected Farbe, Farbe2
  
  Select EventType()
      
    Case #PB_EventType_MouseLeave
      Farbe = RGB(128, 128, 128)
      Farbe2 = #Col_Header
    Case #PB_EventType_MouseEnter, #PB_EventType_MouseMove
      Farbe = RGB(0,0,0)
      Farbe2 = #Col_Container
    Case #PB_EventType_LeftButtonDown
      End
      
  EndSelect
  
  StartDrawing(CanvasOutput(#Gadget_Exit))
  Box(0, 0, 60, 60, Farbe2)
  Line(3, 56, 54, -54, Farbe)
  Line(3, 4, 54, 54, Farbe)
  StopDrawing()
  
EndProcedure

Procedure DropShadow(Window)
 
  ; (WindowsAPI) - Generiert bei einem randlosen Fenster einen Schatten
 
  If IsWindow(Window)
    SetClassLongPtr_(WindowID(Window), #GCL_STYLE, #CS_DROPSHADOW)
  EndIf
 
EndProcedure
Procedure SystemButtons()
  ;Exit Button
  CanvasGadget(#Gadget_Exit, WindowWidth(0) - 61, 1, 60, 60)
  StartDrawing(CanvasOutput(#Gadget_Exit))
  Box(0, 0, 60, 60, #Col_Header)
  Line(3, 56, 54, -54, RGB(128, 128, 128))
  Line(3, 4, 54, 54, RGB(128, 128, 128))
  StopDrawing()
  BindGadgetEvent(#Gadget_Exit, @Event_Gadget_Exit())
  
  ;MINIMIZE BUTTON
  CreateImage(#Btn_Minimize, 40, 40)
  StartDrawing(ImageOutput(#Btn_Minimize))
  FillArea(1, 1, -1, #Col_Header)
  Line(0, 39, 40, 1, #Col_Text)
  StopDrawing()
  ImageGadget(#Img_BtnMinimize, WindowWidth(0)-110, 18, 40, 40, ImageID(#Btn_Minimize))
EndProcedure
Procedure main()
  
  Protected Text.s = "", x
  
  OpenWindow(#Wnd_Main, 0, 0, #Wnd_Width, #Wnd_Height, " ", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetWindowColor(#Wnd_Main, #Wnd_Color)
  DropShadow(#Wnd_Main)
 
  ;HEADER
  CreateImage(#Img_Header, WindowWidth(#Wnd_Main)-2, 60, 32, #Col_Header)
  StartDrawing(ImageOutput(#Img_Header))
  StopDrawing()
  ImageGadget(#Header, 1, 1, 0, 0, ImageID(#Img_Header))
  ;disable to make it possible: grab with LMB Down
  DisableGadget(#Header, #True)
 
  ;Set Window Title
  TextGadget(#Titel, 80, 14, 230, 30, "Dis./ or Reconnect LAN", #SS_CENTER)
  SetGadgetColor(#Titel, #PB_Gadget_BackColor, #Col_Header)
  SetGadgetColor(#Titel, #PB_Gadget_FrontColor, #Col_Text)
  SetGadgetFont(#Titel, FontID(#Fnt_SegoeUI16))
 
  ;Add all Gadgets here
  ContainerGadget(#Cnt_Window, 1, 62, WindowWidth(#Wnd_Main)-2, WindowHeight(#Wnd_Main)-89, #PB_Container_BorderLess)
  SetGadgetColor(#Cnt_Window, #PB_Gadget_BackColor, #Col_Container)
  
    ; Disconnect Internet
    ButtonGadget(#Btn_SwitchOff, 35, 60, 200, 60,"Disconnect Internet", 0)
    SetGadgetFont(#Btn_SwitchOff, FontID(#Fnt_SegoeUI12))
    
    ; Connect to Internet
    ButtonGadget(#Btn_SwitchOn, 265, 60, 200, 60,"Reconnect Internet", 0)
    SetGadgetFont(#Btn_SwitchOn, FontID(#Fnt_SegoeUI12))
   
  CloseGadgetList()

  SystemButtons()

  HideWindow(#Wnd_Main, #False)
 
EndProcedure

main()

Repeat
  Event = WaitWindowEvent()
  EventType = EventType()
 
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        ;Exit
        Case #Img_BtnExit
          End
          
        ;Minimize
        Case #Img_BtnMinimize
          If EventType = #PB_EventType_LeftClick
            SetWindowState(#Wnd_Main, #PB_Window_Minimize)
          EndIf
          
        ;Disconnect
        Case #Btn_SwitchOff
          If EventType = #PB_EventType_LeftClick
            ;Windows 7
            If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=disabled",  "", #PB_Program_Hide)
          Else
            ;Windows 10
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=disabled",  "", #PB_Program_Hide)            
          EndIf
          EndIf
          
        ;Reconnect   
        Case #Btn_SwitchOn
          If EventType = #PB_EventType_LeftClick
            ;Windows 7
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=enabled",  "", #PB_Program_Hide)
          Else
            ;Windows 10
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=enabled",  "", #PB_Program_Hide)  
          EndIf     
      
      EndSelect
      
    ;DRAG WITH MOUSE
    Case #WM_LBUTTONDOWN
      If WindowMouseX(#Wnd_Main) >= 0 And WindowMouseX(#Wnd_Main) <= WindowWidth(#Wnd_Main)-2 And WindowMouseY(#Wnd_Main) >= 0 And WindowMouseY(#Wnd_Main) <= 61
        SendMessage_(WindowID(#Wnd_Main), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      EndIf
  EndSelect

ForEver

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 12:17
von RSBasic
Ich verwende Windows 10 und habe deinen Code mit Administratorrechten ausgeführt und getestet. Bei mir funktioniert das Deaktivieren und Aktivieren meiner Internetverbindung einwandfrei.
Führe mal den vollständigen Pfad (netsh.exe set interface [...]) in dener CMD-Konsole, die ebenfalls mit Administratorrechten ausgeführt werden muss, ein und schaue, was netsh.exe dir sagt. Irgendeine Fehlermeldung?

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 15:33
von Bisonte
Als Fehlermeldung wird ausgegeben : Daten sind unzulässig.... Nichts weiter.
In der CMD mit Adminrechten ausgeführt.... Auch den Namen der Verbindung richtig eingetragen. Nichts....
Selbst wenn man das "admin=disabled" einfach nur "disabled" schreibt, wie es in einigen "Tipps" angegeben wird,
gleiche Fehlermeldung.

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 15:43
von Imhotheb
Gibts da vielleicht einen Unterschied von Pro und Home?

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 15:43
von RSBasic
Ich habe Home und da funktioniert es.

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 15:52
von _JON_
Bei meinem Win10 Pro heist es nicht "Lan-Verbindung" sondern "Ethernet".

Musst mal schauen mit:

Code: Alles auswählen

netsh interface show interface

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 18:34
von udg
_JON_ hat geschrieben:Bei meinem Win10 Pro heist es nicht "Lan-Verbindung" sondern "Ethernet".

Musst mal schauen mit:

Code: Alles auswählen

netsh interface show interface

den Namen lese ich mit:

If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)

aus.

ich hab noch mal eine If Schleife eingebunden. Bringt das was?

Code: Alles auswählen

;
; Purebasic 5.61
;
; WINDOWS 7 COMMAND
;
; lpszConnectionName$ ---> liest den Namen der Verbindung aus
;
; netsh.exe Interface set Interface name = "Lan-Verbindung" admin=disabled
; netsh.exe interface set Interface name = "Lan-Verbindung" admin=enabled
;
; WINDOWS 10 COMMAND
; netsh.exe interface set interface name="Lan-Verbindung" admin=enabled
; netsh.exe interface set interface name="Lan-Verbindung" admin=Disabled
;

EnableExplicit

Enumeration
#Wnd_Main
EndEnumeration

Enumeration
  #Cnt_Window
  ;:Exit Button
  #Btn_Exit
  #Img_BtnExit
  ;:Minimize Button
  #Btn_Minimize
  #Img_BtnMinimize
  ;:Draw Header
  #Header
  #Img_Header
  ;:Window Title
  #Titel
  ;:Font
  #Fnt_SegoeUI12
  #Fnt_SegoeUI14
  #Fnt_SegoeUI16
  #Fnt_Arial10
 
  #Btn_SwitchOff
  #Btn_SwitchOn
  #Gadget_Exit
EndEnumeration

;:Define Colors
#Wnd_Color      = $868686 ; dark grey
#Col_Header     = $FFFFFF ; white
#Col_Footer     = $808080 ; mid grey
#Col_Text       = $666667 ; black grey
#Col_Container  = $F0F0F0 ; silver grey
#Col_TextHoover = $000000 ; Black
#Col_BtnHover   = $7575CE ; altblau
#Col_BtnLine    = $9A9A9A ; mittelgrau
#Col_BtnConnect = $96B491 ; hellgrün


;:Window size
#Wnd_Width     = 503     ; px
#Wnd_Height    = 280     ; px

Define lpdwFlags
Define lpszConnectionName$ = Space(255)

Global HyperLinkProc
Global hCurcor_Arrow = LoadCursor_(0, #IDC_HAND)
Global Font1 = LoadFont(#PB_Any, "Arial", 10, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI12, "Segoe Ui", 12, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI14, "Segoe Ui", 14, #PB_Font_HighQuality)
LoadFont(#Fnt_SegoeUI16, "Segoe Ui", 16, #PB_Font_HighQuality)

Define Event, EventType

Procedure Event_Gadget_Exit()
 
  Protected Farbe, Farbe2
 
  Select EventType()
     
    Case #PB_EventType_MouseLeave
      Farbe = RGB(128, 128, 128)
      Farbe2 = #Col_Header
    Case #PB_EventType_MouseEnter, #PB_EventType_MouseMove
      Farbe = RGB(0,0,0)
      Farbe2 = #Col_Container
    Case #PB_EventType_LeftButtonDown
      End
     
  EndSelect
 
  StartDrawing(CanvasOutput(#Gadget_Exit))
  Box(0, 0, 60, 60, Farbe2)
  Line(3, 56, 54, -54, Farbe)
  Line(3, 4, 54, 54, Farbe)
  StopDrawing()
 
EndProcedure

Procedure DropShadow(Window)
 
  ; (WindowsAPI) - Generiert bei einem randlosen Fenster einen Schatten
 
  If IsWindow(Window)
    SetClassLongPtr_(WindowID(Window), #GCL_STYLE, #CS_DROPSHADOW)
  EndIf
 
EndProcedure
Procedure SystemButtons()
  ;Exit Button
  CanvasGadget(#Gadget_Exit, WindowWidth(0) - 61, 1, 60, 60)
  StartDrawing(CanvasOutput(#Gadget_Exit))
  Box(0, 0, 60, 60, #Col_Header)
  Line(3, 56, 54, -54, RGB(128, 128, 128))
  Line(3, 4, 54, 54, RGB(128, 128, 128))
  StopDrawing()
  BindGadgetEvent(#Gadget_Exit, @Event_Gadget_Exit())
 
  ;MINIMIZE BUTTON
  CreateImage(#Btn_Minimize, 40, 40)
  StartDrawing(ImageOutput(#Btn_Minimize))
  FillArea(1, 1, -1, #Col_Header)
  Line(0, 39, 40, 1, #Col_Text)
  StopDrawing()
  ImageGadget(#Img_BtnMinimize, WindowWidth(0)-110, 18, 40, 40, ImageID(#Btn_Minimize))
EndProcedure
Procedure main()
 
  Protected Text.s = "", x
 
  OpenWindow(#Wnd_Main, 0, 0, #Wnd_Width, #Wnd_Height, " ", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetWindowColor(#Wnd_Main, #Wnd_Color)
  DropShadow(#Wnd_Main)
 
  ;HEADER
  CreateImage(#Img_Header, WindowWidth(#Wnd_Main)-2, 60, 32, #Col_Header)
  StartDrawing(ImageOutput(#Img_Header))
  StopDrawing()
  ImageGadget(#Header, 1, 1, 0, 0, ImageID(#Img_Header))
  ;disable to make it possible: grab with LMB Down
  DisableGadget(#Header, #True)
 
  ;Set Window Title
  TextGadget(#Titel, 80, 14, 230, 30, "Dis./ or Reconnect LAN", #SS_CENTER)
  SetGadgetColor(#Titel, #PB_Gadget_BackColor, #Col_Header)
  SetGadgetColor(#Titel, #PB_Gadget_FrontColor, #Col_Text)
  SetGadgetFont(#Titel, FontID(#Fnt_SegoeUI16))
 
  ;Add all Gadgets here
  ContainerGadget(#Cnt_Window, 1, 62, WindowWidth(#Wnd_Main)-2, WindowHeight(#Wnd_Main)-89, #PB_Container_BorderLess)
  SetGadgetColor(#Cnt_Window, #PB_Gadget_BackColor, #Col_Container)
 
    ; Disconnect Internet
    ButtonGadget(#Btn_SwitchOff, 35, 60, 200, 60,"Disconnect Internet", 0)
    SetGadgetFont(#Btn_SwitchOff, FontID(#Fnt_SegoeUI12))
   
    ; Connect to Internet
    ButtonGadget(#Btn_SwitchOn, 265, 60, 200, 60,"Reconnect Internet", 0)
    SetGadgetFont(#Btn_SwitchOn, FontID(#Fnt_SegoeUI12))
   
  CloseGadgetList()

  SystemButtons()

  HideWindow(#Wnd_Main, #False)
 
EndProcedure

main()

Repeat
  Event = WaitWindowEvent()
  EventType = EventType()
 
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        ;Exit
        Case #Img_BtnExit
          End
         
        ;Minimize
        Case #Img_BtnMinimize
          If EventType = #PB_EventType_LeftClick
            SetWindowState(#Wnd_Main, #PB_Window_Minimize)
          EndIf
         
        ;Disconnect
        Case #Btn_SwitchOff
          If EventType = #PB_EventType_LeftClick
            ;Windows 7
            If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)
              RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=disabled",  "", #PB_Program_Hide)
            Else
            ;Windows 10
            If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)
              RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=disabled",  "", #PB_Program_Hide)           
            EndIf
          EndIf
        EndIf
         
        ;Reconnect   
        Case #Btn_SwitchOn
          If EventType = #PB_EventType_LeftClick
            ;Windows 7
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=enabled",  "", #PB_Program_Hide)
          Else
            ;Windows 10
            RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=enabled",  "", #PB_Program_Hide) 
          EndIf     
     
      EndSelect
     
    ;DRAG WITH MOUSE
    Case #WM_LBUTTONDOWN
      If WindowMouseX(#Wnd_Main) >= 0 And WindowMouseX(#Wnd_Main) <= WindowWidth(#Wnd_Main)-2 And WindowMouseY(#Wnd_Main) >= 0 And WindowMouseY(#Wnd_Main) <= 61
        SendMessage_(WindowID(#Wnd_Main), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      EndIf
  EndSelect

ForEver
Ich hab bei einigen Leuten gefragt, da gehts leider nicht mit dem Code. von vorher.

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 18:37
von udg
RSBasic hat geschrieben:Ich habe Home und da funktioniert es.
Danke fürs testen. Kurios, dass es bei vielen W10 Versionen nicht geht

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 19:01
von _JON_
Die API InternetGetConnectedStateEx_() gibt mir auch als Name "Lan-Verbindung" zurück.
Damit kann meine netsh.exe allerdings nix mit anfangen.

Re: wie LAN trennen unter Windows10

Verfasst: 27.01.2018 19:51
von udg
Ich bin gerade mal an einem W10 PC Professional. Dort geht das ganze nicht.
habe den Adapter mit dem Code Von RS Basic aus der Win Api mal ausgelesen. Diese gibt einen falschen Namen zurück.

Der Adapter heißt hier "ETHERNET", der Code jedoch schiebt ins Debugfenster den Namen "LAN-Verbindung"

Ich tippe, dass an dem Code da etwas nicht richtig den Namen ausliest?

hier mal der Code:

Code: Alles auswählen

EnableExplicit

Define lpdwFlags
Define lpszConnectionName$ = Space(255)

If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)
  Debug "Name der Verbindung: " + lpszConnectionName$
  If lpdwFlags & #INTERNET_CONNECTION_CONFIGURED
    Debug "Local system has a valid connection to the Internet, but it might or might not be currently connected."
  EndIf
  If lpdwFlags & #INTERNET_CONNECTION_OFFLINE
    Debug "Local system is in offline mode."
  EndIf
  If lpdwFlags & #INTERNET_RAS_INSTALLED
    Debug "Local system has RAS installed."
  EndIf
  If lpdwFlags & #INTERNET_CONNECTION_PROXY
    Debug "Local system uses a proxy server to connect to the Internet."
  EndIf
  If lpdwFlags & #INTERNET_CONNECTION_LAN
    Debug "Local system uses a local area network to connect to the Internet."
  EndIf
  If lpdwFlags & #INTERNET_CONNECTION_MODEM
    Debug "Local system uses a modem To connect To the Internet."
  EndIf
EndIf

spuckt mir dann leider einen Falschen Namen aus. Dieser Name ist aber wichtig damit ich die verbindung richtig auslese und trennen kann.
Wenn ich also hier im kompletten Tool code den Namen Ethernet von Hand eintrage, dann funktioniert das Tool mit W10 Professional.

Jemand eine Idee was man da ändern bzw noch anpassen muss?


folgenden Code benutz ich im SC:

Code: Alles auswählen

            If InternetGetConnectedStateEx_(@lpdwFlags, @lpszConnectionName$, Len(lpszConnectionName$), #Null)
              RunProgram("netsh.exe", " interface set interface name =" + #DQUOTE$ + lpszConnectionName$ + #DQUOTE$ + " admin=disabled",  "", #PB_Program_Hide)
            Else

dieser Flag: lpszConnectionName$ soll laut meinem Verständnis dafür benutzt werden.

Danke