Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWIDTH As Long, ByVal nHEIGHT As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function INITCOMMONCONTROLSEX Lib "comctl32.dll" Alias "InitCommonControlsEx" (ByRef TLPINITCOMMONCONTROLSEX As INITCOMMONCONTROLSEX) As Long
Private Type INITCOMMONCONTROLSEX
dwSize As Long 'size of this structure
dwICC As Long 'flags indicating which classes to be initialized
End Type
Private Const ICC_INTERNET_CLASSES As Long = &H800
Private Const WS_CHILD As Long = &H40000000
Private Const WS_GROUP As Long = &H20000
Private Const WS_TABSTOP As Long = &H10000
Private Const WS_VISIBLE As Long = &H10000000
Private Const WS_BORDER As Long = &H800000
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETFONT As Long = &H30
Private Const WM_GETFONT As Long = &H31
Private Const WM_USER As Long = &H400
Private Const IPM_CLEARADDRESS As Long = (WM_USER + 100)
Private Const IPM_SETADDRESS As Long = (WM_USER + 101)
Private Const IPM_GETADDRESS As Long = (WM_USER + 102)
Private Const IPM_SETRANGE As Long = (WM_USER + 103)
Private Const IPM_SETFOCUS As Long = (WM_USER + 104)
Private Const IPM_ISBLANK As Long = (WM_USER + 105)
Private IP1 As Long
Private Sub UserControl_Initialize()
Call CreateIPAddressBox
SendMessage IP1, IPM_SETADDRESS, 0, ByVal MAKEIPADDRESS(127, 0, 0, 1)
End Sub
Private Function CreateIPAddressBox() As Boolean
Dim CommCtrl As INITCOMMONCONTROLSEX
If INITCOMMONCONTROLSEX(CommCtrl) Then
IP1 = CreateWindowEx(0, "SysIPAddress32", "IPADDR1", _
WS_CHILD Or WS_TABSTOP Or WS_GROUP Or WS_VISIBLE, _
0, 0, UserControl.Width / 15, UserControl.Height / 15, _
UserControl.hwnd, 0, App.hInstance, ByVal 0&)
If IP1 Then
'½«IP¿Ø¼þµÄ×ÖÌåÉèÖõÄÓë´°ÌåÒ»Ñù ÓÃËÎÌå
SendMessage IP1, WM_SETFONT, SendMessage(UserControl.hwnd, WM_GETFONT, 0, ByVal 0&), ByVal 0&
Else
MsgBox "²»ÄÜ´´½¨¿Ø¼þ", vbCritical, "´íÎó£¡"
End If
Else
MsgBox "²»ÄÜ´´½¨¿Ø¼þ", vbCritical, "´íÎó£¡"
End If
End Function
Private Sub UserControl_Resize()
DestroyWindow IP1
Call CreateIPAddressBox
SendMessage IP1, IPM_SETADDRESS, 0, ByVal MAKEIPADDRESS(127, 0, 0, 1)
End Sub
Private Sub UserControl_Terminate()
DestroyWindow IP1
End Sub
Private Function FIRST_IPADDRESS(ByVal x As Long) As Byte
FIRST_IPADDRESS = ((x And &H7F000000) \ &H1000000) Or (((x And &H80000000) <> 0) And &H80)
End Function
Private Function SECOND_IPADDRESS(ByVal x As Long) As Byte
SECOND_IPADDRESS = (x And &HFF0000) \ &H10000
End Function
Private Function THIRD_IPADDRESS(ByVal x As Long) As Byte
THIRD_IPADDRESS = (x And &HFF00&) \ &H100
End Function
Private Function FOURTH_IPADDRESS(ByVal x As Long) As Byte
FOURTH_IPADDRESS = x And &HFF
End Function
Private Function MAKEIPRANGE(ByVal low As Byte, ByVal high As Byte) As Long
MAKEIPRANGE = high * &H100& Or low
End Function
Private Function MAKEIPADDRESS(ByVal b1 As Byte, ByVal b2 As Byte, ByVal b3 As Byte, ByVal b4 As Byte) As Long
MAKEIPADDRESS = ((b1 And &H7F) * &H1000000 Or (b1 And &H80) <> 0 And &H80000000) Or (b2 * &H10000) Or (b3 * &H100&) Or (b4)
End Function
'''µÃµ½ IP µØÖ·
Public Function GetIPAddress() As String
Dim TempLng As Long
SendMessage IP1, IPM_GETADDRESS, 0, TempLng
GetIPAddress = FIRST_IPADDRESS(TempLng) & "." & SECOND_IPADDRESS(TempLng) & "." & THIRD_IPADDRESS(TempLng) & "." & FOURTH_IPADDRESS(TempLng)
End Function
'''ÉèÖà IP µØÖ·
Public Function SetIPAddress(ByVal v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer) As Boolean
SendMessage IP1, IPM_SETADDRESS, 0, ByVal MAKEIPADDRESS(v1, v2, v3, v4)
End Function