На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Изменить статический IP-адрес , с помощью WINAPI
    Доброго времени суток!
    Ищу способ, как через WINAPI изменить IP-адрес, маску подсети, DNS.
    Если несколько сетевых карт, надо программно выбрать и поменять параметры.

    Нашёл функцию, но как её применять, так и не понял.
    ExpandedWrap disabled
      Public Declare Function AddIPAddress Lib "IPHLPAPI.DLL" (ByRef Address As Any, ByRef IpMask As Any, ByVal IfIndex As Long, ByRef NTEContext As Long, ByRef NTEInstance As Long) As Long


    Нашёл ряд примеров смены IP через реестр и через командную строку, но это не то.
    Я так понимаю, если на API можно получить IP, то и изменить также можно.
    Подскажите, пожалуйста.
    В интернете не смог найти решения и внятных примеров.


    Пример определения IP:

    Форма:

    ExpandedWrap disabled
      Public Sub Start()
      Dim Ret As Long, Tel As Long
      Dim bBytes() As Byte
      Dim Listing As MIB_IPADDRTABLE
       
      Form1.Text1 = ""
       
      On Error GoTo END1
         GetIpAddrTable ByVal 0&, Ret, True
       
         If Ret <= 0 Then Exit Sub
         ReDim bBytes(0 To Ret - 1) As Byte
         'retrieve the data
         GetIpAddrTable bBytes(0), Ret, False
          
         'Get the first 4 bytes to get the entry's.. ip installed
         CopyMemory Listing.dEntrys, bBytes(0), 4
         'MsgBox "IP's found : " & Listing.dEntrys    => Founded ip installed on your PC..
         Form1.Text1 = Listing.dEntrys & "   IP addresses found on your PC !!" & vbCrLf
         Form1.Text1 = Form1.Text1 & "----------------------------------------" & vbCrLf
         For Tel = 0 To Listing.dEntrys - 1
             'Copy whole structure to Listing..
            ' MsgBox bBytes(tel) & "."
             CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
              Form1.Text1 = Form1.Text1 & "IP address                   : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr) & vbCrLf
              Form1.Text1 = Form1.Text1 & "IP Subnetmask            : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwMask) & vbCrLf
              Form1.Text1 = Form1.Text1 & "BroadCast IP address  : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwBCastAddr) & vbCrLf
              Form1.Text1 = Form1.Text1 & "**************************************" & vbCrLf
         Next
       
      'MsgBox ConvertAddressToString(Listing.mIPInfo(1).dwAddr)
      Exit Sub
      END1:
      MsgBox "ERROR"
      End Sub
       
      Private Sub Form_Load()
       
       
      Start
       
      End Sub



    Модуль:

    ExpandedWrap disabled
      Const MAX_IP = 5   'To make a buffer... i dont think you have more than 5 ip on your pc..
       
      Type IPINFO
          dwAddr As Long   ' IP address
         dwIndex As Long '  interface index
         dwMask As Long ' subnet mask
         dwBCastAddr As Long ' broadcast address
         dwReasmSize  As Long ' assembly size
         unused1 As Integer ' not currently used
         unused2 As Integer '; not currently used
      End Type
       
      Type MIB_IPADDRTABLE
         dEntrys As Long   'number of entries in the table
         mIPInfo(MAX_IP) As IPINFO  'array of IP address entries
      End Type
       
      Type IP_Array
         mBuffer As MIB_IPADDRTABLE
         BufferLen As Long
      End Type
       
      Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
      Public Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long
       
       
      Public Declare Function AddIPAddress Lib "IPHLPAPI.DLL" (ByRef Address As Any, ByRef IpMask As Any, ByVal IfIndex As Long, ByRef NTEContext As Long, ByRef NTEInstance As Long) As Long
       
       
      'converts a Long  to a string
      Public Function ConvertAddressToString(longAddr As Long) As String
         Dim myByte(3) As Byte
         Dim Cnt As Long
         CopyMemory myByte(0), longAddr, 4
         For Cnt = 0 To 3
             ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "."
         Next Cnt
         ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
      End Function
    Сообщение отредактировано: salieri -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0328 ]   [ 16 queries used ]   [ Generated: 29.03.24, 01:16 GMT ]