Pues mira, una forma de saber si estás conectado con apis es esta (copiado del Apis-guide):
Y para saber la ip, como te han dicho anteriormente, puedes utilizar cualquiera de las paginas web que hay para este fin. Sacas el texto de la pagina, lo tratas, y metes en una variable la ip. Para leer el texto html de una pagina web sin ningun control, utiliza la api InternetReadFile. Te cuelgo el ejemplo de la Api-guide:
También puedes hacer esto, además de con los controles que te han dicho (inet o winsock), con el control webbrowser, conectandote con la propiedad navigate y tratando el texto de la pagina web. Para ver el texto de la pagina web utiliza Webbrowser.Document.Body.Innertext (Aunque esta opcion la veo la menos adecuada).
Saludos.
Código [Seleccionar]
Private Declare Function InetIsOffline Lib "url.dll" (ByVal dwFlags As Long) As Long
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'InetIsOffline returns 0 if you're connected
MsgBox "¿Estás conectado a Internet? " + CStr(CBool(Not (InetIsOffline(0)))), vbInformation
End Sub
Y para saber la ip, como te han dicho anteriormente, puedes utilizar cualquiera de las paginas web que hay para este fin. Sacas el texto de la pagina, lo tratas, y metes en una variable la ip. Para leer el texto html de una pagina web sin ningun control, utiliza la api InternetReadFile. Te cuelgo el ejemplo de la Api-guide:
Código [Seleccionar]
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL = "http://www.cual-es-mi-ip.net"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
'Create a buffer for the file we're going to download
sBuffer = Space(1000)
'Create an internet connection
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'Open the url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
'Read the first 1000 bytes of the file
InternetReadFile hFile, sBuffer, 1000, Ret
'clean up
InternetCloseHandle hFile
InternetCloseHandle hOpen
'Show our file
MsgBox sBuffer
End Sub
También puedes hacer esto, además de con los controles que te han dicho (inet o winsock), con el control webbrowser, conectandote con la propiedad navigate y tratando el texto de la pagina web. Para ver el texto de la pagina web utiliza Webbrowser.Document.Body.Innertext (Aunque esta opcion la veo la menos adecuada).
Saludos.