elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Cojer texto de un control edit API (MASM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cojer texto de un control edit API (MASM)  (Leído 7,212 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Cojer texto de un control edit API (MASM)
« en: 31 Diciembre 2009, 18:41 pm »

Hola k tal?

como cojo el texto de un control edit con la API? trabajo en MAMS (Ensablador)

intente con esto:
Código:
invoke SendMessage,handle,WM_GETTEXT,offset Buffer,0
y nada i aisn tambin probe:
Código:
invoke GetWindowText,handle,offset Buffer,0

y nada :( por que pasa no me sale nada por que??


este es el codde k llevo en mano:
Código:


WndProc proc han:HWND,msg2:UINT,wParam:WPARAM,lParam:LPARAM

.IF msg2 == WM_DESTROY
invoke PostQuitMessage,0
.ELSEIF msg2 == WM_CREATE

invoke CreateWindowEx,NULL,offset Control1,NULL,\
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_MULTILINE,\
100,100,100,100,han,0,NULL,NULL


invoke CreateWindowEx,NULL,offset Control2,offset TxtBot,\
WS_CHILD or BS_DEFPUSHBUTTON or WS_VISIBLE,\
100,30,100,40,han,IDM_BOT,NULL,NULL


.ELSEIF msg2 == WM_COMMAND
.IF wParam == IDM_BOT



PUSH 0
PUSH 0
PUSH offset Buffer
PUSH han
CALL [MessageBox]
.ENDIF

.ELSE

invoke DefWindowProc,han,msg2,wParam,lParam
RET
.ENDIF
xor eax,eax
ret

WndProc endp

end start



y aprovecho por preguntar algo que no tieen naa que ver con esto (asin ahorro un post nuevo)

e estado mirando una web donde enseñan a hacer el hola mundo con ensamblador de 32 bits desde el arranque de la maquina,osea en modo real,i digo yo para hacer eso necesitas programar a 16 bits i no a 32 no????? si ando equivocado diganmelo,no es posible hacer eso en 32 bits no???,en la web la primera instruccion que ponian era "bits 16  ;Trabajamos a 16 bits",alguien me explica porfa ????


salu2


« Última modificación: 31 Diciembre 2009, 19:32 pm por Riki_89D » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Cojer texto de un control edit API (MASM)
« Respuesta #1 en: 1 Enero 2010, 13:11 pm »

Hola!

Fíjate lo que dice la MSDN sobre esta API:

Código:
GetWindowText
The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.

int GetWindowText(
  HWND hWnd,        // handle to window or control with text
  LPTSTR lpString,  // address of buffer for text
  int nMaxCount     // maximum number of characters to copy
);
 
Parameters
hWnd: Handle to the window or control containing the text.
lpString: Pointer to the buffer that will receive the text.
nMaxCount: Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.

Si miras tu código, verás que el tercer parámetro debería ser la cantidad de caracteres que quieres copiar como máximo, y tu le estás poniendo 0...

Osea, le estás diciendo que quieres leer 0 caracteres del edit.  :)

Aumentando ese parametro, solucionas la cosa...

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Cojer texto de un control edit API (MASM)
« Respuesta #2 en: 1 Enero 2010, 18:07 pm »

osea que aisn estaria bien:
Código:
....

.data?
Buffer db 32 dup(?)
..
..

...

WndProc proc han:HWND,msg2:UINT,wParam:WPARAM,lParam:LPARAM
Local hand:HWND
.IF msg2 == WM_DESTROY
invoke PostQuitMessage,0
.ELSEIF msg2 == WM_CREATE

invoke CreateWindowEx,NULL,offset Control1,NULL,\
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_MULTILINE,\
100,100,100,100,han,0,NULL,NULL
mov hand,eax

invoke CreateWindowEx,NULL,offset Control2,offset TxtBot,\
WS_CHILD or BS_DEFPUSHBUTTON or WS_VISIBLE,\
100,30,100,40,han,IDM_BOT,NULL,NULL


.ELSEIF msg2 == WM_COMMAND
.IF wParam == IDM_BOT

invoke GetWindowText,hand,offset Buffer,90    ;Pongo 90 por poner nu num

PUSH 0
PUSH 0
PUSH offset Buffer
PUSH han
CALL [MessageBox]
.ENDIF

.ELSE

invoke DefWindowProc,han,msg2,wParam,lParam
RET
.ENDIF
xor eax,eax
ret

WndProc endp

end start



estaria bien asin ????


por que no me funciona :S
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Cojer texto de un control edit API (MASM)
« Respuesta #3 en: 1 Enero 2010, 18:38 pm »

Por cierto no puedes ponerle 90 si el buffer es de un maximo de 32 :P

Lo otro arregla un poco tu ortografia .
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Cojer texto de un control edit API (MASM)
« Respuesta #4 en: 1 Enero 2010, 18:49 pm »

Hola YST,gracias por contestar,en vez de 90 puse 25,desgraciadamente sigue sin funcionar,el mensaje no me mnuestra lo que escribo en el edit,no lo entiendo,se que una vez lo logre pero no me acuerdo:(
En línea

Saint Iker

Desconectado Desconectado

Mensajes: 19



Ver Perfil WWW
Re: Cojer texto de un control edit API (MASM)
« Respuesta #5 en: 1 Enero 2010, 18:57 pm »

Pon la variable hand global o si lo prefieres ( yo lo prefiero ) utiliza GetDlgItem para obtener el handle por el ID del control, no te saca el texto por que simplemente el handle no es valido ya que es una variable local que se pierde una vez procesado el mensaje WM_CREATE.

Salu2.

Att: Iker
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Cojer texto de un control edit API (MASM)
« Respuesta #6 en: 1 Enero 2010, 19:08 pm »

Hola iker,como ago para hacer la variable Hand como Global en vez de Local???



salu2 y gracias de antemano
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Cojer texto de un control edit API (MASM)
« Respuesta #7 en: 1 Enero 2010, 19:24 pm »

Hola iker,como hago para hacer la variable Hand como Global en vez de Local???



salu2 y gracias de antemano
Código
  1. .data?
  2. Buffer db 32 dup(?)
  3. hand dd ?
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Saint Iker

Desconectado Desconectado

Mensajes: 19



Ver Perfil WWW
Re: Cojer texto de un control edit API (MASM)
« Respuesta #8 en: 1 Enero 2010, 19:25 pm »

Ya tienes de por si una variable global ( en el .data ) solo es agregar el hand como global.

Código:
hand       dd  0

Salu2

Att: Iker
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Cojer texto de un control edit API (MASM)
« Respuesta #9 en: 1 Enero 2010, 19:33 pm »

Ok muchas gracias a todo,se me ocurrio ahcer esto:
Código:

invoke FindWindow,0,offset Capt
invoke FindWindowEx,eax,0,offset Control1,0
invoke GetWindowText,eax,offset Buffer,32


offset Capt = Cabecera de la ventana principal
offset Control1 = Control1 db 'EDIT',0

me fue muy bien,me soluciono el problema ^^

por fin recorde como lo hice,muchas gracias por averme ayudado gracias a todos de verdad i un feliz año!!!!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines