Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: 5cr173R en 11 Junio 2013, 19:50 PM

Título: Duda con ventanas y c++
Publicado por: 5cr173R en 11 Junio 2013, 19:50 PM
Buenas, estoy desarrollando un programa que reemplazara el escritorio de windows, algo asi como un wallpaper muy elaborado, pero necesito saber como mantener a mi ventana al nivel del escritorio (Lo mas abajo).
El programa lo desarrollo en Game Maker 8, y la DLL en la que debe estar la funcion de mover la ventana abajo con Dev-C++.
Se que con esta funcion:

SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);

empujo a la ventana, pero tengo que ejecutarla muchas veces para mantenerla abajo, y esto hace que la barra de tares parpadee y cuando le paso el foco a las ventanas normales, estas tambien parpadean.

Que me aconsejan? de antemano se les agradece y si quieren credito en el proyecto con mucho gusto los incluyo.
Gracias
Título: Re: Duda con ventanas y c++
Publicado por: engel lex en 11 Junio 2013, 19:57 PM
y si la ocultas? y si la escondes arriba del escritorio en posiciones negativas?
Título: Re: Duda con ventanas y c++
Publicado por: amchacon en 11 Junio 2013, 19:59 PM
Sin ver el código, se me ocurre:

while (1) // bucle
{
 // Programa

 SetWindowPos();

 Sleep(500); // Duermo el programa 500 ms.

}


Lo que quiero decirte es que uses Sleep(); para hacer descansar el programa, al hacer menos operaciones debería de parpadear menos.
Título: Re: Duda con ventanas y c++
Publicado por: 5cr173R en 11 Junio 2013, 20:08 PM
Cita de: engelx en 11 Junio 2013, 19:57 PM
y si la ocultas? y si la escondes arriba del escritorio en posiciones negativas?

No comprendo, que son posiciones negativas?
En si es una ventana ajena al codigo en c++ (La dll la hago en C++ y la aplicacion en Game Maker), ya que game maker es un IDE escrito en delphi y utiliza funciones externas definidas desde librerias  o DLLs, la fucion solo la puedo llamar entre cada actualizacion de ventana, asi que mi cuestion es si puedo definir a la ventana (Editar algun LONG con SetWindowLong) que la mantenga por debajo sin llamar varias veces a la funcion.
Gracias
Título: Re: Duda con ventanas y c++
Publicado por: 5cr173R en 11 Junio 2013, 20:14 PM
Cita de: amchacon en 11 Junio 2013, 19:59 PM
Sin ver el código, se me ocurre:

while (1) // bucle
{
 // Programa

 SetWindowPos();

 Sleep(500); // Duermo el programa 500 ms.

}


Lo que quiero decirte es que uses Sleep(); para hacer descansar el programa, al hacer menos operaciones debería de parpadear menos.

Creo que veo la idea, pero la cosa es que el codigo que empuje la ventana va dentro de una DLL.
La ventana que lo llama no esta escrita en C++, sino con Game Maker (Lenguaje GML).

Llevo esto en la dll:

Código (cpp) [Seleccionar]

#include <windows.h>

DLLIMPORT double window_set_bottom (char* procesog)
{
HWND wnd = FindWindow(0,procesog);
SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);
}

void DllMain ()
{

}


Y en la aplicacion de Game Maker la defino con

Código (gml) [Seleccionar]

global.set_bottom = external_define("GMMFDLL.DLL",'window_set_bottom',dll_cdecl,ty_real,1,ty_string);


Y la llamo desde un evento asi

Código (gml) [Seleccionar]

external_call(global.set_bottom,"paradize") // donde paradize es mi aplicacion


Eso la empuja, pero al volver el foco a "Paradize", vuelve a ponerla arriba
Título: Re: Duda con ventanas y c++
Publicado por: amchacon en 11 Junio 2013, 20:17 PM
HWND wnd = FindWindow(0,procesog);
SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);


Prueba a poner:

HWND wnd = FindWindow(0,procesog);
SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);
Sleep(200);

Título: Re: Duda con ventanas y c++
Publicado por: 5cr173R en 11 Junio 2013, 20:40 PM
Cita de: amchacon en 11 Junio 2013, 20:17 PM
HWND wnd = FindWindow(0,procesog);
SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);


Prueba a poner:

HWND wnd = FindWindow(0,procesog);
SetWindowPos(wnd,HWND_BOTTOM,0,0,0,0,SWP_NOSIZE + SWP_NOMOVE);
Sleep(200);



Tendre que probarlo, si funciona te aviso, gracias por la ayuda