Duda para los de sistemas del foro.

Che, estoy trabado con un quilombete.

¿Alguno sabe, ya sea por llamadas a la API de Windows o lo que poronga sea, si hay alguna manera de obtener el estado de la barra de tareas de Windows? Más concretamente, ¿cómo m#$@ hacer para saber si la barra de tareas está siempre visible o si figura para ocultar automáticamente? Graciassssssssss…

Abrazos, Martín.

---------- Mensaje unificado a las 13:15 ---------- El mensaje anterior habia sido a las 13:06 ----------

PD.: [MENTION=37990]morlock[/MENTION], [MENTION=2264]Millonario80[/MENTION]

Che, estoy trabado con un quilombete.

¿Alguno sabe, ya sea por llamadas a la API de Windows o lo que poronga sea, si hay alguna manera de obtener el estado de la barra de tareas de Windows? Más concretamente, ¿cómo m#$@ hacer para saber si la barra de tareas está siempre visible o si figura para ocultar automáticamente? Graciassssssssss…

Abrazos, Martín.

---------- Mensaje unificado a las 13:15 ---------- El mensaje anterior habia sido a las 13:06 ----------

PD.: [MENTION=37990]morlock[/MENTION], [MENTION=2264]Millonario80[/MENTION]

En que versión de windows? vista? :stuck_out_tongue:

No, en el Seven, pero calculo que desde XP debe de ser para todos lo mismo.

O sea, calculo que se debe invocar a una variable del shell32 que contiene el estado de la barra de tareas, pero no sé cuál. Ya me estoy recorriendo todo portalfox para buscarlo en la opción API y no lo encuentro. :lol:

Te explico para qué lo quiero. Estoy haciendo que el formulario principal de mi sistema se redimensione automáticamente de acuerdo a la resolución de pantalla configurada en el Windows, y abajo tengo una pequeña barra de estado en la que se indica día, hora, versión del sistema y copyright y la empresa con la cual se está trabajando.

Claro, si la barra de tareas de Windows está en modo “Ocultar automáticamente” no hay problema, ya que cuando pasa mi sistema a primer plano no figura. Ahora, si no está en ocultar, el espacio de diseño que tengo es inferior… y dicha barra de estado no se ve. Por ahí pasa mi quilombo.

Por ej, tengo en esta PC una resolución de 1600 x 1200. Yo estoy utilizando los 1200 de alto… y en realidad, no los tengo, ya que de esos 1200, 50 me los morfa la rep@#$ barra de tareas de Windows, y me recontra cago en Bill Gates y toda su parentela. :mrgreen:

---------- Mensaje unificado a las 13:49 ---------- El mensaje anterior habia sido a las 13:42 ----------

Otro tema es (ahora me avivo), que además de saber si la barra de tareas está en Ocultar o en siempre visible, necesito saber su posición. Recién ahora, haciendo memoria, recuerdo que si querés la podés anclar a la izquierda, a la derecha, arriba o abajo (esta última, el modo por defecto).

Si voy a hacer un formulario que se autoajuste de acuerdo a la resolución de Windows, no me queda otra que saber el estado de la barra de tareas, que es algo que puede cambiar cualquier hdp con ganas de joder. :mrgreen:

Ya lo encontré, babosos. Gracias por nada. :twisted: :mrgreen:

Código (en Visual FoxPro):

Enviado por LuisMaria en Viernes, 04 Mayo, 2007	
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

 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