Hola invitado         02 Sep, 2010 - 04:33
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Funciones API para la barra de tareas lecturas 7027
 Enviado por LuisMaria en Viernes, 04 Mayo, 2007
API Con algunas funciones de la API de Windows, podemos manejar la barra de tareas de Windows, ocultandola, desabilitandola, y hasta darle un nivel de tansparencia.

Funciones API para la barra de tareas

Luis María Guayán Por Luis María Guayán, Tucumán, Argentina


Existen algunas funciones API que nos permiten ajustar algunas configuraciones de la Barra de Tareas de Windows.

En este artículo veremos la manera de mostrar, ocultar, habilitar, deshabilitar y hacer porcentualmente transparente la barra de tareas.

También podremos controlar los objetos contenidos en la barra de tareas, como el área de notificación (SysTray) y sus elementos, como los íconos y el reloj.

Guarde el siguiente código como TaskBar.PRG:

Define Class TaskBar As Custom

  Procedure Init
    Declare Integer FindWindow In "user32" ;
      String lpClassName, String lpWindowName

    Declare Integer FindWindowEx In "user32" ;
      Integer HWnd, Integer hWnd2, ;
      String lpsz1, String lpsz2

    Declare Integer GetWindowLong In "user32" ;
      Integer HWnd, Integer nIndex

    Declare Integer SetWindowLong In "user32" ;
      Integer HWnd, Integer nIndex, Integer dwNewLong

    Declare Integer SetLayeredWindowAttributes In "user32" ;
      Integer HWnd, Integer crey, ;
      Integer bAlpha, Integer dwFlags

    Declare Integer ShowWindow In "user32" ;
      Integer HWnd, Integer nCmdShow

    Declare Integer EnableWindow In "user32" ;
      Integer  HWnd, Integer fEnable

  Endproc

  Proc BarraDeTareaVisible(tlVisible)
    Local lnHWndShell_TrayWnd
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    If lnHWndShell_TrayWnd <> 0
      ShowWindow(lnHWndShell_TrayWnd, Iif(tlVisible, 1, 0))
    Endif
  Endproc

  Proc BarraDeTareaHabilitada(tlEnabled)
    Local lnHWndShell_TrayWnd
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    If lnHWndShell_TrayWnd <> 0
      EnableWindow(lnHWndShell_TrayWnd, tlEnabled)
    Endif
  Endproc

  Procedure RelojVisible(tlVisible)
    Local lnHWndShell_TrayWnd, lnHWndTrayNotifyWnd, lnHWndTrayClockWClass
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    lnHWndTrayNotifyWnd = FindWindowEx(lnHWndShell_TrayWnd, 0, "TrayNotifyWnd", 0)
    lnHWndTrayClockWClass = FindWindowEx(lnHWndTrayNotifyWnd, 0, "TrayClockWClass", 0)
    If lnHWndTrayClockWClass <> 0
      ShowWindow(lnHWndTrayClockWClass, Iif(tlVisible,1,0))
    Endif
  Endproc

  Procedure SystrayVisible(tlVisible)
    Local lnHWndShell_TrayWnd, lnHWndTrayNotifyWnd
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    lnHWndTrayNotifyWnd = FindWindowEx(lnHWndShell_TrayWnd, 0, "TrayNotifyWnd", 0)
    If lnHWndTrayNotifyWnd <> 0
      ShowWindow(lnHWndTrayNotifyWnd, Iif(tlVisible,1,0))
    Endif
  Endproc

  Procedure IconosVisible(tlVisible)
    Local lnHWndShell_TrayWnd, lnHWndTrayNotifyWnd, lnHWndSyspager
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    lnHWndTrayNotifyWnd = FindWindowEx(lnHWndShell_TrayWnd, 0, "TrayNotifyWnd", 0)
    lnHWndSyspager = FindWindowEx(lnHWndTrayNotifyWnd, 0, "Syspager", 0)
    If lnHWndSyspager <> 0
      ShowWindow(lnHWndSyspager, Iif(tlVisible,1,0))
    Endif
  Endproc

  Procedure InicioRapidoVisible(tlVisible)
    Local lnHWndShell_TrayWnd, lnHWndReBarWindow32, lnHWndToolbarWindow32
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    lnHWndReBarWindow32 = FindWindowEx(lnHWndShell_TrayWnd, 0, "ReBarWindow32", 0)
    lnHWndToolbarWindow32 = FindWindowEx(lnHWndReBarWindow32, 0, "ToolbarWindow32", 0)
    If lnHWndToolbarWindow32 <> 0
      ShowWindow(lnHWndToolbarWindow32, Iif(tlVisible,1,0))
    Endif
  Endproc

  Procedure BarraDeTareaTransparente(tnLevel)
    Local lnLevel, lnOldStyle, lnWndShell_TrayWnd
    lnLevel = 0xFF - Max(0,Min(Int(tnLevel*255/100),255))
    lnHWndShell_TrayWnd = FindWindow("Shell_TrayWnd", 0)
    If lnHWndShell_TrayWnd <> 0
      lnOldStyle = GetWindowLong(lnHWndShell_TrayWnd, -20)
      SetWindowLong(lnHWndShell_TrayWnd, -20, Bitor(lnOldStyle, 0x80000))
      SetLayeredWindowAttributes(lnHWndShell_TrayWnd, 0, lnLevel, 0x2)
    Endif
  Endproc

Enddefine

A continuación la instancia de la clase y algunos ejemplos de sus métodos.

*-- Instanciamos la clase TaskBar en TaskBar.prg
loTB = NEWOBJECT("TaskBar", "TaskBar.prg")

*-- Barra de tarea no visible
loTB.BarraDeTareaVisible(.F.)

*-- Barra de tarea visible
loTB.BarraDeTareaVisible(.T.)

*-- Area de notificación no visible
loTB.SysTrayVisible(.F.)

*-- Area de notificación visible
loTB.SysTrayVisible(.T.)

*-- Barra de tarea 75% transparente
loTB.BarraDeTareaTransparente(75)

*-- Barra de tarea 25% transparente
loTB.BarraDeTareaTransparente(25)

*-- Barra de tarea 0% transparente
loTB.BarraDeTareaTransparente(0)

Hasta la próxima,

Luis María


 Versión imprimible  
Funciones API para la barra de tareas | Entrar/Crear una cuenta | 4 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.

Re: Funciones API para la barra de tareas


por ocsoft (ocf@portalfox.com) en 04 May, 2007 - 11:50
(Información del usuario  | Enviar un mensaje http://www.aiep.cl)
Con Window XP y VFP8, todos los procedimientos que intentan ejecutar la función SHOWWINDOW(), aparece el siguiente mensaje de error: "No se puede encontrar el punto de entrada SHOWWINDOW en la DLL" ¿Alguna explicación y/o solución para esto?

Re: Funciones API para la barra de tareas


por hektor en 06 Jun, 2007 - 10:32
(Información del usuario  | Enviar un mensaje 
Es posible evitar que surja un globo de texto de los iconos de notificación que hay junto al reloj de la barra de tareas??
O controlarlos para que una vez que salgan poder volver a ocultarlos, cambiarles el nombre, etc...??
Me gustaría añadir unos métodos a la clase TaskBar para controlar estas acciones. ¿Podrías echarme una mano?

Re: Funciones API para la barra de tareas


por globalsoft en 14 Jul, 2010 - 10:13
(Información del usuario  | Enviar un mensaje http://)
Hola Luis, tengo una consulta al respecto. Yo estoy utilizando el siguiente código para ocultar el boton inicio

*- Oculto el boton INICIO
Declare Long FindWindow In "user32" String lpClassName, String lpWindowName
Declare Long SendMessage In "user32" Long HWnd,Long wMsg, Long wParam, Long Lparam
Declare Long FindWindowEx In "user32" Long hWnd1, Long hWnd2, String lpsz1, String lpsz2

#Define WM_CLOSE 0x10
SendMessage(FindWindowEx(FindWindow("Shell_TrayWnd",""), 0x0, "Button", .Null.), WM_CLOSE, 0, 0)

Hasta ahi todo OK, funciona barbaro en XP que es donde lo necesito, pero no encuentro la manera de restaurar el boton de inicio una vez finalizado el programa.

Tenés idea de como es el procedimiento??

Desde ya gracias
Un abrazo desde Entre Ríos, y espero poder saludarte cuando ande por Tucuman.

Fabio Castro




Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.