我按书上写的方法用api,但是得不到,我想用ipconfig >myip.txt,再分析myip.txt,但是用shell时,只能shell ipconfig,不能shell ipconfig >myip.txt,请问有什么办法。

解决方案 »

  1.   

    w2k:
    shell "c:\winnt\system32\cmd.exe /c ipconfig>c:\myip.txt",vbHide
      

  2.   

    用winsock控件
    msgbox winsock1.localip
      

  3.   

    以下是列举本机所有网卡的ip地址,并加入到combobox下拉列表中,可以作为一个模块使用.给分好了,我还没赚过分呢。刚注册不久的,交流交流吧。
    Option ExplicitPrivate Const WS_VERSION_REQD = &H101
    Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
    Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
    Private Const MIN_SOCKETS_REQD = 1
    Private Const SOCKET_ERROR = -1
    Private Const WSADescription_Len = 256
    Private Const WSASYS_Status_Len = 128Private Type HOSTENT
        hName As Long
        hAliases As Long
        hAddrType As Integer
        hLength As Integer
        hAddrList As Long
    End TypePrivate Type WSADATA
        wversion As Integer
        wHighVersion As Integer
        szDescription(0 To WSADescription_Len) As Byte
        szSystemStatus(0 To WSASYS_Status_Len) As Byte
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpszVendorInfo As Long
    End TypePrivate Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
       
    Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
            wVersionRequired As Integer, lpWSAData As WSADATA) As Long
       
    Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
       
    Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _
            ByVal HostLen As Long) As Long
       
    Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _
            hostname$) As Long
       
    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal _
            hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer)    hibyte = wParam \ &H100 And &HFF&End FunctionFunction lobyte(ByVal wParam As Integer)    lobyte = wParam And &HFF&End Function
    Sub SocketsInitialize()
        Dim WSAD As WSADATA
        Dim iReturn As Integer
        Dim sLowByte As String, sHighByte As String, sMsg As String    iReturn = WSAStartup(WS_VERSION_REQD, WSAD)    If iReturn <> 0 Then
            MsgBox "Winsock.dll is not responding."
            End
        End If    If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _
            WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
            sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
            sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
            sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
            sMsg = sMsg & " is not supported by winsock.dll "
            MsgBox sMsg
            End
        End If       'iMaxSockets is not used in winsock 2. So the following check is only
           'necessary for winsock 1. If winsock 2 is requested,
           'the following check can be skipped.    'If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
        '    sMsg = "This application requires a minimum of "
        '    sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."
        '    MsgBox sMsg
        '    End
        'End IfEnd SubSub SocketsCleanup()
        Dim lReturn As Long    lReturn = WSACleanup()    If lReturn <> 0 Then
            MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup "
            End
        End IfEnd SubSub GetAllLocalIPAddr(cmblocalIPs As ComboBox)
        Dim hostname As String * 256
        Dim hostent_addr As Long
        Dim host As HOSTENT
        Dim hostip_addr As Long
        Dim temp_ip_address() As Byte
        Dim i As Integer
        Dim ip_address As String
        
        If gethostname(hostname, 256) = SOCKET_ERROR Then
            MsgBox "Windows Sockets error " & Str(WSAGetLastError())
            Exit Sub
        Else
            hostname = Trim$(hostname)
        End If    hostent_addr = gethostbyname(hostname)    If hostent_addr = 0 Then
            MsgBox "Winsock.dll is not responding."
            Exit Sub
        End If    RtlMoveMemory host, hostent_addr, LenB(host)
        RtlMoveMemory hostip_addr, host.hAddrList, 4    'MsgBox hostname       'get all of the IP address if machine is  multi-homed    Do
            ReDim temp_ip_address(1 To host.hLength)
            RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength        For i = 1 To host.hLength
                ip_address = ip_address & temp_ip_address(i) & "."
            Next
            ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)        'MsgBox ip_address
            cmblocalIPs.AddItem ip_address        ip_address = ""
            host.hAddrList = host.hAddrList + LenB(host.hAddrList)
            RtlMoveMemory hostip_addr, host.hAddrList, 4
        Loop While (hostip_addr <> 0)End Sub
      

  4.   

    tsdeng(阿太),我用的就是你的方法,但总是提示出错,不是程序出错,而是出程序中已经有处理的错误,比如弹出提示框,说:“Windows Sockets error 0”,这是在程序中出错时处理的分支,是不是机子的问题?我用两台机子都是过了,系统都是2000,都不行。请问该怎么办?
    另两位的方法我去试一下。Cooly(☆回答问题不要分儿☆) 你是不是真的不要分?: )
      

  5.   

    虫子说的正确,cooly说的错误
      

  6.   

    你说的情况应该不会出现,我在98,2000, xp下都做了安装盘用过。请仔细看看你的程序,以及WSAStartup和WSACleanup两个函数的注意事项。比如可能你在调用WSACleanup后,又建立其他的socket等等。WSAStartup和WSACleanup最好配对使用!
      

  7.   

    tsdeng(阿太),你的方法,我按书上一步一步写的,还是不行,也许是我机子的问题吧, 但还是觉得虫子的方法比较简单,谢谢了。都给分
      

  8.   

    TO All我真的有些哭笑不得。lxcc(虫莲)的方法是最简单的方式,也是最直接的方法。
    通过API也是可以查到本机IP的。而我用的方法是解决楼主使用ipconfig>c:\myip.txt,不能生成myip.txt文件的问题,楼主既然说了要分析myip.txt,那我的答案也不能说是错的吧。我不是为了这几个分,虫子知道,我把名字都改成"Cooly(☆回答问题不要分儿☆)",可是对与错是本质的区别。我不想再说什么了~~~~