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
qué estás haciendo con firefox XD parece que fueras a hacer un virus que use firefox como motor XD
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!!
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
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.
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
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!
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
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