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
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.