MessageBox , problema a la hora de mostralo.

Iniciado por piluve, 17 Enero 2014, 12:51 PM

0 Miembros y 3 Visitantes están viendo este tema.

piluve

Hola!!!

Tengo un problema con esta función de la librería windows.h.

El problema es que estoy utilizando estas ventanas para mostrar mensajes de error cuando el usuario hace cosas indebidas.

Aquí os dejo el código:



void Mensaje(int cod)
{
   if(cod==0)
   {
       MessageBox(NULL, "Pon la ficha sobre un espacio en blanco" , "Stratego 1.0",MB_OK );
       //MB_ICONASTERISK
       //MessageBox(NULL,)
   }
   if(cod==1)
   {
       //MessageBox(NULL, "Has pulsado una tecla no registrada" , "Stratego 1.0", MB_ICONASTERISK);
   }

}




Tengo dos problemas:

El primero, cuando salta la ventana POR PRIMERA VEZ, salta en segundo plano no por encima de mi programa.

Cuando salta la ventana , si selecciono mi programa y hago cualquier acción , cuando cierro mi Messagebox, estas acciones se hacer.

¿Cómo puedo hacer para evitar estas cosas?

Un saludo
Blog de hacking,noticias,seguridad informática,tutoriales...
http://hackerpedia.wordpress.com

Eternal Idol

El primer parametro es un HWND, pasandole el correcto deberias solucionar ambos problemas ya que como dice la documentacion:

MB_APPLMODAL
0x00000000L

The user must respond to the message box before continuing work in the window identified by the hWnd parameter. However, the user can move to the windows of other threads and work in those windows.

...

MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor MB_TASKMODAL is specified.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

piluve

Hola!

Gracias por tu respuesta, lo que he conseguido es que mi ventana se muestre ahora en "TOP" siempre pero no puedo evitar que si el usuario selecciona la aplicación pueda hacer cosas aún estando el messagebox.


MessageBox(NULL, "Pon la ficha sobre un espacio en blanco" , "Stratego 1.0",MB_OK|MB_TOPMOST|MB_APPLMODAL);


Creo que ahora el problema esta en que debería asignarle una ventana al campo "NULL" pero no estoy muy seguro de como hacerlo.

Un saludo.
Blog de hacking,noticias,seguridad informática,tutoriales...
http://hackerpedia.wordpress.com

x64core

Cita de: piluve en 18 Enero 2014, 13:05 PM
Hola!

Gracias por tu respuesta, lo que he conseguido es que mi ventana se muestre ahora en "TOP" siempre pero no puedo evitar que si el usuario selecciona la aplicación pueda hacer cosas aún estando el messagebox.


MessageBox(NULL, "Pon la ficha sobre un espacio en blanco" , "Stratego 1.0",MB_OK|MB_TOPMOST|MB_APPLMODAL);


Creo que ahora el problema esta en que debería asignarle una ventana al campo "NULL" pero no estoy muy seguro de como hacerlo.

Un saludo.
Lo que debes hacer es obtener el handle de la ventana de la aplicación principal ( no ventanas hijas ) y pasarselo al primer parametro
de MessageBox. Yo no sé de que manera estas creando la ventana principal así que no podria decirte algo directo o talvez FindWindow pero seria incesario si la estas creando por ejemplo con CreateWindow simplemente guardas el valor retornado por la funcion para usarlo despues.

piluve

En realidad no estoy creando una ventana sino que estoy utilizando el CMD de windows.

¿Quizás esto afecte en algo?

Un saludo.
Blog de hacking,noticias,seguridad informática,tutoriales...
http://hackerpedia.wordpress.com

x64core

Cita de: piluve en 18 Enero 2014, 18:35 PM
En realidad no estoy creando una ventana sino que estoy utilizando el CMD de windows.

¿Quizás esto afecte en algo?

Un saludo.
¿Que quieres decir?
Estas llamando la CMD desde tu programa C/C++ y enviandole comandos o estas usando directamente la CMD?

piluve

Estoy haciendo un programa en modo texto que se ejecuta directamente en el intérprete de windows , el cmd.
Blog de hacking,noticias,seguridad informática,tutoriales...
http://hackerpedia.wordpress.com

x64core

Cita de: piluve en 18 Enero 2014, 19:14 PM
Estoy haciendo un programa en modo texto que se ejecuta directamente en el intérprete de windows , el cmd.
usa GetConsoleWindow, el resultado al primer parametro de MessageBox.

piluve

Parece que no funciona de esta manera.

Dice que "GetConsoleWindow(); was not declared on this scope."

He probado creando este define:
#define _WIN32_WINNT 0x0500

Y nada.

Esto no va ...
Blog de hacking,noticias,seguridad informática,tutoriales...
http://hackerpedia.wordpress.com

x64core

Cita de: piluve en 18 Enero 2014, 19:47 PM
Parece que no funciona de esta manera.

Dice que "GetConsoleWindow(); was not declared on this scope."

He probado creando este define:
#define _WIN32_WINNT 0x0500

Y nada.

Esto no va ...
Si es así entonces es error de compilación, que compilador estas usando? estas incluyendo las cabeceras correctas? Tu código?