Ayuda con codigo

Iniciado por mastercss, 27 Enero 2010, 01:39 AM

0 Miembros y 1 Visitante están viendo este tema.

mastercss

En primer lugar, no sabia si debia crear un post nuevo o volver a postear en el que pedi ayuda con el chat. Agradeceria al admin que me lo aclarara para asi no estorbar. Este codigo lo que quiero que haga es apagar un ordenador de forma remota. He visto que la API ExitWindowsEx se utiliza con una sintaxis especial. Posteo el codigo y comento mejor:

Cliente:

Código (vb) [Seleccionar]
Option Explicit
Private Sub Command1_Click()
Winsock1.RemotePort = 9000
Winsock1.RemoteHost = Text1.Text
Winsock1.Connect
End Sub

Private Sub Command2_Click()
Dim apagar As Long
apagar = 1
Winsock1.SendData apagar
End Sub


Private Sub Command3_Click()
Dim reiniciar As Long
reiniciar = 2
Winsock1.SendData reiniciar
End Sub


Aqui lo que hago es asiganrle el valor 1 a apagar y a reiniciar 2. Por qué? Porque asi con una instruccion condicional en el servidor podre establecer lo que quiero que haga (corrijanme si esto no se puede hacer).

Servidor:
Código (vb) [Seleccionar]

Option Explicit
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Private Declare Function ExitWindowsEx& Lib "user32" (ByVal uFlags&, ByVal dwReserved&)

Private Sub Form_Load()
Winsock1.LocalPort = 9000
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As Long
Winsock1.GetData datos
If datos = 1 Then datos = ExitWindowsEx(1, 0&)
If datos = 2 Then datos = ExitWindowsEx(2, 0&)
End Sub


EL servidor es sencillo, establezco el puerto de escucha acepto la conexion y recibo los datos. La duda viene a continuación. En el evento DataArrival recibo los datos y les asigno como variable datos, luego estblezco una condición para que dependiendo del valor de la cadena de datos que entre reinicie o apague.
PEro señores el codigo no funciona, compila bien y todo eso pero cunado aprito en apagar x ejemplo no se apaga. No salta ningun error ni nada pero no funciona. Espero me puedan decir cual es el error en el code. Grcias de nuevo.

BlackZeroX

en lugar de realizarlo con if then hazlo con select case y pasa como argumento los datos aun proceso o funcion  ajeno a DataArrival del socket resector.

y en lugar de usar la variable de tipo ong para almacenar lo recibido usa string o variant.

Un ejemplo sencillo seria este.

Código (vb) [Seleccionar]


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As string
    Winsock1.GetData datos,vbstring
    call procesarinfo(datos)
End Sub

private sub procesarinfo(vdata as string)
    select case vdata
        case "apagarreiniciar cerrarsexiooqueseyo 1"
            ExitWindowsEx(2, 0&)
        case "apagarreiniciar cerrarsexiooqueseyo 2"
            ExitWindowsEx(2, 0&)
        case else
            msgbox "error protocolo"
    end select
end sub



Nota: otra forma es usar split para decidir en el select case para mas información documentarte sobre esa y otras funciones

Temibles Lunas!¡
The Dark Shadow is my passion.