Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#1191
¿Cómo obtener las cookies del sitio web activo en una instancia del control WebBrowser?

Esta idea se me ocurrió por la necesidad de loguearme de forma interactiva (me refiero, manualmente mediante un WebBrowser) a un sitio web que tiene captcha y una pregunta aleatoria de seguridad... por lo cual iba a ser costoso o inviable automatizar la obtención de la cookie de la sesión mediante solicitudes POST en background.

Este código no tiene nada de especial, simplemente es una alternativa de uso para en lugar de utilizar la propiedad WebBrowser.Document.Cookie, la cual devuelve un String, con este código podemos obtener directamente una instancia de la clase CookieContainer o CookieCollection.

Este es el código:

Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Contains custom extension methods to use with <see cref="WebBrowser"/> control.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
<HideModuleName>
Public Module WebBrowserExtensions

#Region " Public Extension Methods "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets a <see cref="CookieContainer"/> containing the stored cookies for the active website
   ''' in the source <see cref="WebBrowser"/>.
   ''' (that is, the active opened document in the <see cref="WebBrowser.Document"/> property).
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <example> This is a code example.
   ''' <code>
   ''' Public Class Form1
   '''
   '''     Private uri As New Uri("https://foro.elhacker.net/")
   '''
   '''     Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles MyBase.Shown
   '''         Me.WebBrowser1.ScriptErrorsSuppressed = True
   '''         Me.WebBrowser1.Navigate(uri)
   '''     End Sub
   '''
   '''     Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
   '''
   '''         Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
   '''         If Not (wb.ReadyState = WebBrowserReadyState.Complete) OrElse Not (e.Url = Me.uri) Then
   '''             Exit Sub
   '''         End If
   '''
   '''         Dim cookies As CookieContainer = GetCookieContainer(wb)
   '''         For Each cookie As Cookie In cookies.GetCookies(Me.uri)
   '''             Console.WriteLine(cookie.ToString())
   '''         Next cookie
   '''
   '''     End Sub
   '''
   ''' End Class
   ''' </code>
   ''' </example>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="wb">
   ''' The source <see cref="WebBrowser"/>.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' The resulting <see cref="CookieContainer"/>.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   <Extension>
   <EditorBrowsable(EditorBrowsableState.Always)>
   Public Function GetCookieContainer(ByVal wb As WebBrowser) As CookieContainer
       Dim uri As Uri = wb.Url
       Dim cookieContainer As New CookieContainer()
       Dim cookies As String() = wb.Document.Cookie.Split({";"c}, StringSplitOptions.None)

       For Each cookie As String In cookies
           Dim name As String = cookie.Substring(0, cookie.IndexOf("="c)).TrimStart(" "c)
           Dim value As String = cookie.Substring(cookie.IndexOf("="c) + 1)
           cookieContainer.Add(uri, New Cookie(name, value, "/", uri.Host))
       Next cookie

       Return cookieContainer
   End Function

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets a <see cref="CookieCollection"/> containing the stored cookies for the active website
   ''' in the source <see cref="WebBrowser"/>.
   ''' (that is, the active opened document in the <see cref="WebBrowser.Document"/> property).
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <example> This is a code example.
   ''' <code>
   ''' Public Class Form1
   '''
   '''     Private uri As New Uri("https://foro.elhacker.net/")
   '''
   '''     Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles MyBase.Shown
   '''         Me.WebBrowser1.ScriptErrorsSuppressed = True
   '''         Me.WebBrowser1.Navigate(uri)
   '''     End Sub
   '''
   '''     Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
   '''
   '''         Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
   '''
   '''         If Not (wb.ReadyState = WebBrowserReadyState.Complete) OrElse Not (e.Url = Me.uri) Then
   '''             Exit Sub
   '''         End If
   '''
   '''         Dim cookies As CookieCollection = GetCookieCollection(wb)
   '''         For Each cookie As Cookie In cookies
   '''             Console.WriteLine(cookie.ToString())
   '''         Next cookie
   '''
   '''     End Sub
   '''
   ''' End Class
   ''' </code>
   ''' </example>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="wb">
   ''' The source <see cref="WebBrowser"/>.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' The resulting <see cref="CookieCollection"/>.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   <Extension>
   <EditorBrowsable(EditorBrowsableState.Always)>
   Public Function GetCookieCollection(ByVal wb As WebBrowser) As CookieCollection

       Dim uri As Uri = wb.Url
       Return Cookies.GetCookieContainer(wb).GetCookies(uri)

   End Function

#End Region

End Module


Ejemplo de uso:

Código (vbnet) [Seleccionar]
Imports WebBrowserExtensions

Public Class Form1

   Private uri As New Uri("https://www.domain.com/")

   Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles MyBase.Shown
       Me.WebBrowser1.ScriptErrorsSuppressed = True
       Me.WebBrowser1.Navigate(uri)
   End Sub

   Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

       Dim wb As WebBrowser = DirectCast(sender, WebBrowser)
       If Not (wb.ReadyState = WebBrowserReadyState.Complete) OrElse Not (e.Url = Me.uri) Then
           Exit Sub
       End If

       Dim cookies As CookieContainer = wb.GetCookieContainer()
       For Each cookie As Cookie In cookies.GetCookies(Me.uri)
           Console.WriteLine(cookie.ToString())
       Next cookie

   End Sub

End Class
#1192
Cita de: DekerMD en 26 Febrero 2018, 15:59 PMyo estaba tan emocionado por haber creado ese .bat con solo haber leído el CMD help

Sigue siendo un logro emocionante y respetable, como aprender a montar en triciclo para niños pequeños... pero luego acabar descubriendo que existen las bicicletas de montaña y que todo son ventajas (o eso creo xD).

Cita de: DekerMD en 26 Febrero 2018, 15:59 PMy con tus palabras me sentí un cavernícola creado su primera rueda de piedra XD

Entiendo que tu comentario es de broma, y perdón por insistir ahora con esto que te voy a decir, pero no se si lo que percibo en tu comentario es desinterés, o inocencia e incredulidad, y es que en realidad tarde o temprano Batch te va a acabar limitando de forma abrupta, vas a tener que recurrir a otro lenguaje si deseas llevar a cabo lo que quieras hacer, y ese tiempo invertido aprendiendo cosas (inútiles) en Batch ya no lo podrás recuperar (por que créeme, no lo querrás volver a utilizar nunca más en cuanto te acostumbres a utilizar un lenguaje de verdad... más que para cosas/scripts muy puntuales).

Si programas de forma esporádica sin interés por la programación y solo tienes la necesidad de llevar a cabo operaciones dentro del margen de lo que cubren los comandos internos (y los mal llamados comandos externos) de Batch, u operaciones relacionadas con el sistema de archivos (copiar, mover, listar, eliminar, etc) pues en ese caso creo que no pasa nada por usar Batch, se hace relativamente facil con los comandos que provee, pero para todo lo demás (sobre todo el análisis y manipulación de texto, operaciones muy demandadas en Batch) se vuelve extremadamente tedioso en comparación con "cualquier" otro lenguaje, dicho de otra forma: es anti-productivo.

No me tomes por pesado, ya dejo el tema, es solo que me gusta advertir a los personas que se inician con Batch como su primer lenguaje de programación (aunque Batch solo es procesamiento por lotes), por que yo empecé de esa misma forma, lo dominé y estuve 3-5 años y nadie tuvo el detalle de advertirme o aconsejarme, y pensaba cosas como: "Batch es facil de usar, me sirve para lo que quiero hacer y no necesito más"... pero si vas a programar en serio entonces pensar así es engañarse a uno mismo.

PD: me alegro de que hayas solucionado el problema.

Saludos!
#1193
Cita de: Machacador en 26 Febrero 2018, 16:05 PMLa mezcla de tantas razas ha convertido a USA en una sociedad de locos alienados...







#1194
Cita de: WHKno es vieja

Cita de: Machacador en 26 Febrero 2018, 15:46 PMDebe ser "El bueno, el malo y el feo"...

...si no fuese por el detalle de que la película es de los años 60. :P




¿Quizás estás buscando la película asiática "El bueno, el malo y el raro"?, es una especie de comedia western de acción como tributo o insparada en "El bueno, el malo y el feo", y sale un chino que siempre va vestido de azul oscuro o negro y que los tiene a todos acojonaos...

 

[youtube=640,360]https://www.youtube.com/watch?v=f9LAzMeSU8g[/youtube]

PD: la película es del 2008.

Saludos!
#1195
No me ha quedado muy claro si por "partir" te refieres a partir una cadena de texto y asignar los elementos partidos a una variable (un Array), o simplemente mostrar la cadena de texto de forma partida, tal que así:

Código (dos) [Seleccionar]
@Echo Off

Set "string=I am sorry. Goodbye"
FOR %%# IN (%string%) DO (
Echo:%%#
)

Pause
Exit /B 0


De todas formas has elegido el peor "lenguaje" posible ya que Batch no tiene soporte nativo para la declaración de Arrays, por ende no puedes partir una cadena de texto y almacenar todos los tokens/partes en una variable, suponiendo que eso sea a lo que te referías. Lo único que puedes lograr en Batch es una mala e imperfecta simulación de Array: construir una cadena de texto delimitada por comas, espacios, o punto y coma, e iterar las partes delimitadas mediante un búcle FOR (como en el ejemplo que he mostrado), pero no te merece la pena hacer las cosas así de mal y suciamente hechas, es preferible recurrir a cualquier otro lenguaje de verdad que soporte el uso de Arrays.

Saludos!
#1197
Java / Re: Quitar IF
26 Febrero 2018, 00:08 AM
Cita de: n-utz en 25 Febrero 2018, 18:10 PMY el try-catch para Gregorian como sería?

Si tienes pensado reemplazar condicionales por bloques try/catch con la idea de que así lograrás micro-optimizar el rendimiento... vas muy equivocado, haciendo eso conseguirás precisamente todo lo contrario que si usases un If. En las mismas condiciones, el tiempo total de ejecución de un try/catch es mayor que el de un If, sobre todo si en lugar de controlar una excepción específica lo que controlas es la clase base para todos los tipos de excepciones (clase Exception en Java) debe tomarse aun más tiempo para evaluar. Y en la misma cantidad, el abuso de bloques try/catch es más perjudicial para el rendimiento que el abuso de (anidación o no de) condicionales.

Aparte de que le estarias dando un uso inapropiado, ya que un bloque try/catch sirve para controlar cosas que escapan de tu control dentro del flujo normal de tu programa, y no es el caso.

Cita de: n-utz en 25 Febrero 2018, 18:10 PMIgualmente, para gustos...

Esa "filosofía" es de lo más absurdo, y esto no es cuestión de gustos, sino de hechos. No creo que se pueda añadir mucho más a lo que ya te ha explicado todo el mundo, deberías hacer caso a lo que te están advirtiendo y aconsejando los demás compañeros, por que ellos no dicen habladurías, en cambio esa filosofía si, y si te acostumbras a esas habladurías pues estarás siguiendo un mal camino en el ámbito de la programación.

Saludos!
#1198
Un código simple y sencillo para obtener o establecer el modo de emulación de Internet Explorer en nuestra aplicación o para otra aplicación.

EDITO: código corregido, y refactorizado.

Código (vbnet) [Seleccionar]
   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Specifies a Internet Explorer browser emulation mode.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <remarks>
   ''' <see href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
   ''' </remarks>
   ''' ----------------------------------------------------------------------------------------------------
   Public Enum IEBrowserEmulationMode As Integer

       ''' <summary>
       ''' Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.
       ''' </summary>
       IE7 = 7000

       ''' <summary>
       ''' Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.
       ''' </summary>
       IE8 = 8000

       ''' <summary>
       ''' Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive.
       ''' <para></para>
       ''' Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
       ''' </summary>
       IE8Standards = 8888

       ''' <summary>
       ''' Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
       ''' </summary>
       IE9 = 9000

       ''' <summary>
       ''' Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive.
       ''' <para></para>
       ''' Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
       ''' </summary>
       IE9Standards = 9999

       ''' <summary>
       ''' Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
       ''' </summary>
       IE10 = 10000

       ''' <summary>
       ''' Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
       ''' </summary>
       IE10Standards = 10001

       ''' <summary>
       ''' Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode.
       ''' </summary>
       IE11 = 11000

       ''' <summary>
       ''' Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive.
       ''' <para></para>
       ''' Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
       ''' </summary>
       IE11Edge = 11001

   End Enum


+

Código (vbnet) [Seleccionar]
   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Specifies a registry scope (a root key).
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   Public Enum RegistryScope As Integer

       ''' <summary>
       ''' This refers to the HKEY_LOCAL_MACHINE (or HKLM) registry root key.
       ''' <para></para>
       ''' Configuration changes made on the subkeys of this root key will affect all users.
       ''' </summary>
       Machine = 0

       ''' <summary>
       ''' This refers to the HKEY_CURRENT_USER (or HKCU) registry root key.
       ''' <para></para>
       ''' Configuration changes made on the subkeys of this root key will affect only the current user.
       ''' </summary>
       CurrentUser = 1

   End Enum


+

Código (vbnet) [Seleccionar]
       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Gets or sets the Internet Explorer browser emulation mode for the current application.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <seealso href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example to get, set and verify the IE browser emulation mode for the current process.
       ''' <code>
       ''' Dim scope As RegistryScope = RegistryScope.CurrentUser
       ''' Dim oldMode As IEBrowserEmulationMode
       ''' Dim newMode As IEBrowserEmulationMode
       '''
       ''' oldMode = BrowserEmulationMode(scope)
       ''' BrowserEmulationMode(scope) = IEBrowserEmulationMode.IE11Edge
       ''' newMode = BrowserEmulationMode(scope)
       '''
       ''' Console.WriteLine(String.Format("Old Mode: {0} ({1})", oldMode, CStr(oldMode)))
       ''' Console.WriteLine(String.Format("New Mode: {0} ({1})", newMode, CStr(newMode)))
       '''
       ''' Dim f As New Form() With {.Size = New Size(1280, 720)}
       ''' Dim wb As New WebBrowser With {.Dock = DockStyle.Fill}
       ''' f.Controls.Add(wb)
       ''' f.Show()
       ''' wb.Navigate("http://www.whatversion.net/browser/")
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="scope">
       ''' The registry scope.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <value>
       ''' The Internet Explorer browser emulation mode.
       ''' </value>
       ''' ----------------------------------------------------------------------------------------------------
       Public Shared Property BrowserEmulationMode(ByVal scope As RegistryScope) As IEBrowserEmulationMode
           <DebuggerStepThrough>
           Get
               Return AppUtil.GetIEBrowserEmulationMode(Process.GetCurrentProcess().ProcessName, scope)
           End Get
           <DebuggerStepThrough>
           Set(value As IEBrowserEmulationMode)
               AppUtil.SetIEBrowserEmulationMode(Process.GetCurrentProcess().ProcessName, scope, value)
           End Set
       End Property


+

Código (vbnet) [Seleccionar]

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Gets the Internet Explorer browser emulation mode for the specified process.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <seealso href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim processName As String = Process.GetCurrentProcess().ProcessName
       ''' Dim scope As RegistryScope = RegistryScope.CurrentUser
       ''' Dim mode As IEBrowserEmulationMode = GetIEBrowserEmulationMode(processName, scope)
       '''
       ''' Console.WriteLine(String.Format("Mode: {0} ({1})", mode, CStr(mode)))
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="processName">
       ''' The process name (eg. 'cmd.exe').
       ''' </param>
       '''
       ''' <param name="scope">
       ''' The registry scope.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' The resulting <see cref="IEBrowserEmulationMode"/>.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="NotSupportedException">
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Function GetIEBrowserEmulationMode(ByVal processName As String, ByVal scope As RegistryScope) As IEBrowserEmulationMode

           processName = Path.GetFileNameWithoutExtension(processName)

           Using rootKey As RegistryKey = If(scope = RegistryScope.CurrentUser,
                                             RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default),
                                             RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default)),
                 subKey As RegistryKey = rootKey.CreateSubKey("Software\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION",
                                                              RegistryKeyPermissionCheck.ReadSubTree)

               Dim value As Integer =
                   CInt(subKey.GetValue(String.Format("{0}.exe", processName), 0, RegistryValueOptions.None))

               ' If no browser emulation mode is retrieved from registry, then return default version for WebBrowser control.
               If (value = 0) Then
                   Return IEBrowserEmulationMode.IE7
               End If

               If [Enum].IsDefined(GetType(IEBrowserEmulationMode), value) Then
                   Return DirectCast(value, IEBrowserEmulationMode)

               Else
                   Throw New NotSupportedException(String.Format("Unrecognized browser emulation version: {0}", value))

               End If

           End Using

       End Function

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Gets the Internet Explorer browser emulation mode for the specified process.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <seealso href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim p As Process = Process.GetCurrentProcess()
       ''' Dim scope As RegistryScope = RegistryScope.CurrentUser
       ''' Dim mode As IEBrowserEmulationMode = GetIEBrowserEmulationMode(p, scope)
       '''
       ''' Console.WriteLine(String.Format("Mode: {0} ({1})", mode, CStr(mode)))
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="p">
       ''' The process.
       ''' </param>
       '''
       ''' <param name="scope">
       ''' The registry scope.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' The resulting <see cref="IEBrowserEmulationMode"/>.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="NotSupportedException">
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Function GetIEBrowserEmulationMode(ByVal p As Process, ByVal scope As RegistryScope) As IEBrowserEmulationMode

           Return AppUtil.GetIEBrowserEmulationMode(p.ProcessName, scope)

       End Function

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Sets the Internet Explorer browser emulation mode for the specified process.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <seealso href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim processName As String = Process.GetCurrentProcess().ProcessName
       ''' Dim scope As RegistryScope = RegistryScope.CurrentUser
       ''' Dim oldMode As IEBrowserEmulationMode
       ''' Dim newMode As IEBrowserEmulationMode
       '''
       ''' oldMode = GetIEBrowserEmulationMode(processName, scope)
       ''' SetIEBrowserEmulationMode(processName, scope, IEBrowserEmulationMode.IE11Edge)
       ''' newMode = GetIEBrowserEmulationMode(processName, scope)
       '''
       ''' Console.WriteLine(String.Format("Old Mode: {0} ({1})", oldMode, CStr(oldMode)))
       ''' Console.WriteLine(String.Format("New Mode: {0} ({1})", newMode, CStr(newMode)))
       '''
       ''' Dim f As New Form() With {.Size = New Size(1280, 720)}
       ''' Dim wb As New WebBrowser With {.Dock = DockStyle.Fill}
       ''' f.Controls.Add(wb)
       ''' f.Show()
       ''' wb.Navigate("http://www.whatversion.net/browser/")
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="processName">
       ''' The process name (eg. 'cmd.exe').
       ''' </param>
       '''
       ''' <param name="scope">
       ''' The registry scope.
       ''' </param>
       '''
       ''' <param name="mode">
       ''' The Internet Explorer browser emulation mode to set.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="NotSupportedException">
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub SetIEBrowserEmulationMode(ByVal processName As String, ByVal scope As RegistryScope, ByVal mode As IEBrowserEmulationMode)

           processName = Path.GetFileNameWithoutExtension(processName)

           Dim currentIEBrowserEmulationMode As IEBrowserEmulationMode = GetIEBrowserEmulationMode(processName, scope)
           If (currentIEBrowserEmulationMode = mode) Then
               Exit Sub
           End If

           Using rootKey As RegistryKey = If(scope = RegistryScope.CurrentUser,
                                             RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default),
                                             RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default)),
                 regKey As RegistryKey = rootKey.CreateSubKey(
                           "Software\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION",
                           RegistryKeyPermissionCheck.ReadWriteSubTree)

               regKey.SetValue(String.Format("{0}.exe", processName),
                               DirectCast(mode, Integer), RegistryValueKind.DWord)

           End Using

       End Sub

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Sets the Internet Explorer browser emulation mode for the specified process.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <seealso href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)"/>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim processName As Process = Process.GetCurrentProcess()
       ''' Dim scope As RegistryScope = RegistryScope.CurrentUser
       ''' Dim oldMode As IEBrowserEmulationMode
       ''' Dim newMode As IEBrowserEmulationMode
       '''
       ''' oldMode = GetIEBrowserEmulationMode(p, scope)
       ''' SetIEBrowserEmulationMode(p, scope, IEBrowserEmulationMode.IE11Edge)
       ''' newMode = GetIEBrowserEmulationMode(p, scope)
       '''
       ''' Console.WriteLine(String.Format("Old Mode: {0} ({1})", oldMode, CStr(oldMode)))
       ''' Console.WriteLine(String.Format("New Mode: {0} ({1})", newMode, CStr(newMode)))
       '''
       ''' Dim f As New Form() With {.Size = New Size(1280, 720)}
       ''' Dim wb As New WebBrowser With {.Dock = DockStyle.Fill}
       ''' f.Controls.Add(wb)
       ''' f.Show()
       ''' wb.Navigate("http://www.whatversion.net/browser/")
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="p">
       ''' The process.
       ''' </param>
       '''
       ''' <param name="scope">
       ''' The registry scope.
       ''' </param>
       '''
       ''' <param name="mode">
       ''' The Internet Explorer browser emulation mode to set.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <exception cref="NotSupportedException">
       ''' </exception>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Sub SetIEBrowserEmulationMode(ByVal p As Process, ByVal scope As RegistryScope, ByVal mode As IEBrowserEmulationMode)

           AppUtil.SetIEBrowserEmulationMode(p.ProcessName, scope, mode)

       End Sub


Ejemplo de uso para obtener, establecer y verificar el modo de emulación del proceso actual:

Código (vbnet) [Seleccionar]

   Dim scope As RegistryScope = RegistryScope.CurrentUser
   Dim oldMode As IEBrowserEmulationMode
   Dim newMode As IEBrowserEmulationMode

   oldMode = BrowserEmulationMode(scope)
   BrowserEmulationMode(scope) = IEBrowserEmulationMode.IE11Edge
   newMode = BrowserEmulationMode(scope)

   Console.WriteLine(String.Format("Old Mode: {0} ({1})", oldMode, CStr(oldMode)))
   Console.WriteLine(String.Format("New Mode: {0} ({1})", newMode, CStr(newMode)))

   Dim f As New Form() With {.Size = New Size(1280, 720)}
   Dim wb As New WebBrowser With {.Dock = DockStyle.Fill}
   f.Controls.Add(wb)
   f.Show()
   wb.Navigate("http://www.whatversion.net/browser/")


Ejemplo de uso para obtener, establecer y verificar el modo de emulación de un proceso específico:

Código (vbnet) [Seleccionar]
   Dim processName As String = Process.GetCurrentProcess().ProcessName
   Dim scope As RegistryScope = RegistryScope.CurrentUser
   Dim oldMode As IEBrowserEmulationMode
   Dim newMode As IEBrowserEmulationMode

   oldMode = GetIEBrowserEmulationMode(processName, scope)
   SetIEBrowserEmulationMode(processName, scope, IEBrowserEmulationMode.IE11Edge)
   newMode = GetIEBrowserEmulationMode(processName, scope)

   Console.WriteLine(String.Format("Old Mode: {0} ({1})", oldMode, CStr(oldMode)))
   Console.WriteLine(String.Format("New Mode: {0} ({1})", newMode, CStr(newMode)))

   Dim f As New Form() With {.Size = New Size(1280, 720)}
   Dim wb As New WebBrowser With {.Dock = DockStyle.Fill}
   f.Controls.Add(wb)
   f.Show()
   wb.Navigate("http://www.whatversion.net/browser/")


Saludos.
#1199
Cita de: #!drvy en 25 Febrero 2018, 07:22 AMTu única opción es usar software de terceros.

Ni con esas.




El enlace de aquí abajo apunta a un thread de Technet de un usuario que formuló la misma pregunta: '¿set Power Button action to "ask me what to do"?' , el thread es del 2009 y hay más de 70 respuestas/comentarios, el último comentario es del 2013 y... ni una sola solución al problema, ni con software de terceros, ni nada.


Y aquí otro en superuser.com:

Alternativas hay, en esos dos enlaces se mencionan varias, ¿pero una solución que reproduzca el comportamiento de Windows XP al pulsar el botón de apagado?... lamentablemente NO.

Quien quiera puede seguir investigando posibles soluciones en los resultados de Google, o buscar información para la programación con la API de Windows (si que hay una función para controlar el evento de solicitud de apagado, pero no es lo mismo) o el desarrollo de drivers en modo usuario o modo Kernel para interceptar la llamada al maldito botón de apagado, solo le van a llevar a caminos sin salida con muchas preguntas sin respuesta aparente.

Creo que lo mejor es desistir y empezar a asumir que no es posible hacerlo, al menos no de una forma guiada y viable.




Citar(solo usuarios avanzados)



(  PD: yo no escribí esa analfaburrada, ¿ok?. )

Saludos!
#1200
Cita de: #Aitor en 25 Febrero 2018, 07:27 AMla única pega es que en la subida genera una interfaz gráfica con dicha subida, ¿alguna forma de ocultar esa ventanita?

ese true no sé de qué es, al principio pensé que quizá era de la interfaz, le puse en false y dejó de funcionar.

No encuentro mención a ese boleano...

No encuentras mención a ese parámetro por que estás mirando la documentación de la sobrecarga equivocada...

EDITO: ups, coloqué mal el enlace. corregido.

CitarshowUI
   Type: System.Boolean
   True para mostrar el progreso de la operación; de lo contrario, False. El valor predeterminado es False.

Como puedes ver por ti mismo y como parece que al final ya te diste cuenta de esto, el valor booleano precisamente sirve para indicar si quieres mostrar la interfaz gráfica o no. al ponerlo en False no se muestra, y por eso te pareció que "dejó de funcionar".

consejo: no te acostumbres demasiado a usar los métodos del espacio de nombres "My.Computer" más de lo realmente necesario, son muy cómodos de utilizar pero a costa de un precio: no te permiten tener ningún control sobre tus acciones (como por ejemplo en este caso poder determinar el progreso de la operación de upload del archivo al FTP).




Cita de: #Aitor en 25 Febrero 2018, 07:27 AM
lejos de la propia página de microsoft, ¿recomiendas algún sitio o documento que pudiese ser de relevante utilidad?

No, MSDN is the way to learn. Se que es una pesadilla tan siquiera considerar el ponerse a leer de la A a la Z la MSDN (o docs.microsoft.com, la nueva MSDN), pero no vas a encontrar libro ni tutorial tan denso y lleno con toda la información que necesitas saber sobre cualquier aspecto relacionado con la programación .NET y la programación de Windows.

Alternativa y/o complementariamente te recomendaria tutoriales de pluralsight.com, los hay muy profesionales, muy bien estructurizados, y llenos de ejemplos (código fuente incluido), pero los vas a encontrar todos en perfecto Inglés, y a veces no tan perfecto ya que hay rusos y de todo, jeje, pero son unos gurús. Opcionálmente tienes páginas como codigofacilito.com y servicios similares en Español, pero considero que no son tan... bueh... no es lo mismo.

Aquí tienes varios enlaces con recursos de todo tipo para el aprendizade de .NET / VB.NET:
...aunque la mayoría apuntan a la página de MSDN, pero muchos otros no.

Y ten en cuenta que en la propia MSDN (y en docs.microsoft.com) hay guías básicas para principantes, para aprender VB.NET desde cero, desde una guía para guiarte en el desarrollo de tu primera aplicación...





Cita de: #Aitor en 25 Febrero 2018, 07:27 AMen cuánto al paradigma de orientación a objetos lo llevo bastante mal  :-[.

Quizás esto pueda ayudarte en algún aspecto sobre el concepto y la aplicación de clases (o tipos), y objetos:

( los enlaces que puse al final de ese comentario. )

...si no recuerdo mal, creo que en el contenido de esos artículos no se profundizaba en conceptos de la POO como la encapsulación, herencia, polimorfismo, abstracción, interfaces y etc, pero para todo ello tienes un artículo dedicado en MSDN con su significado y explicación y ejemplos para aprender y practicar, solo tienes que buscar las cosas en MSDN y empezar a estudiarlas.




Cita de: #Aitor en 25 Febrero 2018, 07:27 AMLas 7:16 ¿No duermes?   :silbar:

Dormir es antiproductivo, y todavía no se me ha pasado el efecto de la "droga"... no estás ayudando en eso. ;)

Un saludo!