elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema con el control webbrowser
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el control webbrowser  (Leído 5,219 veces)
snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Problema con el control webbrowser
« en: 24 Enero 2015, 17:15 pm »

tengo un problema con el control webbrowser

hice un programa para ver solo una pagina en especial con un form1 y un webbrowser1
pero cuando quiero minimizar la ventana esta regresa a como estaba antes, pasa de minimized a normal automaticamente

esto solo pasa cuando la pagina esta cargada y con esa pagina en especial
con alguna otra pagina no tengo ese problema

como puedo evitar que pase esto?

tambien queria saber si hay alguna forma de detectar el error 404 en el webbrowser mediante codigo
Gracias  :P





« Última modificación: 24 Enero 2015, 17:43 pm por darky666 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #1 en: 24 Enero 2015, 19:29 pm »

hice un programa para ver solo una pagina en especial con un form1 y un webbrowser1
pero cuando quiero minimizar la ventana esta regresa a como estaba antes, pasa de minimized a normal automaticamente

esto solo pasa cuando la pagina esta cargada y con esa pagina en especial
con alguna otra pagina no tengo ese problema

como puedo evitar que pase esto?

Muestra tú código, y la página en cuestión.





tambien queria saber si hay alguna forma de detectar el error 404 en el webbrowser mediante codigo

No, no es posible.

Tienes dos opciones:

1) Realizar una petición HTTP antes de navegar en el WebBrowser control, para parsear la respuesta del server:
Código
  1. '...
  2. Dim response As HttpWebResponse = request.GetResponse()
  3.  
  4. If response.StatusCode = HttpStatusCode.OK Then
  5.   ...
  6. End If


2) Usar la interface COM de SHDocVw.WebBrowser:

Primero referencia al proyecto Microsoft Internet Controls


Y luego...:
Código
  1. Public NotInheritable Class TestForm ' WebBrowser Test Form by Elektro
  2.  
  3.    Friend WithEvents wb As Windows.Forms.WebBrowser
  4.    Friend WithEvents wbAX As SHDocVw.WebBrowser
  5.  
  6.    Private ReadOnly uri As New Uri("http://foro.elhacker.net/404/")
  7.  
  8.    ''' <summary>
  9.    ''' Handles the Load event of the TestForm control.
  10.    ''' </summary>
  11.    ''' <param name="sender">The source of the event.</param>
  12.    ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
  13.    Private Sub TestForm_Load(ByVal sender As Object, ByVal e As EventArgs) _
  14.    Handles MyBase.Load
  15.  
  16.        Me.wb = New Windows.Forms.WebBrowser
  17.        With Me.wb
  18.            .Dock = DockStyle.Fill
  19.        End With
  20.  
  21.        MyBase.Controls.Add(Me.wb)
  22.  
  23.        Me.wbAX = DirectCast(Me.wb.ActiveXInstance, SHDocVw.WebBrowser)
  24.  
  25.    End Sub
  26.  
  27.    Private Sub TestForm_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  28.    Handles MyBase.Shown
  29.  
  30.        Me.wbAX.Navigate(Me.uri.AbsoluteUri)
  31.  
  32.    End Sub
  33.  
  34.    ''' <summary>
  35.    ''' Handles the <see cref="SHDocVw.WebBrowser.NavigateError"/> event of the <see cref="wbAX"/> object.
  36.    ''' MSDN Documentation:
  37.    ''' https://msdn.microsoft.com/en-us/library/bb268221%28v=vs.85%29.aspx
  38.    ''' https://msdn.microsoft.com/en-us/library/bb268233%28v=vs.85%29.aspx
  39.    ''' </summary>
  40.    ''' <param name="pDisp">
  41.    ''' Object that evaluates to the top-level or frame WebBrowser object corresponding to the failed navigation.
  42.    ''' </param>
  43.    ''' <param name="url">
  44.    ''' String expression that evaluates to the URL for which navigation failed.
  45.    ''' </param>
  46.    ''' <param name="frame">
  47.    ''' String that evaluates to the name of the frame in which the resource is to be displayed,
  48.    ''' or Null if no named frame is targeted for the resource.
  49.    ''' </param>
  50.    ''' <param name="statusCode">
  51.    ''' Integer that contains a status code corresponding to the error, if available.
  52.    ''' For a list of the possible status codes, see https://msdn.microsoft.com/en-us/library/bb268233%28v=vs.85%29.aspx.
  53.    ''' </param>
  54.    ''' <param name="cancel">
  55.    ''' Boolean that specifies whether to cancel the navigation to an error page and/or any further autosearch.
  56.    ''' </param>
  57.    Private Sub WbAX_NavigateError(ByVal pDisp As Object,
  58.                                   ByRef url As Object,
  59.                                   ByRef frame As Object,
  60.                                   ByRef statusCode As Object,
  61.                                   ByRef cancel As Boolean) Handles wbAX.NavigateError
  62.  
  63.        Select Case CInt(statusCode)
  64.  
  65.            Case 404I
  66.                cancel = True
  67.                MessageBox.Show("Server has returned a 404 HTTP status code.",
  68.                                Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
  69.  
  70.            Case -2146697211I ' INET_E_RESOURCE_NOT_FOUND
  71.                cancel = True
  72.                ' ...
  73.  
  74.            Case Else
  75.                ' ...
  76.  
  77.        End Select
  78.  
  79.    End Sub
  80.  
  81. End Class


« Última modificación: 24 Enero 2015, 19:41 pm por Eleкtro » En línea

snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #2 en: 24 Enero 2015, 20:09 pm »

los 2 ejemplos que pusiste en codigo son muy buenos gracias

bueno aqui esta el codigo donde la ventana pasa de minimizada a normal por si sola

Código
  1. WebBrowser1.Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")

cabe mencionar que esta pagina usa flash
« Última modificación: 24 Enero 2015, 20:14 pm por darky666 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #3 en: 24 Enero 2015, 20:54 pm »

Cuando digo que muestres el código me refiero a todo lo que sea relevante al problema, por ejemplo si estás minimizando/restaurando el Form mediante código (o haciendolo en un MDI donde tengas el WebBrowser), etc, a menos que realmente solo sea relevante esa instrucción que mostraste... claro está.

Explica los pasos a seguir para intentar reproducir el problema, porque lo que comentas que te sucede es algo muy raro ...al menos sin conocer más información sobre la app, danos también un poco más de información respecto a la app, ¿es un WinForms?, una imagen también estaría bien.

Saludos
« Última modificación: 24 Enero 2015, 21:04 pm por Eleкtro » En línea

snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #4 en: 24 Enero 2015, 22:04 pm »

si es un windowsform normal
este proyecto solo tiene un form y solo tiene un control llamado webbrowser1 y en el form_load este codigo
Código
  1. WebBrowser1.Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")

y a la hora de minimizar el form1 este regresa a su estado original por si solo
aca te dejo el source del proyecto http://www8.zippyshare.com/v/Aj8nAuUu/file.html

ya he intentado en el form_resize añadir codigo para arreglar esto pero el codigo de este evento se ejecuta hasta lo ultimo y no viene sirviendo de nada el codigo de este evento
« Última modificación: 24 Enero 2015, 22:06 pm por darky666 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #5 en: 25 Enero 2015, 01:15 am »

Sinceramente, jamás vi este tipo de comportamiento en una aplicación, de todas formas hay varios bugs conocidos sobre la pérdida de foco de un WebBrowser (los cuales Microsoft no ha arreglado en años, ni pensará en hacerlo), y esto parece ser más o menos algo similar, ya que el WebBrowser se activa automaticamente o hace que el form se reactive tras minimizarlo, creo que quizás has descubierto o re-descubierto un bug con el WebBrowser que se da en circunstancias muy específicas (las cuales desconozco), de alguna manera esa url tambien debe estar involucrada, ¿pero cómo?, ¡no lo se!.


Bueno, tras investigar un poco el código he averiguado varias cosas sin sentido

1) La propiedad Dock del WebBrowser es lo que entra en conflicto con el Form, mientras el valor de la propiedad Dock sea Fill, el form se reactivará al minimizarlo, y no sirve de nada insertar el WebBrowser en un panel, o añadir márgenes en el Form (superponer o sobreponer el webbrowser), ni nada similar.

2) Así pues, si no quieres que la ventana del form se auto-restaure, primero debes desactivar el Docking del WebBrowser (cambiarlo de Fill a None), y viceversa al restaurar la ventana del Form, (de None a Fill) pero he aquí otro problema que también has descubierto, no sirve de nada suscribirse a los eventos Size/Resize del Form (ni tampoco del WebBrowser) para intentar hacer esas modificaciones.

3) El problema desaparece si instancias el Form en tiempo de ejecución, en vez de añadir el control en tiempo de diseño. Esa sería una solución.
( Ambos WebBrowsers usando el mismo docking, pero el problema desaparece, ¡no tiene sentido! )


Al final he optado por procesar los mensajes de la ventana usando el procedimiento WndProc, pero vaya mi sorpresa fue descubrir que ¡modificar el Docking del webbrowser justo al procesar el mensaje de minimizado tampoco tiene ningún efecto! (mientras que si lo haces antes, si que surge efecto).

Pero por suerte, descubrí que era suficiente con modificar la visibilidad del WebBrowser, aunque solo tiene efecto si la modificas al procesar los mensajes de la ventana del Form.

Solución:

Código
  1. Public Class Form1
  2.  
  3.    Dim WithEvents wb As WebBrowser = Me.WebBrowser1
  4.  
  5.    Public Enum WindowsMessages As Integer
  6.  
  7.        ' MSDN Documentation:
  8.        ' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360%28v=vs.85%29.aspx
  9.  
  10.        ''' <summary>
  11.        ''' A window receives this message when the user chooses the maximize button, minimize button, restore button, or close button.
  12.        ''' </summary>
  13.        WM_SYSCOMMAND = &H112I
  14.  
  15.    End Enum
  16.  
  17.    Public Enum wParams As Integer
  18.  
  19.        ' MSDN Documentation:
  20.        ' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360%28v=vs.85%29.aspx
  21.  
  22.        ''' <summary>
  23.        ''' Minimizes the window.
  24.        ''' </summary>
  25.        SC_MINIMIZE = &HF020I
  26.  
  27.        ''' <summary>
  28.        ''' Restores the window to its normal position and size.
  29.        ''' </summary>
  30.        SC_RESTORE = &HF120I
  31.  
  32.    End Enum
  33.  
  34.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  35.  
  36.        '  MyBase.Controls.Add(Me.wb)
  37.  
  38.        With Me.wb
  39.            .Dock = DockStyle.Fill
  40.            .Navigate("http://144.76.33.166:443/?0,2,0,15,0&nn=hello")
  41.        End With
  42.  
  43.    End Sub
  44.  
  45.    ''' <summary>
  46.    ''' Invokes the default window procedure associated with this window to process messages.
  47.    ''' </summary>
  48.    ''' <param name="m">
  49.    ''' A <see cref="T:System.Windows.Forms.Message"/> that is associated with the current Windows message.
  50.    ''' </param>
  51.    Protected Overrides Sub WndProc(ByRef m As Message)
  52.  
  53.        If m.Msg = WindowsMessages.WM_SYSCOMMAND Then
  54.  
  55.            Select Case m.WParam.ToInt32
  56.  
  57.                Case wParams.SC_MINIMIZE
  58.                    Me.wb.Visible = False
  59.  
  60.                Case wParams.SC_RESTORE
  61.                    Me.wb.Visible = True
  62.  
  63.                Case Else
  64.                    ' Do Nothing
  65.  
  66.            End Select
  67.  
  68.        End If
  69.  
  70.        ' Return Message to base message handler.
  71.        MyBase.WndProc(m)
  72.  
  73.    End Sub
  74.  
  75. End Class

Saludos
« Última modificación: 25 Enero 2015, 02:11 am por Eleкtro » En línea

snakeboy8

Desconectado Desconectado

Mensajes: 30



Ver Perfil
Re: Problema con el control webbrowser
« Respuesta #6 en: 25 Enero 2015, 01:59 am »

Gracias bro la verdad te la rifaste  ;-)
Gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Control WebBrowser
Programación Visual Basic
CesarTkgo69 1 1,222 Último mensaje 7 Febrero 2008, 19:44 pm
por satan69
control webbrowser, dudas
Programación Visual Basic
grafisoft 3 2,132 Último mensaje 13 Febrero 2008, 10:18 am
por grafisoft
Control WebBrowser no Funciona!!
Programación Visual Basic
Cj2009z 4 1,936 Último mensaje 4 Agosto 2008, 21:49 pm
por pato_pato_pato
Duda con control WebBrowser
Programación Visual Basic
gulabyte 0 1,141 Último mensaje 26 Octubre 2008, 05:28 am
por gulabyte
problema con control webbrowser vb6
Programación Visual Basic
Keruvinesh 1 1,968 Último mensaje 17 Mayo 2013, 16:02 pm
por 79137913
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines