问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vb6.0 怎样获得IP?

发布网友 发布时间:2022-04-27 09:20

我来回答

1个回答

热心网友 时间:2023-09-18 04:04

(利用系统的ipconfig命令重定向到临时文件,vb读取文件处理下就ok了

其他方法一般都要调用系统API了)

画个按钮,画个Timer,画个文本框

timer的Enabled属性设置成false,interval属性设置成1000

然后复制下面代码就可以了

timer纯粹是为了延时,等待临时文件生成的一个很拙劣的办法,如果你用别的方法实现shell同步执行,如用WaitforSingleObject等API函数之类的就不用Timer了,Timer里边的东西都写到按钮事件好了

'按钮点击事件
Private Sub Command1_Click()
Shell "cmd /c ipconfig.exe > " & Environ("temp") & "\ip.txt"
Timer1.Enabled = True
End Sub

'Timer的Timer事件
Private Sub Timer1_Timer()
Dim i As Long, a As String, isFind As Boolean
Open Environ("temp") & "\ip.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, a
If InStr(a, "PPP adapter") > 0 Then
isFind = True
Exit Do
End If
Loop
If isFind Then
For i = 1 To 10
Line Input #1, a
If InStr(a, "IP Address") > 0 Then
Text1.Text = Trim(Mid(a, InStr(a, ":") + 1))
Exit For
End If
Next i
End If
Close #1
Timer1.Enabled = False
End Sub

=================无敌的分割线================================
关于问题补充

Winsock控件是没办法做到的,可以使用WSOCK32.DLL中提供的API实现

你可以测试下,复制以下代码,窗口上画个按钮就成,理论上来说,最后一个IP地址就是你的宽带IP地址,代码来源于互联网

Private 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 = 128

Private Type HOSTENT
hName As Long
hAliases As Long
hAddrType As Integer
hLength As Integer
hAddrList As Long
End Type

Private 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 Type

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
wVersionRequired&, 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 Function

Function 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 If

End Sub

Sub SocketsCleanup()
Dim lReturn As Long

lReturn = WSACleanup()

If lReturn <> 0 Then
MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup "
End
End If

End Sub

Sub Form_Load()

SocketsInitialize

End Sub

Private Sub Form_Unload(Cancel As Integer)

SocketsCleanup

End Sub

Private Sub Command1_click()
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

ip_address = ""
host.hAddrList = host.hAddrList + LenB(host.hAddrList)
RtlMoveMemory hostip_addr, host.hAddrList, 4
Loop While (hostip_addr <> 0)

End Sub
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
15份的摘抄,要短的我是写作业的,差不多一份要一张纸 肯定会给高分_百度... 补牙前怎么样杀神经? ...我妈让我把牙堵上,想知道是怎么堵?要是杀神经,具体流程是什么样的... 汽车电瓶断电开关断正极还是负极 汽车电瓶断电开关断正极吗 为什么汽车电瓶断电后要断开负极 亳州市教师资格证考哪些科目 请问在观澜坐哪路公交车去深圳大学 陈旧隙腔性脑梗塞能喝酒吗?要喝的话多少为好?谢谢……! 男女朋友分手,怎样消除房产证上女方的名字 ...加了女方的名字 现在女方要提出分手 这房子该怎么处理? 十二生肖歌 老鼠前面走,跟着老黄牛,老虎一声吼,兔子抖三抖,天上龙在... 怎么用VB语句获取本机IP并可直接显示 vb 如何实现自功获取IP地址? 如何用vb编程实现读取本地计算机的IP地址?? 我们该如何优雅的公布自己谈恋爱了? 找男朋友文案 想谈恋爱的简短句子 很想谈恋爱的句子 我想学怎么做酱香饼哪里可以学 想学做酱香饼,哪里有酱香饼学? 一般学做酱香饼学费多少钱 酱香饼怎么做,学做酱香饼,酱香饼制作教程,酱香饼摆摊开店? 自己在家做酱香饼,掌握哪些技巧能把口味做的秒杀路边摊? 想学酱香饼,没有基础,大概需要学多久? 酱香饼怎么做,酱香饼制作流程,学做酱香饼? 身边最常见的剧毒物质 你身边最奇葩的事是什么? 身边最重要的东西什么? 你身边用得最久的东西是什么? 你身边最可爱的人是怎么样的? 急需《十二生肖歌》(诗) vb获取当前ip问题 十二生肖歌顺口溜 如何在VB中获得用户的IP地址啊,请指教 0 小老鼠打头来,牛把蹄儿抬,.........十二动物转圈跑的全部歌词 vb 如何获取 ip? 有谁知道在vb中怎样能得到本机的ip地址 vb 如何获取外网ip (200分)VB 获取本机IP和重新获取IP问题 数字歌的相关评论 vb能不能获取计算机的ip地址 代码是什么呢 如何用VB6.0获取ip地址并格式化? linux怎么部署springboot 临朐旅游景点 临朐哪个旅游景点好玩 临朐沂山风景区在什么地方,好玩吗? 临朐一日游必去景点 临朐特色美食和景点有哪些? 沂山风景区怎么样?去过的朋友觉得景色如何? 临朐有什么好的旅游景点