API Sendmessage en una Shell

Iniciado por Elemental Code, 7 Enero 2011, 03:55 AM

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

Elemental Code

Holaaaa :D

Estaba haciendo una shell remota en VB6.0 para ver si entendia de que venia la mano con sockets y me di cuenta que si hago asi
shell ("cmd.exe /c " & strComandoaca)
me es imposible encadenar comandos, por ejemplo si quiero ir a un directorio con el comando "cd" y despues pedir un "dir" me es imposible.

asi que empeze a leer de que venia lo de sendmessage y los handles.

asi que tengo esto:
Código (vb) [Seleccionar]
Option Explicit
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_SETTEXT = &HC
Private Const WM_GETTEXT = &HD
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Dim Hndl As Long

Private Sub Command1_Click()
Hndl = FindWindow("ConsoleWindowClass", vbNullString)
If Hndl <> 0 Then
Call SendMessage(Hndl, WM_SETTEXT, 0, ByVal "echo pokemon")
Else
MsgBox "la shell no ta :P"
End If
End Sub

Private Sub Command2_Click()
Shell ("cmd.exe /k title Prueba")
End Sub



pero oh sorpresa, el texto que deberia escribir en la consola lo escribe en el titulo en lugar de en la parte adonde se escriben los comandos :S

alguna idea o constante para el sendmessage que yo no conozca?

Muchas gracias ^^

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Sanlegas

si te refieres a que no se te abre el cmd con el comando que quieras prueba con
shell "cmd /k " & MiComando
:P

Psyke1

#2
Con batch no se va a ningún lado... :silbar:

DoEvents! :P

BlackZeroX

#3
.
Código (Vb) [Seleccionar]


Call SendMessage(Hndl, WM_SETTEXT, 0, ByVal "echo pokemon")



Con la constante WM_SETTEXT + el handle de la ventana es como llamar a la API.

Código (Vb) [Seleccionar]


Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long



Espero lo comprendas con esto:

Es como si le pasaras el handle de un Form y quieres establecer un texto a un TextBox... es decir no nesesitarias el Handle de la ventana del form contenedor realmente, sinenbargo si el el Handle del TextBox el cual es una ventana...

En otras palabras debes buscar el Handle REAL de la ventana donde quieres establecer el texto, aun que no creo que puedas en el Command Line pero no estoy seguro..

Dulces Lunas!¡.
.
The Dark Shadow is my passion.

Elemental Code

@Tenient101

No puedo hacerlo asi porque si quiero encadenar comandos es imposible. lo explique al principio ¬¬

@MrFrog

Antes de tdos ustedes DOS tenia todo el Rock!  :rolleyes: :rolleyes:
Yo aprendi batch antes que a usar el excel. algun problema?

@blackzero

Muchas gracias por la pequeña explicacion, pero los handles de la consola de comandos no estan separados.

Despues, si encuentro el codigo que descarte les muestro una app para encontrar handles.

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Karcrack

#5
Si lo quieres hacer el plan cutre puedes meter todos los comandos en una linea uniendolos con &, por ejemplo:
cd\ & dir

La forma habitual de hacer este tipo de cosas es usando Pipes... Tu creas el proceso del "cmd.exe" (AKA %ComSpec%) y le dices donde ha de escribir todo (Cambiando el I/O)... luego tu con ReadFile() y WriteFile() vas leyendo todo lo que hayas de leer... mas informacion aqui:
http://foro.elhacker.net/programacion_visual_basic/ejecutar_bat_desde_shell-t255992.0.html;msg1240519#msg1240519
(Se puede acortar un poco el codigo, pero esa seria la version correcta)

Un saludo ;)

Elemental Code

Cita de: Karcrack en  7 Enero 2011, 17:27 PM
Si lo quieres hacer el plan cutre puedes meter todos los comandos en una linea uniendolos con &, por ejemplo:
cd\ & dir

La forma habitual de hacer este tipo de cosas es usando Pipes... Tu creas el proceso del "cmd.exe" (AKA %ComSpec%) y le dices donde ha de escribir todo (Cambiando el I/O)... luego tu con ReadFile() y WriteFile() vas leyendo todo lo que hayas de leer... mas informacion aqui:
http://foro.elhacker.net/programacion_visual_basic/ejecutar_bat_desde_shell-t255992.0.html;msg1240519#msg1240519
(Se puede acortar un poco el codigo, pero esa seria la version correcta)

Un saludo ;)

Me gusta el "plan cutre"
:D!

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Karcrack

No se porque tenia la sensacion que esa iba a ser tu eleccion :laugh: :laugh: