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.
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?
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Como puedo saber el Handle del Escritorio de Windows?
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.
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?
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
> 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
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Como puedo saber el Handle del Escritorio de Windows?
>
> 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
> 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?
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
> 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?
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
> 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
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Como puedo saber el Handle del Escritorio de Windows?
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.
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?
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
> 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
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Como puedo saber el Handle del Escritorio de Windows?
> 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.
> 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?
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
--
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Como puedo saber el Handle del Escritorio de Windows?
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 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?
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
> 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