In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Como puedo saber el Handle del Escritorio de Windows?

Foro público de Xailer en español
Responder
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por Bingen Ugaldebere »

He rebuscado en las ayudas y no encuentro información al respecto.
Necesito poner un Form sobre el Desktop y no el Form sobre la aplicación
y si es posible que haga Blinking o parpadeo en la barra de tareas de
Windows.
Gracias y salu2.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jlalin »

Bingen,
> He rebuscado en las ayudas y no encuentro información al respecto.
Usa GetDesktopWindow()
> Necesito poner un Form sobre el Desktop y no el Form sobre la aplicación
> y si es posible que haga Blinking o parpadeo en la barra de tareas de
> Windows.
Esto deberí­a funcionar:
//--
FUNCTION FlashForm( oForm, nBlinks )
DEFAULT nBlinks TO 3
FlashWindow( oForm:Handle, nBlinks )
RETURN Nil
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( FLASHWINDOW )
{
FLASHWINFO fi;
fi.cbSize = sizeof( FLASHWINFO );
fi.hwnd = (HWND) hb_parnl( 1 );
fi.uCount = hb_parnl( 2 );
fi.dwFlags = FLASHW_ALL;
fi.dwTimeout = 0;
FlashWindowEx( &fi );
}
#pragma ENDDUMP
//---
Saludos,
José Lalí­n
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por Bingen Ugaldebere »

>
> Usa GetDesktopWindow()
>
Y para conseguir el objeto escritorio y no su Handle, es decir para
poder hacer un oForm Of oDesktop
El Blink funciona pero con algunos cambios como elevando bastante el
valor de fi.dwTimeout por que si no va tan rápido que ni se ve.
Además lo he incorporado como un método de la clase oForm por que si no
no sabia como llamarle en OnActivate creando el form por código.
CLASS TForm FROM XForm
METHOD FlashForm( nBlinks )
ENDCLASS
METHOD FlashForm( nBlinks ) CLASS TForm
DEFAULT nBlinks TO 10
FlashWindow( Self:Handle, nBlinks )
RETURN Nil
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( FLASHWINDOW )
{
FLASHWINFO fi;
fi.cbSize = sizeof( FLASHWINFO );
fi.hwnd = (HWND) hb_parnl( 1 );
fi.uCount = hb_parnl( 2 );
fi.dwFlags = FLASHW_ALL;
fi.dwTimeout = 200;
FlashWindowEx( &fi );
}
#pragma ENDDUMP
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jfgimenez »

Bingen,
> Y para conseguir el objeto escritorio y no su Handle, es decir para poder
> hacer un oForm Of oDesktop
No hay ningún objeto oDesktop, pero puedes usar Application como 'padre' del
formulario.
Por cierto, para el handle del escritorio también puedes usar Screen:Handle
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jlalin »

Bingen,
> Y para conseguir el objeto escritorio y no su Handle, es decir para
> poder hacer un oForm Of oDesktop
Tendrás que hacer como te dice JF y poner el TForm como hijo de
TApplication.
> El Blink funciona pero con algunos cambios como elevando bastante el
> valor de fi.dwTimeout por que si no va tan rápido que ni se ve.
Ok, yo sólo lo he probado en Win98 y funciona muy suave el parpadeo
haciéndolo tal como te lo envié.
> Además lo he incorporado como un método de la clase oForm por que si no
> no sabia como llamarle en OnActivate creando el form por código.
Desde los eventos puedes llamar a cualquier función que necesites.
He aprovechado para pulirla un poco e incluirla en mis librerí­as. Esta
versión está un poco más optimizada y no necesita de la anterior
FlashForm().
También he modificado la función para que tenga en cuenta el valor de
dwTimeout según la versión de Windows.
Para usarla: FlashWindow( oForm, [ nVeces ] )
//---
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( FLASHWINDOW )
{
FLASHWINFO fi;
fi.cbSize = sizeof( FLASHWINFO );
fi.hwnd = GetHandleOf( hb_param( 1, HB_IT_OBJECT ) );
fi.uCount = ISNUM( 2 ) ? hb_parnl( 2 ) : 3;
fi.dwFlags = FLASHW_ALL;
fi.dwTimeout = XA_IsWin9X() ? 0 : 200;
FlashWindowEx( &fi );
}
#pragma ENDDUMP
//---
Saludos,
José Lalí­n
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por Bingen Ugaldebere »

Perfecto Lalí­n muchas gracias el blinker 100%Ok.
Lo que no consigo que me funcione como quiero es el Form sobre el
desktop con lo que me comentais, quizás no me he explicado bien.
Estoy rehaciendo un programa que tenia en FW, que queda minimizado en el
SystemTray (en residente como se decí­a antes, que antiguo q soy)y quiero
que lance ventanas con mensajes que aparezcan sobre cualquier
aplicación, hasta aquí­ no hay problema.
Pero lo que ha de salir es cada ventana reflejada en la barra de tareas
como una si fuera un tarea diferente y debe de hacer Blinking en la
propia barra de tareas.
No se si te he liado mas que aclarado pero si se te ocurre algo te
quedarí­a muy agradecido.
Salu2.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jlalin »

Bingen,
> Perfecto Lalí­n muchas gracias el blinker 100%Ok.
:-)
> Pero lo que ha de salir es cada ventana reflejada en la barra de tareas
> como una si fuera un tarea diferente y debe de hacer Blinking en la
> propia barra de tareas.
Si entiendo bien, serí­a algo parecido a una aplicación MDI pero el
formulario padre serí­a el escritorio, ¿ no ?
> No se si te he liado mas que aclarado pero si se te ocurre algo te
> quedarí­a muy agradecido.
Intentaré preparar un ejemplo esta noche.
Saludos,
José Lalí­n
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por Bingen Ugaldebere »

> Si entiendo bien, serí­a algo parecido a una aplicación MDI pero el
> formulario padre serí­a el escritorio, ¿ no ?
Efectivamente maestro lo has pillado, eso es precisamente lo que querí­a
decir.
> Intentaré preparar un ejemplo esta noche.
No tengo ninguna prisa solo estoy experimentando pequeños programas que
tengo en FW 16bits, pero para dentro de unos meses este tiene que estar
obligatoriamente en 32bits.
Gracias y un saludo.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jlalin »


Bingen,
aquí­ tienes un ejemplo de cómo crear un TForm dinámicamente desde el
SystemTray.
Lo he hecho de modo que se active al pulsar el botón Start y se detenga
al pulsar Stop, pero deberí­a darte una idea de cómo hacer lo que quieres.
Espero que te sirva.
Saludos,
José Lalí­n
--
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por Bingen Ugaldebere »

Muchas gracias extremadamente sencillo, tanto que ya lo habí­a probado
como me comentabais haciendo hijo de Application pero viendo tu ejemplo
veo que además la ventana ha de ser :nBorderStyle := bsDIALOG y yo por
casualidad estaba probando con bsToolWindow y así­ no sale en la
barra de tareas. Cosas del copiar y pegar, lo siento.
Mil gracias y ya me diréis donde os enví­o la caja de cervezas.
Salu2.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Como puedo saber el Handle del Escritorio de Windows?

Mensaje por jlalin »

Bingen,
> Muchas gracias extremadamente sencillo, tanto que ya lo habí­a probado
> como me comentabais haciendo hijo de Application pero viendo tu ejemplo
> veo que además la ventana ha de ser :nBorderStyle := bsDIALOG y yo por
> casualidad estaba probando con bsToolWindow y así­ no sale en la
> barra de tareas. Cosas del copiar y pegar, lo siento.
Entonces el problema se debí­a al estilo bsToolWindow, que hace
justamente lo que dices.
En cuanto al estilo del borde, para conseguir lo que quieres puede ser
cualquiera de ellos menos bsToolWindow.
> Mil gracias y ya me diréis donde os enví­o la caja de cervezas.
Ya pagarás una ronda cuando nos veamos en alguna reunión.
Saludos,
José Lalí­n
Responder