Utilizar función ShowInTaskbar con firefox

Iniciado por daniel.r.23, 27 Octubre 2014, 05:10 AM

0 Miembros y 1 Visitante están viendo este tema.

daniel.r.23

Bueno la idea es tratar de ocultar el icono de firefox de la barra de tareas.
Si fuera un form que estuviese ejecutando usaría el siguiente cód:

Me.ShowInTaskbar = False

Pero o me doy cuanta como usarlo cuando tengo que obtener una ventana, en mi caso una del navegador Firefox.
Espero que me pudan dar una mano!! gracias

engel lex

qué estás haciendo con firefox XD parece que fueras a hacer un virus que use firefox como motor XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

daniel.r.23

no de momento no ando en esas cosas!! jaja
Es por una propuesta de un amigo con la PTC Neobux, desde ahí estoy mejorando un autoclick muy casero...
funciona a través de firefox, controlado por ruby y con una mínima interfaz en vb.net.
Lo que estoy tratando de hacer con esto que al usuario no le moleste la ventana o ventanas que se abran del navegador, sin suerte alguna!!

LeandroA

Hola dos ayudas rapida, por lo que vi en algunos temas anteriores, yo no lo aria con firefox y lo haria con el webbrowser (si el de iexplorer) pero bueno es tu elecion.

para quitar una ventana del la barra de tarea se utiliza la constante  WS_EX_APPWINDOW de el api SetWindowRgn

un ejemplo en vb6

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const GWL_EXSTYLE As Long = -20

Private Sub Command1_Click()
    Dim hwndFireFox As Long
   
    hwndFireFox = Me.hWnd '<--aca ira el de firefox
   
   
    ShowWindow hwndFireFox, 0
    SetWindowLong hwndFireFox, GWL_EXSTYLE, GetWindowLong(hwndFireFox, GWL_EXSTYLE) And Not WS_EX_APPWINDOW
    ShowWindow hwndFireFox, 1

End Sub


y despues si showwindow hace que no te funcione proba recortando la región de la ventana a 0, el navegador puede controlar si esta visible o no, pero no controla si su región esta nula.

Código (vb) [Seleccionar]
Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long



Private Sub Command1_Click()
    Dim hwndFireFox As Long
   
    hwndFireFox = Me.hWnd

    'ocultar la ventana recortandola a 0
    SetWindowRgn hwndFireFox, CreateRectRgn(0, 0, 0, 0), True
End Sub

daniel.r.23

Gracias por responder, voy a probar la primera solución, la segunda que me planteas no por que programa esta constantemente activando el navegador por lo que nunca lo va a ocultar, en cambio lo que hice fue cambiarle la posición.
Por eso lo único que me restaría hacer para que el usuario no vea nada es quitar el icono de la ventana de la barra de tareas.
Lo pruebo y te comento!

daniel.r.23

#5
buenas, te cuento que me sale un error en está linea:


SetWindowLong hwndFireFox, GWL_EXSTYLE, GetWindowLong(hwndFireFox, GWL_EXSTYLE) And Not WS_EX_APPWINDOW


que dice:

"Una llamada a la función PInvoke 'Neo!Neo.Form1::GetWindowLong' impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino."

algo que observo en mi código pero que al modificarlo sigo con el mismo problema es como tengo definidas algunas de las funciones:


Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Const WS_EX_APPWINDOW As Long = &H40000
    Private Const GWL_EXSTYLE As Long = -20
    <DllImport("user32.dll", EntryPoint:="FindWindowExW")> _
    Private Shared Function FindWindowExW(ByVal hwndParent As System.IntPtr, ByVal hwndChildAfter As System.IntPtr, <InAttribute(), MarshalAs(UnmanagedType.LPTStr)> ByVal lpszClass As String, <InAttribute(), MarshalAs(UnmanagedType.LPTStr)> ByVal lpszWindow As String) As System.IntPtr
    End Function

    Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim Width As Integer = My.Computer.Screen.Bounds.Width
        Dim Height As Integer = My.Computer.Screen.Bounds.Height
        While Not visible_
            Dim hWnd As IntPtr = FindWindowExW(IntPtr.Zero, IntPtr.Zero, "MozillaWindowClass", Nothing)
            While Not hWnd.Equals(IntPtr.Zero)
                Dim title As New System.Text.StringBuilder(256)
                GetWindowTextW(hWnd, title, 256)
                'If title.ToString.Contains("NeoBux") Then
                MoveWindow(hWnd, Width, Height, Width, Height, True)
                'End If
                hWnd = FindWindowExW(IntPtr.Zero, hWnd, "MozillaWindowClass", Nothing)
                SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) And Not WS_EX_APPWINDOW)

            End While
           
        End While
        visible_ = False
    End Sub


tanto  SetWindowLong como GetWindowLong toman un dato de tipo Long mientras que yo como lo tengo definido le paso un  IntPtr

LeandroA

hola no manejo .net  pero a simple vista te dira que remplazes "Long" por  "System.IntPtr", es importante para que los cambios se resalten tenes que poner la ventana hide luego aplicar el camibio a  Not WS_EX_APPWINDOW y luego ponerla visible.

    ShowWindow hwndFireFox, 0
    SetWindowLong hwndFireFox, GWL_EXSTYLE, GetWindowLong(hwndFireFox, GWL_EXSTYLE) And Not WS_EX_APPWINDOW
    ShowWindow hwndFireFox, 1