Enviar datos a una ventana en remoto

Iniciado por WaAYa HaCK, 5 Marzo 2012, 20:19 PM

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

WaAYa HaCK

Hola! Tengo un servidor remoto de un juego corriendo en un CMD o bien con una interfaz gráfica. Mi objetivo es, desde un ordenador remoto, enviar una cadena de texto, así como kick jugador, preferiblemente a través de NetCat, y que esta cadena se escriba en una ventana ya abierta. He encontrado esto, para escribir algo en el bloc de notas:
#include <stdio.h>
#include <windows.h>
int main()
{
  HWND ventana,ventana1;
  char texto[]="hola";
  ventana=FindWindow(NULL,"Sin título - Bloc de notas");
  SetForegroundWindow(ventana);
  ventana1=FindWindowEx(ventana, 0, "Edit", 0);
  SendMessage(ventana1,WM_SETTEXT,0,(long)texto);
}

Esto escribe "hola" en el bloc de notas.
Debe ser remoto, así que debe escuchar mediante sockets o bien leer de un archivo :P
#include <winsock2.h> //la cabezera para usar las funciones de winsock
#include <stdio.h>
/*linkamos a la libreria del winsock, también puedes hacerlo desde
project->settings->link si usas ms visual c++ */
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsa;
SOCKET sock;
struct sockaddr_in local;
int len=0;
char Buffer[1024];
//Inicializamos
WSAStartup(MAKEWORD(2,0),&wsa);
//Creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//defnimos dirección por defecto, ipv4 y el puerto 9999
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons(9999);
//asociamos el socket al puerto
if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
{
printf("error en el bind\n");
return -1;
}
//ponemos el socket a la escucha
if (listen(sock,1)==-1)
{
printf("error en el listen\n");
return -1;
}
len=sizeof(struct sockaddr);
//hay una conexión entrante y la aceptamos
sock=accept(sock,(sockaddr*)&local,&len);
printf("[SERVIDOR MiniXat para tutorial de sockets MazarDZone Foro]\n");
printf("[Cuando se vaya recibiendo texto aparecera en pantalla ]\n");
while (len!=0) //mientras estemos conectados con el otro pc
{ len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if (len>0) //si seguimos conectados
{
Buffer[len]=0; //le ponemos el final de cadena
printf("Texto recibido:%s",Buffer); //imprimimos la cadena recibida
}
}
return 0;
}

Es sacado de un tutorial de MazarD.
Ahora: alguien puede ayudarme con esto de escribir en la ventana del CMD? O... cómo puedo encontrar el nombre de una ventana hija (un InputBox o algo así) ???

Muchísimas gracias...
La cacatúa yoyó es nueva en el zoo!

soyloqbuskas

¡Buenas WaAYa HaCK!

CMD es una consola no un lenguaje de programacion, asi que necesitaras ayudas de programas externos. Tu problema se solucionaria facilmente si hicieras un programa en C con sockets como bien comentas, pero si lo que quieres es hacerlo con instrucciones de ms-dos, deberias ir a la sección de SCRIPTING que es donde realmente te van a saber aconsejar bien sobre el cmd.

Un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

WaAYa HaCK

Dicho servidor, tengo la opción de usarlo sin CMD, con GUI. El problema que tengo es a la hora de enviar una cadena a la ventana hija, puesto que no sé cómo se llama...
La cacatúa yoyó es nueva en el zoo!

naderST

Pues para conseguir la clase de una ventana y sus ventanas hijas puedes usar una aplicación llamada Microsoft Spy++ viene con el paquete de Visual Studio. También puedes listar las ventanas y sus hijas con EnumWindows y EnumChildWindows

WaAYa HaCK

Hm. He encontrado esto de EnumChildWindows, pero no sé aplicarlo a mi código...
#include <stdio.h>
#include <windows.h>
int main()
{
  HWND ventana,ventana1;
  char texto[]="hola";
  ventana=FindWindow(NULL,"Sin título - Bloc de notas");
  SetForegroundWindow(ventana);
  SendMessage(ventana1,WM_SETTEXT,0,(long)texto);
}
La cacatúa yoyó es nueva en el zoo!