Bien les explico la situación, estoy creando un programa muy sencillo pero no tanto, bien quiero que cuando el usuario del programa haga click en un command button el programa se quede a la escucha de que cambie la ip, cuando cambie la ip que agregue una linea al registro que seria la siguiente:
[HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2GS]
@="Diablo II Close Game Server"
"D2CSIP"="200.200.200.200"
"D2DBSIP"="200.200.200.200"
donde dice 200.200.200.200 creo que es mas que obvio que ahi va a ir la ip, bien espero que me puedan ayudar, desde ya Gracias
Hola Elsita
Primero bienvenida
Segundo que aquí no hacemos software a medida. Lo que pides no es nada del otro mundo, por aquí tienes mucha información de como acceder al registro y comprobar si te han cambiado la ip es tan fácil como guardar socket.localip en un string y luego con un timer comparar el string y el socket.localip a ver si son distintos.
Postea lo que has hecho y se te puede corregir, pero no esperes que te lo hagan.
Un saludo
Hola, primero que nada gracias, pero yo nunca pedi que me hicieran el software nada más que me den una idea de como hacerlo, es que yo ya tenia parte del codigo lo unico que me faltaba era como hacer eso que dije anteriormente ;) :) Bye
yo lo que hice fue así Label2.Caption = Winsock1.LocalIP
pero esto me da la ip "192.168.x.x"
Pues ya está
Declarar una variable de formulario
Dim SwPoneraLaEscucha as boolean
'El valor de esa variable es true cuando deseamos que se ponga a comprobar la ip)
sub command1_click()
SwPonerAlaEscucha=true
end sub
'Comprobar cada intervalo de tiempo si la variable está a true (esto es si debe comprobar la ip y en su caso comprobar
sub timer1_timer()
if not SwPoneraLaEscucha then
exit sub
endif
if winsock1.localip<>label2 then
poner_a_la_escucha()
Agregar_A_Registro()
endif
end sub
ok tengo otro problema cuando quiero agregar por ejemplo la 2da linea miren:
shell ("reg add /f @="Diablo II Close Game Server"")
termina en comillas y no me deja como puedo hacer?
Hola
shell ('reg add /f @="Diablo II Close Game Server"')
;D
Creo que eso no funciona, usa esto :
shell "reg add /f @=""Diablo II Close Game Server"""
Si funciona, y lo tuyo también
;D
ha mi por lo menos no me funciona :P:
(http://img116.imageshack.us/img116/3590/dibujopv1.jpg)
lo que viene despues de la comilla simple el compilador la interpreta como comentario, por eso el error
SwPonerAlaEscucha As Boolean
Private Sub Command1_Click()
SwPonerAlaEscucha = True
End Sub
Private Sub Form_Load()
End Sub
Private Sub forma_Click()
Form3.Show
End Sub
Private Sub Label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = Winsock1.LocalIP
End Sub
Private Sub Label4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label4.Caption = Winsock1.LocalHostName
End Sub
Private Sub Label6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label6.Caption = Winsock1.RemoteHost
End Sub
Private Sub sobre_Click()
Form2.Show
End Sub
Private Sub timer1_timer()
If Not SwPonerAlaEscucha Then
GoTo timer1_timer
End If
If Winsock1.LocalIP <> Label2 Then
Set ws = CreateObject("WScript.Shell")
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2GS", " & Chr(34) & ""@=Diablo II Close Game Server"" & Chr(34) & """
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2CS", "" & Chr(34) & "" & Winsock1.LocalIP & "" & Chr(34) & ""
ws.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2DBS", "" & Chr(34) & "" & Winsock1.LocalIP & "" & Chr(34) & ""
End If
End Sub
End Sub
así quedo :)
ahh me olvidaba yo puse que para que mueva el mouse se muestre la info, no ahi alguna forma de que muestre la winsock.localip sin tener que hacer alguna opcion con el mouse sobre la label?
Hola
¿Por qué esto?
If Not SwPonerAlaEscucha Then
GoTo timer1_timer
End If
en vez de esto
If Not SwPonerAlaEscucha Then
exit sub
End If
Citarno ahi alguna forma de que muestre la winsock.localip sin tener que hacer alguna opcion con el mouse sobre la label?
Pues pon winsock.localip en otro sitio en vez de en label2.mousemove.
Yo lo pondría dentro de la rutina de poner a la escucha. Esto es allí donde pones winsock.listen pones label2=winsock.localip
Un saludo
Hola, tengo un ultimo problema, el Label2.Caption = Winsock1.localip me da la ip 192.168.x.x pero quiero que me de la que me da el Isp por que si no el programa no serviria de nada.
Hola
Winsock.localip te da la ip local. Lo que tu quieres no es la ip local, es la ip pública y esa no la puedes obtener fácilmente. Es fácil desde fuera, pero no lo es desde dentro.
No veo como puedes hacer eso a menos que la conexión entrante de alguna forma deje esa información en algún sitio que puedas leer.
Un saludo
Si es Fácil simplemente con los comandos mid, left, right, InStr la ip publica esta aquí:
shell "ipconfig /all > C:\ipconfig.txt"
;) Salu2, WarGhost
Aquí pongo una función que acabo de hacer que lo saca:
Public Function IPPublica() As String
Dim data As String
Dim data2 As String
If Dir("C:\ipconfig.txt") = "" Then Kill "C:\ipconfig.txt"
Shell "ipconfig /all > C:\ipconfig.txt"
Open "C:\ipconfig.txt" For Binary As #1
data = Space(LOF(1))
Get #1, , data
Close #1
data = Mid(data, InStr(1, data, "Servidores DNS . . . . . . . . . .: "), Len(data))
data2 = InStr(1, data, "Servidores DNS . . . . . . . . . .: ")
IPPublica = Trim(Mid(data, data2 + 36, InStr(1, data, vbCrLf) - 38))
End Function
Es algo cutre pero funciona :P
Hola WarGhost
Eso no es la ip pública. De hecho la ip pública no reside en tu ordenador, reside en tu router y para conocerla puedes ir a alguna página que te lo diga (p. ej. www.showmyip.com) o utilizar algún proxy que te permita saber la variable ip-client.
Lo que tu crees que es ip pública es la puerta de enlace que es la ip de tu router.
Un saludo
Si cierto Sorry Aquí dejo un código que si lo hace pero lo malo es que necesitas un control winsock también se puede hacer con el inet pongo las dos formas:
Winsock:
Private Sub Form_Load()
ws.Close
ws.Connect "ip1.dynupdate.no-ip.com", 80
End Sub
Private Sub ws_Connect()
ws.SendData "GET / HTTP/1.0" & vbCrLf & _
"Accept: */*" & vbCrLf & _
"User-Agent: IPLen(By WarGhost)" & vbCrLf & _
"Host: ip1.dynupdate.no-ip.com" & vbCrLf & vbCrLf
End Sub
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data
msgbox Mid(data, InStr(data, vbCrLf & vbCrLf) + 4, Len(data) - InStr(data, vbCrLf & vbCrLf) + 1)
ws.Close
End Sub
INET:
msgbox Inet1.OpenURL("ip1.dynupdate.no-ip.com")
Si el codigo del INET es mas facil xDDDD.
;D Salu2, WarGhost