Página 1 de 1

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Lun Jul 10, 2006 12:37 pm
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.

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Lun Jul 10, 2006 1:20 pm
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

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Mar Jul 11, 2006 10:02 am
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

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Mar Jul 11, 2006 11:58 am
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

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Mar Jul 11, 2006 3:40 pm
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

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Mar Jul 11, 2006 5:16 pm
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.

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Mié Jul 12, 2006 1:32 pm
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

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Jue Jul 13, 2006 9:18 am
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.

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Jue Jul 13, 2006 2:20 pm
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
--

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Jue Jul 13, 2006 4:49 pm
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.

Como puedo saber el Handle del Escritorio de Windows?

Publicado: Vie Jul 14, 2006 10:39 am
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