Recibir mensajes de una dll

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Recibir mensajes de una dll

Mensaje por Jonny »

Hola

Estoy haciendo una librería, para trabajar con una dll, que espero compartir con vosotros una vez terminada, pues seguro que a alguien le interesa. Además, he preguntado ya sobre este tema por aquí, y ya he encontrado algo con lo que empezar a trabajar (¡Lo que ha costado de encontrar!).

En fin, "qué es", lo dejaremos como sorpresa, para cuando esté lista la librería...

La cosa es, que en la documentación de esta dll pone:
-Quan s'ha acabat l'entrenament la Dll envia el següent missatge al programa client :

(Cuando termina el entrenamiento la dll envía el siguiente mensaje al programa cliente):

SendMessage(Handle,wm_User,-1,0);
Y no se como hacer eso de recibir ese mensaje, que por otra parte .... no entiendo muy bien que mensaje es, ni que hace la función "SendMessage()". que pone ahí.

Supongo que se podrá hacer con apis, lo de recibir el mensaje, pero ... seguro, que también hay una función en autoit para ello (que no se cual es).
Mirando las udf's que lleva autoit, he visto una, precisamente con el mismo nombre que la función que aparece en la documentación de la dll (SendMessage), pero no he visto ninguna que sirva, pues tiene un par de funciones, que envían mensajes por lo visto, no los reciben.

Gracias de antemano.

Salu2!
Avatar de Usuario
Alastor
Aprendiz de Mago
Mensajes: 59
Registrado: 13 Dic 2009, 14:27
Ubicación: Zaragoza, España
Contactar:

Re: Recibir mensajes de una dll

Mensaje por Alastor »

Código: Seleccionar todo

SendMessage(Handle,wm_User,-1,0);
Este codigo envia a la ventana especificada (Handle), el mensaje especificado (VM_USER) el cual puedes recibir desde el loop de GUIGetMsg() (No estoy seguro de si hay que registrarlo primero con GUIRegisterMsg())
Aprendiendo AutoIt y C++
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Recibir mensajes de una dll

Mensaje por Chefito »

Este tipo de mensajes son los llamados mensajes de usuario (wm_user). Los suelen lanzar los usuarios por ejemplo desde sus aplicaciones.
Por lo que he visto utiliza el parámetro wparam (wparam=-1). El segundo parámetro no lo utiliza al ser igual a 0.
Este mensaje envía el valor 0xffffffff al parámetro wparam (último valor de una palabra de 32 bits, que es el tamaño de los dos parámetros del mensaje). Como parece indicar en la explicación, cuando ocurra esto quedrá decir que "Cuando termina el entrenamiento la dll envía el siguiente mensaje al programa cliente". La verdad, no se que significa esto :smt005 . Cuando termina el entrenamiento????? :smt017 .
Bueno, para capturar el mensaje debes hacerlo con la función GUIRegisterMsg().
Te pongo un ejemplo del envio de este mismo mensaje desde nuestra aplicación. Dale al botón para enviar el mensaje. Con la función WM_USER capturarás los mensajes enviados por el usuario a nuestra ventana.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

Local $hGUI, $nButton2, $GUIMsg

$hGUI = GUICreate("MI GUI", 300, 200)

$nButton2 = GUICtrlCreateButton("SENDMESSAGE", 90, 110, 120, 30)

GUIRegisterMsg($WM_USER, "WM_USER")

GUISetState()

While 1
	$GUIMsg = GUIGetMsg()
	
	Switch $GUIMsg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $nButton2
			_SendMessage($hGUI, $WM_USER, -1, 0)
	EndSwitch
WEnd

Func WM_USER($hWnd, $Msg, $wParam, $lParam)
	ConsoleWrite($wParam &","& $lparam & @cr)
	Return $GUI_RUNDEFMSG
EndFunc   
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Recibir mensajes de una dll

Mensaje por Jonny »

Hola

Gracias por la explicación, y por el código.
Jeje, lo del entrenamiento ... lo entenderás cuando veas la udf...
A ver si no me da muchos más problemas, y la acabo pronto.

Salu2!
Responder