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
y si la ocultas? y si la escondes arriba del escritorio en posiciones negativas?
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.
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
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:
#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
global.set_bottom = external_define("GMMFDLL.DLL",'window_set_bottom',dll_cdecl,ty_real,1,ty_string);
Y la llamo desde un evento asi
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
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);
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