vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Odres ip komputera


otwartyotwarty rozpoczął: popbart postów: 7



napisał: pil
postów: 154


umieszczony:
9 września 2005
08:53

  
Cytat:
Dziękuję za podpowiedź. Mam jeszcze pytanie, dlaczego coś takiego nie działa:

Sub test()
result = Shell("ipconfig > c:\infoip.txt")
End Sub

Chciałbym to zrobić bez pliku *.bat bo plik będzie na dysku sieciowym i będą z niego korzystały różne osoby
Pozdrawiam.

Sprawa wygląda tak, że przy np. takim poleceniu :
ipconfig /all > c:\infoip.txt
pierwszy człon jest programem ipcofing.exe i spokojnie można go uruchomić funkcją Shell() - nawet z dodatkowymi parametrami, ale od znaku > to już jest przekierowanie strumienia (w tym przypadku z telewizora do pliku infoip.txt) i za to jest odpowiedzialny interpreter poleceń cmd.exe (albo w starszych wersjach command.com).Czyli jednym słowem
Shell("ipconfig > c:\infoip.txt")
nie zadziała i już. Ale można spróbować stworzyć *.bat w locie i wtedy jego zawartość może być różna w zależności od warunków uruchomienia.
Mam nadzieję, że za bardzo nie namotałem.
Powodzenia
napisał: Stanislaw
postów: 109


umieszczony:
8 września 2005
11:43

  
Samo wyłuskanie IP z pliku tekstowego
utworzonego przez "infoIP.bat"
mogłoby wyglądać tak:

Sub Info_IP()

Dim infoIP

infoIP = Shell("C:\infoIP.bat")

Call Komunikat_IP

End Sub

Sub Komunikat_IP()

Dim dane As String
Dim i As Long

Open "C:\infoIP.Txt" For Input As 1
    Do While Not EOF(1)
        Line Input #1, dane
        i = i + 1
        If i = 15 Then
            MsgBox dane, vbInformation, "Pełny komunikat"
            MsgBox Right(dane, Len(dane) - InStr(1, dane, ":")), vbInformation, "Tylko IP"
        End If
    Loop
Close #1

End Sub

napisał: popbart
postów: 56


umieszczony:
8 września 2005
10:50

  
Dziękuję za podpowiedź. Mam jeszcze pytanie, dlaczego coś takiego nie działa:

Sub test()
result = Shell("ipconfig > c:\infoip.txt")
End Sub

Chciałbym to zrobić bez pliku *.bat bo plik będzie na dysku sieciowym i będą z niego korzystały różne osoby
Pozdrawiam.
napisał: pil
postów: 154


umieszczony:
8 września 2005
09:31

  
W wątku "pomocy" jest przykład jak się "dobrać" do linii poleceń z poziomu VBA przy użyciu funkcji Shell(). Ale z takiego wywołania : Shell("ipconfig",1) to za wiele pożytku nie ma, bo polecenie się wykona i już, a dobrze by było, żeby zostawiło po sobie jakiś ślad w postaci pliku tekstowego - do tego trzeba użyć pliku wsadowego (np. c:\infoIP.bat) o takiej treści :
ipconfig > c:\infoip.txt
a później spróbować "wydłubać" z niego interesujące wartości.
napisał: popbart
postów: 56


umieszczony:
8 września 2005
07:45

  
Dzięki wielkie :). Myślałem że to będzie jakieś wywołanie polecenia ipconfig. A swoją drogą to przydała by mi się jeszcze informacja jak się dobrać do wiersza poleceń, bo z niego można bardzo wiele wyciągnąć i nie zawracał bym wam głowy :)
Jeszcze raz dziękuję.
napisał: Stanislaw
postów: 109


umieszczony:
7 września 2005
18:20

  
Wklej kod do modułu i uruchom procedurę "IP_komputera"

Public Const MAX_WSADescription = 256
Public Const MAX_WSASYSStatus = 128
Public Const ERROR_SUCCESS As Long = 0
Public Const WS_VERSION_REQD As Long = &H101
Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Public Const MIN_SOCKETS_REQD As Long = 1
Public Const SOCKET_ERROR As Long = -1


Public Type HOSTENT
   hName As Long
   hAliases As Long
   hAddrType As Integer
   hLen As Integer
   hAddrList As Long
End Type


Public Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Byte
   szSystemStatus(0 To MAX_WSASYSStatus) As Byte
   wMaxSockets As Integer
   wMaxUDPDG As Integer
   dwVendorInfo As Long
End Type

Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long

Public Declare Function WSAStartup Lib "WSOCK32.DLL" _
   (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long

Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Public Declare Function gethostname Lib "WSOCK32.DLL" _
   (ByVal szHost As String, ByVal dwHostLen As Long) As Long


Public Declare Function gethostbyname Lib "WSOCK32.DLL" _
   (ByVal szHost As String) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
   (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
   
Sub IP_komputera()

    MsgBox "Adres IP komputera: " & GetIPAddress, vbInformation

End Sub
   
Public Function GetIPAddress() As String

Dim sHostName As String * 256
Dim lpHost As Long
Dim HOST As HOSTENT
Dim dwIPAddr As Long
Dim tmpIPAddr() As Byte
Dim i As Integer
Dim sIPAddr As String


   If Not SocketsInitialize() Then
      GetIPAddress = ""
      Exit Function
   End If
   
   If gethostname(sHostName, 256) = SOCKET_ERROR Then
      GetIPAddress = ""
      MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _
              " has occurred. Unable to successfully get Host Name."
      SocketsCleanup
      Exit Function
   End If
   
   sHostName = Trim$(sHostName)
   lpHost = gethostbyname(sHostName)

   If lpHost = 0 Then
      GetIPAddress = ""
      MsgBox "Windows Sockets are not responding. " & _
              "Unable to successfully get Host Name."
      SocketsCleanup
      Exit Function
   End If
   
   CopyMemory HOST, lpHost, Len(HOST)
   CopyMemory dwIPAddr, HOST.hAddrList, 4
   ReDim tmpIPAddr(1 To HOST.hLen)
   CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
   
   For i = 1 To HOST.hLen
      sIPAddr = sIPAddr & tmpIPAddr(i) & "."
   Next
   
   GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)

   SocketsCleanup

End Function

Public Function HiByte(ByVal wParam As Integer)

    HiByte = wParam \ &H100 And &HFF&

End Function

Public Function LoByte(ByVal wParam As Integer)

    LoByte = wParam And &HFF&

End Function

Public Sub SocketsCleanup()

    If WSACleanup() <> ERROR_SUCCESS Then
        MsgBox "Socket error occurred in Cleanup."
    End If

End Sub

Public Function SocketsInitialize() As Boolean

Dim WSAD As WSADATA
Dim sLoByte As String
Dim sHiByte As String


   If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
      MsgBox "The 32-bit Windows Socket is not responding."
      SocketsInitialize = False
      Exit Function
   End If

   If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
        MsgBox "This application requires a minimum of " & _
                CStr(MIN_SOCKETS_REQD) & " supported sockets."
        SocketsInitialize = False
        Exit Function
   End If

   If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _
     (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _
      HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then


      sHiByte = CStr(HiByte(WSAD.wVersion))
      sLoByte = CStr(LoByte(WSAD.wVersion))


      MsgBox "Sockets version " & sLoByte & "." & sHiByte & _
             " is not supported by 32-bit Windows Sockets."


      SocketsInitialize = False
      Exit Function
   End If
   
    SocketsInitialize = True
    
End Function

napisał: popbart
postów: 56


umieszczony:
7 września 2005
15:35

  
Witam.
Chciałbym za pomocą vba wyciągnąć adres ip komputera.
Pozdrawiam.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z