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

#1501
Hola. trata de volver a publicar la imagen, creo que pusiste un enlace privado de tu cuenta en dropbox, o algo parecido.

De todas formas, ¿por casualidad te estarás refiriendo a la información "QuickInfo" de IntelliSense?:



En ese caso, creo que no hay opción para desactivarlo... según lo que comenta un trabajador de Microsoft aquí:

...De todas formas es una funcionalidad invaluable que aumenta mucho la productividad mostrando una descripción del miembro (la documentación XML), aparte de mostrar información de parámetros y demás (eso si que puedes desacivarlo), ¿por qué querrías desactivar algo tan importante?.

saludos!
#1502
Cita de: **Aincrad** en 27 Noviembre 2017, 19:10 PM
en internet encontre este codigo que me busca y subralla la palabra que busco en un RichTextbox .

code que encontre en internet:

Código (vbnet) [Seleccionar]
Dim TEMPORAL As String = RichTextBox1.Text
       RichTextBox1.Clear()
       RichTextBox1.Text = TEMPORAL
       Try
           Dim BUSQUEDA As String = InputBox("BUSCAR")
           Dim INDEX As Integer
           While INDEX < RichTextBox1.Text.LastIndexOf(BUSQUEDA)
               RichTextBox1.Find(BUSQUEDA, INDEX, RichTextBox1.TextLength, RichTextBoxFinds.None)
               RichTextBox1.SelectionBackColor = Color.DarkBlue
               INDEX = RichTextBox1.Text.IndexOf(BUSQUEDA, INDEX) + 1
           End While
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try


Ese código está mal, esta evaluación es incorrecta:
Citar
Código (vbnet) [Seleccionar]
While INDEX < RichTextBox1.Text.LastIndexOf(BUSQUEDA)

...piensa que ocurrirá si el índice es Cero, es decir, si la palabra que quieres buscar está en la posición 0 (dicho de otra forma: justo al principio). Ese algoritmo no lo "procesará".

Puedes hacer la prueba por ti mismo, escribe solo una letra en el RichTextBox, e intenta buscarla/resaltarla con ese código que cojiste por Internet.

La solución es facil:
Código (vbnet) [Seleccionar]
While INDEX <= RichTextBox1.Text.LastIndexOf(BUSQUEDA)

Pero de todas formas no tienes la necesidad de buscar en Internet, al principio de mi comentario te puse una función sencillita y de uso genérico que puedes usar, ¿has intentado usarla?, no requiere que copies nada más, solo esa función.




Cita de: **Aincrad** en 27 Noviembre 2017, 19:10 PM
Pero el Tu codigo esta SUPER . pero al intentar abrirlo con mi vb 2010 me salen miles de errores .

Suena algo lógico, ya que basicamente estás intentando hacer un downgrade de VS2017 a VS2010. En VS2017 el archivo de solución de proyecto tiene campos que VS2010 no soporta (basicamente por que antes no existian), y luego están los cambios de sintaxis en las versiones de VB, y la versión máxima de .NET framework que puedas utilizar en VS2010... (el proyecto de VS2017 usa .NET Framework 4.6 o 4.7, no me fijé, pero es una de esas dos)

Cita de: **Aincrad** en 27 Noviembre 2017, 19:10 PMbueno pase el code importante a un boton de mi proyecto pero me sale 1 error .

aqui te dejo el code que extraje y puse en mi proyecto.

EL ERROR ME DICE COLORIZEMATCHES NO ES UN MIENBRO DE SYSTEM.WINDOWS.FORM1.WINDOWSAPLICATION10

Supongo que cuando dices "el código importante" no te estás refiriendo solo a ese bloque de código de 20 lineas que acabas de mostrar, ¿verdad?. El código importante son todos los trozos de código que mostré en mi otro comentario. La función ColorizeMatches está definida en la clase RichTextBox_Extensions.vb... una de las clases del "código importante" que te mostré.

Te compartí el proyecto de VS2017 precisamente para intentar evitarte este tipo de confusiones, para que vieras como debe quedar todo escrito. Mira, haz una cosa, en el proyecto de VS2017 hay unos archivos con extensión .vb:


  • .\WindowsApp1\Extensions\IWin32Window_Extensions.vb
  • .\WindowsApp1\Extensions\RichTextBox_Extensions.vb
  • .\WindowsApp1\Interop\NativeMethods.vb
  • .\WindowsApp1\Interop\RedrawWindowFlags.vb
  • .\WindowsApp1\Interop\WindowsMessages.vb

Simplemente copia el código de esos archivos en un nuevo proyecto de VS2010. Así te debería funcionar. Es decir, creas esos archivos en un proyecto de VS2010 y copias el código. No es necesario crear las carpetas "Extensions" e "Interop" ni tampoco que le pongas el mismo nombre a los archivos .vb

PD: quizás también quieras copiar el código del form:

  • .\WindowsApp1\Interop\Form1.vb

Saludos!
#1503
Basicamente a tu código le falta usar la función RichTextBox.Find() junto a un búcle para ir iterando las posiciones de las ocurrencias encontradas en el texto. Lo que has intentado hacer recurriendo al uso de funciones de VB6 como InStr... ese no es el camino en .NET, debes evitar toda esa morralla (basura) de miembros de VB6, ya que son miembros que están ahí solo por compatibilidad, aunque estén escritos en código .NET son miembros cuyo código fuente es muy poco óptimo y limitado, todo esto ya te lo comenté en el pasado pero sigues sin hacer caso del consejo. :-/

Una solucoón que considero sencilla de aplicar para cualquier nivel de aprendizaje, podría ser la siguiente, a modo de función de uso genérico reutilizable para cualquier tipo de ocasión...

Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Find all the occurrences of the specified strings in the source <see cref="RichTextBox"/>
''' and set the foreground color, background color, and the font of any occurrence found.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <param name="rtb">
''' The source <see cref="RichTextBox"/>.
''' </param>
'''
''' <param name="find">
''' An Array containing the strings to match.
''' </param>
'''
''' <param name="ignoreCase">
''' Specifies how a text search is carried out.
''' </param>
'''
''' <param name="foreColor">
''' The foreground color to set for the matched strings.
''' </param>
'''
''' <param name="backColor">
''' The background color to set for the matched strings.
''' </param>
'''
''' <param name="font">
''' The font to set for the matched strings.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' Returns the total amount of occurrences found.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Shared Function InternalColorizeMatches(ByVal rtb As RichTextBox,
                                              ByVal find As String,
                                              ByVal ignoreCase As Boolean,
                                              ByVal foreColor As Color,
                                              ByVal backColor As Color,
                                              ByVal font As Font) As Integer

   If String.IsNullOrEmpty(find) Then
       Return 0
   End If

   ' Set letter-case criteria.
   Dim richTextBoxFinds As RichTextBoxFinds =
       If(ignoreCase, RichTextBoxFinds.None, RichTextBoxFinds.MatchCase)
   Dim stringComparison As StringComparison =
       If(ignoreCase, StringComparison.OrdinalIgnoreCase, StringComparison.Ordinal)

   ' Save the current caret position to restore it at the end.
   Dim caretPosition As Integer = rtb.SelectionStart

   Dim successCount As Integer = 0
   Dim textLength As Integer = rtb.TextLength
   Dim firstIndex As Integer = 0
   Dim lastIndex As Integer = rtb.Text.LastIndexOf(find, stringComparison)

   While (firstIndex <= lastIndex)
       Dim findIndex As Integer = rtb.Find(find, firstIndex, textLength, richTextBoxFinds)
       If (findIndex <> -1) Then
           successCount += 1
       Else
           Continue While
       End If

       rtb.SelectionColor = foreColor
       rtb.SelectionBackColor = backColor
       rtb.SelectionFont = font

       firstIndex = (rtb.Text.IndexOf(find, findIndex, stringComparison) + 1)
   End While ' (firstIndex <= lastIndex)

   ' Restore the caret position. Reset selection length to zero.
   rtb.Select(caretPosition, length:=0)

   Return successCount

End Function





Ese código de arriba resolvería el problema, con eso ya está, así que si lo prefieres puedes no seguir leyendo nada más de este comentario, pero si quieres aprender cosas nuevas entonces sigue leyendo...

...Para implementar las funcionalidades de búsqueda y resaltado de palabras, para hacerlo decentemente quiero decir, lo más apropiado sería empezar por bloquear temporálmente los mensajes de ventana de dibujado de la ventana del control afectado para optimizar (acelerar) el procedimiento de ejecución, y de paso al mismo tiempo intentar evitar indiseados efectos de flickering.

Bueno, ya que lo has intentado hacer por ti mismo, te voy a mostrar un ejemplo completo y funcional. Para hacerlo funcionar simplemente debes copia y pegar cada bloque de código que iré mostrando, en una nueva clase por cada bloque de código (pero no seas vago, lee algo del código para intentar aprender buenos hábitos de programación .NET). Si no entiendes algo, pregúntalo.

Debido al límite de caracteres del foro, me he visto obligado a recortar mucho código para eliminar practicamente casi toda la documentación XML...

Sin embargo, para hacerlo todo más facil y comprensible, abajo del todo de esta respuesta te dejo un proyecto hecho en Visual Studio 2017 con el código y su documentación al completo y que además contiene esta pequeña aplicación para demostrar la funcionalidad de búsqueda y resaltado de palabras:



También cabe mencionar que el código fuente de aquí abajo solo provee la funcionalidad de "Buscar todas las ocurrencias", pero no provee la funcionalidad de "Buscar siguiente palabra" hacia arriba/abajo etc, aunque si que tengo implementadas ese tipo de funciones en mi librería comercial... pero tampoco voy a regalarlo todo hecho, así que me limito a resolver la duda en concreto de "¿cómo buscar y colorear todas las ocurrencias de un string?".




NOTA INFORMATIVA:
---
EL SIGUIENTE CÓDIGO HA SIDO EXTRAIDO Y OFRECIDO DE FORMA GRATUITA A PARTIR DE MI FRAMEWORK COMERCIAL ELEKTROKIT FRAMEWORK , EL CUAL CONTIENE UNA INFINIDAD DE UTILIDADES ENFOCADAS A UNA AMPLIA VARIEDAD DE TEMÁTICAS Y ESCENARIOS EN LA PROGRAMACIÓN .NET, COMO ÉSTE. SI QUIEREN CONOCER MÁS ACERCA DEL PRODUCTO, PUEDEN ENCONTRARLO EN MI FIRMA DE USUARIO DEL FORO.
ESTE CÓDIGO SE PUEDE USAR Y MODIFICAR DE FORMA LIBRE COMO LES APETEZCA.

---





WindowsMessages.vb

Código (vbnet) [Seleccionar]
#Region " Windows Messages "

Namespace ElektroKit.Interop.Win32

   ' http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927%28v=vs.85%29.aspx
   Friend Enum WindowsMessages As Integer
       ' http://msdn.microsoft.com/en-us/library/windows/desktop/dd145219%28v=vs.85%29.aspx
       WM_SetRedraw = &HB
   End Enum

End Namespace

#End Region





RedrawWindowFlags.vb

Código (vbnet) [Seleccionar]
#Region " RedrawWindowFlags "

Namespace ElektroKit.Interop.Win32

   ' http://msdn.microsoft.com/en-us/library/windows/desktop/dd162911%28v=vs.85%29.aspx
   <Flags>
   Friend Enum RedrawWindowFlags As Integer
       Invalidate = &H1
       InternalPaint = &H2
       [Erase] = &H4
       Validate = &H8
       NoInternalPaint = &H10
       NoErase = &H20
       NoChildren = &H40
       AllChildren = &H80
       UpdateNow = &H100
       EraseNow = &H200
       Frame = &H400
       NoFrame = &H800
   End Enum

End Namespace

#End Region





NativeMethods.vb

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Security

#End Region

#Region " NativeMethods "

Namespace ElektroKit.Interop.Win32

   ' http://msdn.microsoft.com/en-us/library/ms182161.aspx
   Friend NotInheritable Class NativeMethods ' NOT <SuppressUnmanagedCodeSecurity>

#Region " Constructors "

       <DebuggerNonUserCode>
       Private Sub New()
       End Sub

#End Region

#Region " User32.dll "

       ' http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx
       <DllImport("User32.dll", SetLastError:=True)>
       Friend Shared Function SendMessage(ByVal hwnd As IntPtr,
                                          ByVal msg As Integer,
                                          ByVal wParam As IntPtr,
                                          ByVal lParam As IntPtr
       ) As IntPtr
       End Function

       ' http://msdn.microsoft.com/en-us/library/windows/desktop/dd162911%28v=vs.85%29.aspx
       <DllImport("User32.dll")>
       Friend Shared Function RedrawWindow(ByVal hwnd As IntPtr,
                                           ByVal lprcUpdate As IntPtr,
                                           ByVal hrgnUpdate As IntPtr,
                                           ByVal flags As RedrawWindowFlags
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

#End Region

   End Class

End Namespace

#End Region





IWin32Window_Extensions.vb

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.Runtime.CompilerServices

Imports ElektroKit.Interop.Win32

Imports WinForms = System.Windows.Forms

#End Region

#Region " IWin32Window Extensions "

Namespace ElektroKit.Extensions.[IWin32Window]

   ''' <summary>
   ''' Provides custom extension methods to use with <see cref="WinForms.IWin32Window"/> type.
   ''' </summary>
   <HideModuleName>
   Public Module Drawing

#Region " Public Extension Methods "

       ''' <summary>
       ''' Prevents the specified window from being redrawn.
       ''' <para></para>
       ''' By calling this method, it will disallow painting events from firing on the specified window.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Sub SuspendDrawing(ByVal sender As WinForms.IWin32Window)
           NativeMethods.SendMessage(sender.Handle, WindowsMessages.WM_SetRedraw, IntPtr.Zero, IntPtr.Zero)
       End Sub

       ''' <summary>
       ''' Allow the specified window to be redrawn.
       ''' <para></para>
       ''' By calling this method, it will allow painting events to be fired on the specified window.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Sub ResumeDrawing(ByVal sender As WinForms.IWin32Window)
           Drawing.ResumeDrawing(sender, True)
       End Sub

       ''' <summary>
       ''' Allow the specified window to be redrawn.
       ''' <para></para>
       ''' By calling this method, it will allow painting events to be fired on the specified window.
       ''' </summary>
       ''' <param name="redraw">
       ''' If set to <see langword="True"/>, causes the window to de redrawn
       ''' (similarly as calling <see cref="WinForms.Control.Refresh()"/> method).
       ''' </param>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Sub ResumeDrawing(ByVal sender As WinForms.IWin32Window, ByVal redraw As Boolean)
           NativeMethods.SendMessage(sender.Handle, WindowsMessages.WM_SetRedraw, New IntPtr(1), IntPtr.Zero)
           If (redraw) Then
               NativeMethods.RedrawWindow(sender.Handle, IntPtr.Zero, IntPtr.Zero,
                                          RedrawWindowFlags.Frame Or
                                          RedrawWindowFlags.UpdateNow Or
                                          RedrawWindowFlags.Invalidate)
           End If
       End Sub

#End Region

   End Module

End Namespace

#End Region





RichTextBox_Extensions.vb

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.ComponentModel
Imports System.Drawing
Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions

Imports WinForms = System.Windows.Forms

#End Region

#Region " RichTextBox Extensions "

Namespace ElektroKit.Extensions.[RichTextBox]

   ''' <summary>
   ''' Provides custom extension methods to use with <see cref="WinForms.RichTextBox"/> control.
   ''' </summary>
   <HideModuleName>
   Public Module WordFinding

#Region " Public Extension Methods "

#Region " Strings "

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String, ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, ignoreCase, foreColor, Nothing, Nothing)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String, ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, ignoreCase, foreColor, backColor, Nothing)

       End Function

       ''' <summary>
       ''' Matches all the occurrences of the specified string in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String, ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color,
                                       ByVal font As Font) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, ignoreCase, foreColor, backColor, font)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String(), ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, ignoreCase, foreColor, Nothing, Nothing)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String(), ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, ignoreCase, foreColor, backColor, Nothing)

       End Function

       ''' <summary>
       ''' Matches all the occurrences of the specified strings in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As String(), ByVal ignoreCase As Boolean,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color,
                                       ByVal font As Font) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, ignoreCase, foreColor, backColor, font)

       End Function

#End Region

#Region " Regular Expressions "

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex,
                                       ByVal foreColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, foreColor, Nothing, Nothing)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, foreColor, backColor, Nothing)

       End Function

       ''' <summary>
       ''' Matches all the occurrences of the specified regular expression in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex,
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color,
                                       ByVal font As Font) As Integer

           Return WordFinding.InternalColorizeMatches(sender, {find}, foreColor, backColor, font)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex(),
                                       ByVal foreColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, foreColor, Nothing, Nothing)

       End Function

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex(),
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, foreColor, backColor, Nothing)

       End Function

       ''' <summary>
       ''' Matches all the occurrences of any of the specified regular expressions in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Function ColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                       ByVal find As Regex(),
                                       ByVal foreColor As Global.System.Drawing.Color,
                                       ByVal backColor As Global.System.Drawing.Color,
                                       ByVal font As Font) As Integer

           Return WordFinding.InternalColorizeMatches(sender, find, foreColor, backColor, font)

       End Function

       ''' <summary>
       ''' Matches all the occurrences of the specified regular expression in the source <see cref="WinForms.RichTextBox"/>
       ''' and invokes the specified action for any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Sub IterateMatches(ByVal sender As WinForms.RichTextBox,
                                 ByVal find As Regex,
                                 ByVal action As Action(Of WinForms.RichTextBox, Match))

           WordFinding.InternalIterateMatches(sender, {find}, action)

       End Sub

       <DebuggerStepThrough>
       <Extension>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Sub IterateMatches(ByVal sender As WinForms.RichTextBox,
                                 ByVal find As Regex(),
                                 ByVal action As Action(Of WinForms.RichTextBox, Match))

           WordFinding.InternalIterateMatches(sender, find, action)

       End Sub

#End Region

#End Region

#Region " Private Methods "

       ''' <summary>
       ''' Find all the occurrences of the specified strings in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       ''' <returns>
       ''' Returns the total amount of occurrences found.
       ''' </returns>
       <DebuggerStepThrough>
       Private Function InternalColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                                ByVal find As String(), ByVal ignoreCase As Boolean,
                                                ByVal foreColor As Global.System.Drawing.Color,
                                                ByVal backColor As Global.System.Drawing.Color,
                                                ByVal font As Font) As Integer

           If (foreColor = Nothing) OrElse (foreColor = Color.Empty) Then
               foreColor = sender.ForeColor
           End If

           If (backColor = Nothing) OrElse (backColor = Color.Empty) Then
               backColor = sender.BackColor
           End If

           If (font Is Nothing) Then
               font = sender.Font
           End If

    ' Set letter-case criteria.
    Dim richTextBoxFinds As RichTextBoxFinds =
        If(ignoreCase, RichTextBoxFinds.None, RichTextBoxFinds.MatchCase)
    Dim stringComparison As StringComparison =
        If(ignoreCase, StringComparison.OrdinalIgnoreCase, StringComparison.Ordinal)

           ' Save the current caret position to restore it at the end.
           Dim caretPosition As Integer = sender.SelectionStart

           ' Suspend the control layout logic. And suspend painting events from firing.
           sender.SuspendLayout()
           ElektroKit.Extensions.IWin32Window.SuspendDrawing(sender)

           ' Colorize the matches.
           Dim successCount As Integer = 0
           Dim textLength As Integer = sender.TextLength
           For Each s As String In find

               If String.IsNullOrEmpty(s) Then
                   Continue For
               End If

               Dim firstIndex As Integer = 0
               Dim lastIndex As Integer = sender.Text.LastIndexOf(s, stringComparison)

               While (firstIndex <= lastIndex)
                   Dim findIndex As Integer = sender.Find(s, firstIndex, textLength, richTextBoxFinds)
                   If (findIndex <> -1) Then
                       successCount += 1
                   Else
                       Continue While
                   End If

                   sender.SelectionColor = foreColor
                   sender.SelectionBackColor = backColor
                   sender.SelectionFont = font

                   firstIndex = (sender.Text.IndexOf(s, findIndex, stringComparison) + 1)
               End While ' (firstIndex <= lastIndex)

           Next s

           ' Restore the caret position. Reset selection length to zero.
           sender.Select(caretPosition, length:=0)

           ' Restore the control layout logic. And resume painting events.
           sender.ResumeLayout()
           ElektroKit.Extensions.IWin32Window.ResumeDrawing(sender, redraw:=True)

           Return successCount

       End Function

       ''' <summary>
       ''' Find all the occurrences of the specified regular expressions in the source <see cref="WinForms.RichTextBox"/>
       ''' and set the foreground color, background color, and the font of any occurrence found.
       ''' </summary>
       ''' <returns>
       ''' Returns the total amount of occurrences found.
       ''' </returns>
       <DebuggerStepThrough>
       Private Function InternalColorizeMatches(ByVal sender As WinForms.RichTextBox,
                                                ByVal find As Regex(),
                                                ByVal foreColor As Global.System.Drawing.Color,
                                                ByVal backColor As Global.System.Drawing.Color,
                                                ByVal font As Font) As Integer

           If (foreColor = Nothing) OrElse (foreColor = Color.Empty) Then
               foreColor = sender.ForeColor
           End If

           If (backColor = Nothing) OrElse (backColor = Color.Empty) Then
               backColor = sender.BackColor
           End If

           If (font Is Nothing) Then
               font = sender.Font
           End If

           ' Save the current caret position to restore it at the end.
           Dim caretPosition As Integer = sender.SelectionStart

           ' Suspend the control layout logic. And suspend painting events from firing.
           sender.SuspendLayout()
           ElektroKit.Extensions.IWin32Window.SuspendDrawing(sender)

           ' Colorize the matches.
           Dim successCount As Integer = 0
           For Each rgx As Regex In find

               Dim matches As MatchCollection = rgx.Matches(sender.Text, rgx.Options)
               successCount += matches.Count

               For Each m As Match In matches
                   sender.Select(m.Index, m.Length)
                   sender.SelectionColor = foreColor
                   sender.SelectionBackColor = backColor
                   sender.SelectionFont = font
               Next m

           Next rgx

           ' Restore the caret position. Reset selection length to zero.
           sender.Select(caretPosition, length:=0)

           ' Restore the control layout logic. And resume painting events.
           sender.ResumeLayout()
           ElektroKit.Extensions.IWin32Window.ResumeDrawing(sender, redraw:=True)

           Return successCount

       End Function

       ''' <summary>
       ''' Matches all the occurrences of the specified regular expression in the source <see cref="WinForms.RichTextBox"/>
       ''' and invokes the specified action for any occurrence found.
       ''' </summary>
       <DebuggerStepThrough>
       Private Sub InternalIterateMatches(ByVal sender As WinForms.RichTextBox,
                                          ByVal find As Regex(),
                                          ByVal action As Action(Of WinForms.RichTextBox, Match))

           ' Suspend the control layout logic. And suspend painting events from firing.
           sender.SuspendLayout()
           ElektroKit.Extensions.IWin32Window.SuspendDrawing(sender)

           ' Iterate the matches.
           For Each rgx As Regex In find
               Dim matches As MatchCollection = rgx.Matches(sender.Text, rgx.Options)

               For Each m As Match In matches
                   action.Invoke(sender, m)
               Next m
           Next rgx

           ' Restore the control layout logic. And resume painting events.
           sender.ResumeLayout()
           ElektroKit.Extensions.IWin32Window.ResumeDrawing(sender, redraw:=True)

       End Sub

#End Region

   End Module

End Namespace

#End Region





EJEMPLOS DE USO REAL-WORLD

Form1.vb

Código (vbnet) [Seleccionar]
Class Form1

   ' ...

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim rtb As RichTextBox = Me.RichTextBox1

       ' Reset selection.
       With rtb
           .SelectAll()
           .SelectionColor = .ForeColor
           .SelectionBackColor = .BackColor
           .SelectionFont = .Font
           .Select(0, 0)
       End With

       ' Perform a new selection.
       Dim find As String = Me.TextBox1.Text ' The text to find.
       Dim ignoreCase As Boolean = Me.CheckBox1.Checked
       Dim forecolor As Color = Color.LimeGreen
       Dim backcolor As Color = rtb.SelectionBackColor
       Dim font As Font = rtb.SelectionFont

       Dim occurrences As Integer = rtb.ColorizeMatches(find, ignoreCase, forecolor, backcolor, font)
       Me.Label1.Text = String.Format("{0} occurrences", occurrences)

   End Sub

   ' ...

End Class


EJEMPLOS DE USO DE LAS SOBRECARGAS PARA STRING

Código (vbnet) [Seleccionar]
Dim find As String = "Hello World"
Dim forecolor As Color = Color.Red

RichTextBox1.ColorizeMatches(find, True, forecolor)


Código (vbnet) [Seleccionar]
Dim find As String = "Hello World"
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black

RichTextBox1.ColorizeMatches(find, True, forecolor, backcolor)


Código (vbnet) [Seleccionar]
Dim find As String = "Hello World"
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

RichTextBox1.ColorizeMatches(find, True, forecolor, backcolor, font)


Código (vbnet) [Seleccionar]
Dim find As String() = {"Hello", "World"}
Dim forecolor As Color = Color.Red

RichTextBox1.ColorizeMatches(find, True, forecolor)


Código (vbnet) [Seleccionar]
Dim find As String() = {"Hello", "World"}
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black

RichTextBox1.ColorizeMatches(find, True, forecolor, backcolor)


Código (vbnet) [Seleccionar]
Dim find As String() = {"Hello", "World"}
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

RichTextBox1.ColorizeMatches(find, True, forecolor, backcolor, font)


EJEMPLOS DE USO DE LAS SOBRECARGAS PARA EXPRESIONES REGULARES

Código (vbnet) [Seleccionar]
Dim find As New Regex("[0-9]", RegexOptions.None)
Dim forecolor As Color = Color.Red

RichTextBox1.ColorizeMatches(rgx, forecolor)


Código (vbnet) [Seleccionar]
Dim find As New Regex("[0-9]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black

RichTextBox1.ColorizeMatches(rgx, forecolor, backcolor)


Código (vbnet) [Seleccionar]
Dim find As New Regex("[0-9]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

RichTextBox1.ColorizeMatches(rgx, forecolor, backcolor, font)


Código (vbnet) [Seleccionar]
Dim rgx1 As New Regex("[0-9]", RegexOptions.None)
Dim rgx2 As New Regex("[a-z]", RegexOptions.None)
Dim forecolor As Color = Color.Red

RichTextBox1.ColorizeMatches({rgx1, rgx2}, forecolor)


Código (vbnet) [Seleccionar]
Dim rgx1 As New Regex("[0-9]", RegexOptions.None)
Dim rgx2 As New Regex("[a-z]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black

RichTextBox1.ColorizeMatches({rgx1, rgx2}, forecolor, backcolor)


Código (vbnet) [Seleccionar]
Dim rgx1 As New Regex("[0-9]", RegexOptions.None)
Dim rgx2 As New Regex("[a-z]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

RichTextBox1.ColorizeMatches({rgx1, rgx2}, forecolor, backcolor, font)


Código (vbnet) [Seleccionar]
Dim rgx As New Regex("[0-9]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

Dim action As New Action(Of RichTextBox, Match)(
   Sub(rtb As RichTextBox, m As Match)
       With rtb
           .Select(m.Index, m.Length)
           .SelectionColor = forecolor
           .SelectionBackColor = backcolor
           .SelectionFont = font
       End With
   End Sub)
   
RichTextBox1.IterateMatches(rgx, action)


Código (vbnet) [Seleccionar]
Dim rgx1 As New Regex("[0-9]", RegexOptions.None)
Dim rgx2 As New Regex("[a-z]", RegexOptions.None)
Dim forecolor As Color = Color.Red
Dim backcolor As Color = Color.Black
Dim font As New Font(RichTextBox1.Font.FontFamily, RichTextBox1.Font.Size, FontStyle.Italic)

Dim action As New Action(Of RichTextBox, Match)(
   Sub(rtb As RichTextBox, m As Match)
       With rtb
           .Select(m.Index, m.Length)
           .SelectionColor = forecolor
           .SelectionBackColor = backcolor
           .SelectionFont = font
       End With
   End Sub)
   
RichTextBox1.IterateMatches({rgx1, rgx2}, action)





SOLUCIÓN PARA VISUAL STUDIO 2017

( contiene todo el código fuente de arriba, documentado al completo. )



Nota: los colores de texto y fondo de los controles no se verán igual que en la imagen GIF de arriba, así que es probable que necesiten ajustar dichos colores.
#1505
Scripting / Re: Modificar parametros de red
26 Noviembre 2017, 13:29 PM
Citarnetsh ip add winsservers "Ethernet" ip

Según los ejemplos de la documentación de Microsoft, creo que la sintaxis correcta sería la siguiente:
... add name Name="nombre" IP={x.x.x.x}
( prueba también sin los brackets {} por si acaso. )

Fuente:
...Échale un vistazo a la sintaxis y a los ejemplos que ponen.

Saludos
#1506
Cita de: SrTrp en 26 Noviembre 2017, 05:21 AMque al presionar el boton poner la ventana de google chrome en 700 de ancho y 700 de altura y ponerla en la posisión x=0 y y =0

Mediante la función MoveWindow  de la API de Windows puedes llevar a cabo ambas cosas, es decir, mover la ventana y también redimensionarla. A continuación te muestro un ejemplo completo:

NOTA INFORMATIVA:
---
EL SIGUIENTE CÓDIGO HA SIDO EXTRAIDO Y OFRECIDO DE FORMA GRATUITA A PARTIR DE MI FRAMEWORK COMERCIAL ELEKTROKIT FRAMEWORK , EL CUAL CONTIENE UNA INFINIDAD DE UTILIDADES ENFOCADAS A UNA AMPLIA VARIEDAD DE TEMÁTICAS Y ESCENARIOS EN LA PROGRAMACIÓN .NET, COMO ÉSTE. SI QUIEREN CONOCER MÁS ACERCA DEL PRODUCTO, PUEDEN ENCONTRARLO EN MI FIRMA DE USUARIO DEL FORO.
ESTE CÓDIGO SE PUEDE USAR Y MODIFICAR DE FORMA LIBRE COMO LES APETEZCA.

---

Definición de estructuras nativas ( RECT ):

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.Diagnostics
Imports System.Drawing
Imports System.Runtime.InteropServices

#End Region

#Region " NativeRectangle (RECT) "

Namespace ElektroKit.Interop.Win32.Types

   ''' <summary>
   ''' Defines the coordinates of the upper-left and lower-right corners of a rectangle.
   ''' </summary>
   ''' <remarks>
   ''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd162897%28v=vs.85%29.aspx"/>
   ''' <para></para>
   ''' <see href="http://www.pinvoke.net/default.aspx/Structures/rect.html"/>
   ''' </remarks>
   <StructLayout(LayoutKind.Sequential)>
   <DebuggerStepThrough>
   Public Structure NativeRectangle

#Region " Auto-implemented Properties "

       ''' <summary>
       ''' Gets or sets the x-coordinate of the upper-left corner of the rectangle.
       ''' </summary>
       Public Property Left As Integer

       ''' <summary>
       ''' Gets or sets the y-coordinate of the upper-left corner of the rectangle.
       ''' </summary>
       Public Property Top As Integer

       ''' <summary>
       ''' Gets or sets the x-coordinate of the lower-right corner of the rectangle.
       ''' </summary>
       Public Property Right As Integer

       ''' <summary>
       ''' Gets or sets the y-coordinate of the lower-right corner of the rectangle.
       ''' </summary>
       Public Property Bottom As Integer

#End Region

#Region " Constructors "

       ''' <summary>
       ''' Initializes a new instance of the <see cref="NativeRectangle"/> struct.
       ''' </summary>
       Public Sub New(ByVal left As Integer, ByVal top As Integer,
                      ByVal right As Integer, ByVal bottom As Integer)

           Me.Left = left
           Me.Top = top
           Me.Right = right
           Me.Bottom = bottom

       End Sub

       ''' <summary>
       ''' Initializes a new instance of the <see cref="NativeRectangle"/> struct.
       ''' </summary>
       Public Sub New(ByVal rect As Rectangle)
           Me.New(rect.Left, rect.Top, rect.Right, rect.Bottom)
       End Sub

#End Region

#Region " Operator Conversions "

       ''' <summary>
       ''' Performs an implicit conversion from <see cref="NativeRectangle"/> to <see cref="Rectangle"/>.
       ''' </summary>
       Public Shared Widening Operator CType(ByVal rect As NativeRectangle) As Rectangle
           Return New Rectangle(rect.Left, rect.Top, (rect.Right - rect.Left), (rect.Bottom - rect.Top))
       End Operator

       ''' <summary>
       ''' Performs an implicit conversion from <see cref="Rectangle"/> to <see cref="NativeRectangle"/>.
       ''' </summary>
       Public Shared Widening Operator CType(rect As Rectangle) As NativeRectangle
           Return New NativeRectangle(rect)
       End Operator

#End Region

   End Structure

End Namespace

#End Region


Definición de funciones nativas de Windows:

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Security

Imports ElektroKit.Interop.Win32.Types

#End Region

#Region " NativeMethods "

Namespace ElektroKit.Interop.Win32

   ''' <summary>
   ''' Platform Invocation methods (P/Invoke), access unmanaged code.
   ''' <para></para>
   ''' This class does not suppress stack walks for unmanaged code permission.
   ''' <see cref="SuppressUnmanagedCodeSecurityAttribute"/> must not be applied to this class.
   ''' <para></para>
   ''' This class is for methods that can be used anywhere because a stack walk will be performed.
   ''' </summary>
   ''' <remarks>
   ''' <see href="http://msdn.microsoft.com/en-us/library/ms182161.aspx"/>
   ''' </remarks>
   Public NotInheritable Class NativeMethods ' <SuppressUnmanagedCodeSecurity>

#Region " Constructors "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Prevents a default instance of the <see cref="NativeMethods"/> class from being created.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerNonUserCode>
       Private Sub New()
       End Sub

#End Region

#Region " User32.dll Functions "

       ''' <summary>
       ''' Retrieves the dimensions of the bounding rectangle of the specified window.
       ''' <para></para>
       ''' The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
       ''' </summary>
       ''' <remarks>
       ''' <see href="http://msdn.microsoft.com/es-es/library/windows/desktop/ms633519%28v=vs.85%29.aspx"/>
       ''' </remarks>
       ''' <param name="hwnd">
       ''' A <see cref="IntPtr"/> handle to the window.
       ''' </param>
       ''' <param name="refRect">
       ''' A pointer to a <see cref="NativeRectangle"/> structure that receives the screen coordinates of the
       ''' upper-left and lower-right corners of the window.
       ''' </param>
       ''' <returns>
       ''' <see langword="True"/> if the function succeeds, <see langword="False"/> otherwise.
       ''' </returns>
       <DllImport("User32.dll", SetLastError:=True)>
       Public Shared Function GetWindowRect(ByVal hwnd As IntPtr,
                                      <Out> ByRef refRect As NativeRectangle
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

       ''' <summary>
       ''' Retrieves the dimensions of the bounding rectangle of the specified window.
       ''' <para></para>
       ''' The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
       ''' </summary>
       <DllImport("User32.dll", SetLastError:=True)>
       Public Shared Function GetWindowRect(ByVal hwnd As HandleRef,
                                      <Out> ByRef refRect As NativeRectangle
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

       ''' <summary>
       ''' Changes the position and dimensions of the specified window.
       ''' <para></para>
       ''' For a top-level window, the position and dimensions are relative to the upper-left corner of the screen.
       ''' <para></para>
       ''' For a child window, they are relative to the upper-left corner of the parent window's client area.
       ''' </summary>
       ''' <remarks>
       ''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms633534%28v=vs.85%29.aspx"/>
       ''' </remarks>
       ''' <param name="hwnd">
       ''' A handle to the window.
       ''' </param>
       ''' <param name="x">
       ''' The new position of the left side of the window.
       ''' </param>
       ''' <param name="y">
       ''' The new position of the top of the window.
       ''' </param>
       ''' <param name="width">
       ''' The new width of the window.
       ''' </param>
       ''' <param name="height">
       ''' The new height of the window.
       ''' </param>
       ''' <param name="repaint">
       ''' Indicates whether the window is to be repainted.
       ''' <para></para>
       ''' If this parameter is <see langword="True"/>, the window receives a message.
       ''' If the parameter is <see langword="False"/>, no repainting of any kind occurs.
       ''' <para></para>
       ''' This applies to the client area, the nonclient area (including the title bar and scroll bars),
       ''' and any part of the parent window uncovered as a result of moving a child window.
       ''' </param>
       ''' <returns>
       ''' <see langword="True"/> if the function succeeds, <see langword="False"/> otherwise.
       ''' </returns>
       <DllImport("User32.dll", SetLastError:=True)>
       Public Shared Function MoveWindow(ByVal hwnd As IntPtr,
                                         ByVal x As Integer,
                                         ByVal y As Integer,
                                         ByVal width As Integer,
                                         ByVal height As Integer,
         <MarshalAs(UnmanagedType.Bool)> ByVal repaint As Boolean
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

       ''' <summary>
       ''' Changes the position and dimensions of the specified window.
       ''' <para></para>
       ''' For a top-level window, the position and dimensions are relative to the upper-left corner of the screen.
       ''' <para></para>
       ''' For a child window, they are relative to the upper-left corner of the parent window's client area.
       ''' </summary>
       <DllImport("User32.dll", SetLastError:=True)>
       Public Shared Function MoveWindow(ByVal hwnd As HandleRef,
                                         ByVal x As Integer,
                                         ByVal y As Integer,
                                         ByVal width As Integer,
                                         ByVal height As Integer,
         <MarshalAs(UnmanagedType.Bool)> ByVal repaint As Boolean
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

#End Region

   End Class

End Namespace

#End Region


Definición de wrappers para las funciones nativas:

Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Security

Imports ElektroKit.Interop.Win32
Imports ElektroKit.Interop.Win32.Types

#End Region

''' <summary>
''' Provides utilities for window automation.
''' </summary>
<DebuggerStepThrough>
Public NotInheritable Class WindowAutomationUtil

   ''' <summary>
   ''' Set the position for the main window of the specified process.
   ''' </summary>
   ''' <param name="process">
   ''' The source <see cref="Process"/>.
   ''' </param>
   ''' <param name="position">
   ''' The new window position.
   ''' </param>
   ''' <returns>
   ''' <see langword="True"/> if successful; <see langword="False"/> otherwise.
   ''' </returns>
   Public Shared Function MoveWindow(ByVal process As Process,
                                     ByVal position As Point) As Boolean

       If (process Is Nothing) Then
           Throw New ArgumentException(message:="No process found with the specified name.", paramName:="processName")

       Else
           Dim unmanagedRect As NativeRectangle         ' Windows Rectangle definition.
           Dim managedRect As Rectangle = unmanagedRect ' .NET Rectangle definition.

           Dim result As Boolean
           Dim win32err As Integer

           result = NativeMethods.GetWindowRect(process.MainWindowHandle, unmanagedRect)
           win32err = Marshal.GetLastWin32Error()
           If Not (result) Then
               Throw New Win32Exception(win32err)
           End If

           result = NativeMethods.MoveWindow(process.MainWindowHandle,
                                             position.X, position.Y,
                                             managedRect.Width, managedRect.Height,
                                             repaint:=True)
           win32err = Marshal.GetLastWin32Error()
           If Not (result) Then
               Throw New Win32Exception(win32err)
           End If

           Return result

       End If

   End Function

   ''' <summary>
   ''' Set the size for the main window of the specified process.
   ''' </summary>
   ''' <param name="process">
   ''' The source <see cref="Process"/>.
   ''' </param>
   ''' <param name="size">
   ''' The new window size.
   ''' </param>
   ''' <returns>
   ''' <see langword="True"/> if successful; <see langword="False"/> otherwise.
   ''' </returns>
   Public Shared Function ResizeWindow(ByVal process As Process,
                                       ByVal size As Size) As Boolean

       If (process Is Nothing) Then
           Throw New ArgumentException(message:="No process found with the specified name.", paramName:="processName")

       Else
           Dim unmanagedRect As NativeRectangle         ' Windows Rectangle definition.
           Dim managedRect As Rectangle = unmanagedRect ' .NET Rectangle definition.

           Dim result As Boolean
           Dim win32err As Integer

           result = NativeMethods.GetWindowRect(process.MainWindowHandle, unmanagedRect)
           win32err = Marshal.GetLastWin32Error()
           If Not (result) Then
               Throw New Win32Exception(win32err)
           End If

           result = NativeMethods.MoveWindow(process.MainWindowHandle,
                                             managedRect.Left, managedRect.Top,
                                             size.Width, size.Height,
                                             repaint:=True)
           win32err = Marshal.GetLastWin32Error()
           If Not (result) Then
               Throw New Win32Exception(win32err)
           End If

           Return result

       End If

   End Function

End Class


Modo de empleo:
Código (vbnet) [Seleccionar]
Dim p As Process = Process.GetProcessesByName("notepad").FirstOrDefault()

Dim newPos As New Point(x:=0, y:=0)
Dim newSize As New Size(width:=256, height:=256)

WindowAutomationUtil.MoveWindow(p, newPos)
WindowAutomationUtil.ResizeWindow(p, newSize)





Nótese que para el análisis de ventanas con borde invisible de Windows 10 quizás quieras perfeccionar un poco más el algoritmo, según cuales sean tus necesidades. En ese caso primero debes comprobar que el sistema operativo en ejecución sea Windows 10, y posteriormente llamar a la función Win32 DwmGetWindowAttribute.

Te muestro un ejemplo, pero ojo, tómalo a modo de pseudo-código, este código no es funcional ya que no puedo compartir el resto de definiciones necesarias por falta de espacio:

Determinar si el sistema operativo es Windows 10:
Código (vbnet) [Seleccionar]

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Gets a value that determines whether the current operating system is <c>Windows 10</c>.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' If IsWin10 Then
       '''     Throw New PlatformNotSupportedException("This application cannot run under Windows 10.")
       ''' End If
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       Public Shared ReadOnly Property IsWin10 As Boolean
           <DebuggerStepThrough>
           Get
               Return (Environment.OSVersion.Platform = PlatformID.Win32NT) AndAlso (InternalIsWin10())
           End Get
       End Property

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Determines whether the current operating system is <c>Windows 10</c>.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <remarks>
       ''' <see href="http://msdn.microsoft.com/es-es/library/windows/desktop/dn424972%28v=vs.85%29.aspx"/>
       ''' </remarks>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' <see langword="True"/> if the current operating system is <c>Windows 10</c>; otherwise, <see langword="False"/>.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Private Shared Function InternalIsWin10() As Boolean

           Using reg As RegistryKey = Microsoft.Win32.Registry.LocalMachine.
                                      OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", writable:=False)

               Dim productName As String = DirectCast(reg.GetValue("ProductName", "Empty", RegistryValueOptions.None), String)
               Return productName.StartsWith("Windows 10", StringComparison.OrdinalIgnoreCase)

           End Using

       End Function


Metogología alternativa (menos universal y más tediosa por el requisito del archivo de manifiesto):

Obtener tamaño de ventana:
Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Gets the non-client area of a window.
   ''' <para></para>
   ''' This method supports a <c>Windows 10</c> window with invisible border or shadows.
   ''' </summary>
   ''' <param name="hwnd">
   ''' A handle to the window.
   ''' </param>
   ''' <returns>
   ''' The resulting non-client area of the window.
   ''' </returns>
   <DebuggerStepThrough>
   Public Shared Function GetRealWindowRect(ByVal hwnd As IntPtr) As Rectangle

       Dim rc As NativeRectangle = Rectangle.Empty

       If (IsWin10) Then
           Dim hResult As Integer
           hResult = NativeMethods.DwmGetWindowAttribute(hwnd, ElektroKit.Interop.Win32.Enums.DwmWindowAttribute.ExtendedFrameBounds, rc, Marshal.SizeOf(rc)) ' DwmWindowAttribute.ExtendedFrameBounds = 9
           If (DirectCast(hResult, ElektroKit.Interop.Win32.Enums.HResult) <> ElektroKit.Interop.Win32.Enums.HResult.S_OK) Then ' HResult.S_OK = 0
               Marshal.ThrowExceptionForHR(hResult)
           End If

       Else
           Dim result As Boolean
           Dim win32Err As Integer
           result = NativeMethods.GetWindowRect(hwnd, rc)
           win32Err = Marshal.GetLastWin32Error()
           If Not (result) Then
               Throw New Win32Exception(win32Err)
           End If

       End If

       Return rc

   End Function

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Gets the non-client area of a window.
   ''' <para></para>
   ''' This method supports a <c>Windows 10</c> window with invisible border or shadows.
   ''' </summary>
   ''' <param name="window">
   ''' The source window.
   ''' </param>
   ''' <returns>
   ''' The resulting non-client area of the window.
   ''' </returns>
   <DebuggerStepThrough>
   Public Shared Function GetRealWindowRect(ByVal window As IWin32Window) As Rectangle
       Return GetRealWindowRect(window.Handle)
   End Function

   ''' <summary>
   ''' Gets the non-client area of a <see cref="Form"/> window.
   ''' <para></para>
   ''' This method supports a <c>Windows 10</c> <see cref="Form"/> window with invisible border or shadows.
   ''' </summary>
   ''' <param name="form">
   ''' The source <see cref="Form"/>.
   ''' </param>
   ''' <returns>
   ''' The resulting non-client area of the <see cref="Form"/> window.
   ''' </returns>
   <DebuggerStepThrough>
   Public Shared Function GetRealWindowRect(ByVal form As Form) As Rectangle
       Return GetRealWindowRect(DirectCast(form, IWin32Window).Handle)
   End Function


Saludos.
#1507
.NET (C#, VB.NET, ASP) / Re: 7-ZIp
25 Noviembre 2017, 20:25 PM
Cita de: okik en 25 Noviembre 2017, 19:55 PM
Tras examinar el código de @Elektro el cual establece un enlace entre Explorer.exe y nuestra apliación, no me funcionaba entre otras por errores en  las líneas,

IEnumerable<string> filepath = (from item in itemsitem.Path);

ShellWindows windows = (ShellWindows)((IShellDispatch6)shell).Windows();

Entonces decidí buscar alguna alternativa más simple, que al final ha sido esta:

NOTA:
Para que funciona
- Dirígete a "Agregar Referencia..." y agrega las librerías:

c:\windows\system32\shdocvw.dll
c:\windows\system32\shell32.dll

Eso viene a ser lo que yo dije (solo que de otro modo) al final de mi respuesta:

Cita de: Eleкtro en 21 Noviembre 2017, 20:33 PM
El código de arriba requiere una referencia a las sigueintes librerías COM:
  • Microsoft Internet Controls
  • Microsoft shell Controls And Automation

Obviando el hecho de que cometí un pequeño error ortográfico, eso debería ser una explicación suficiente de entender para alguien que tenga un mínimo de experiencia y progresión en el manejo de Visual Studio (estamos hablando de añadir una simple referencia a una librería, es básico y una tarea cotidiana), pero si uno no sabe hacerlo por que todavía no ha llegado a ese punto del aprendizaje de la IDE pues siempre puede preguntar como hacerlo, pero no, hay algunos que directamente prefieren no leer la respuesta, decir que es "tediosa" y no intentar nada... pues mal vamos. (si, sigo bastante molesto por el tema ese xD)

 





Saludos
#1508
Scripting / Re: Leer Archivo en vbScript
25 Noviembre 2017, 17:14 PM
En el foro no se hacen tareas, muestra lo que hayas intentado hacer por ti solo.

De todas formas aquí tienes toda la información necesaria (con ejemplos de código incluido) para llevar a cabo el ejercicio:

‣ Análisis (parsing) de argumentos:

‣ Evaluación de extensión de archivo:

‣ Lectura de contenido linea a linea en archivo de texto plano:

‣ Escritura de datos en archivo local:

Saludos
#1509
Scripting / Re: Aprendizaje de archivos bat
25 Noviembre 2017, 16:22 PM
Aquí:

...y también puedes escribir el comando HELP en la CMD.

Saludos
#1510
Scripting / Re: Ayuda en Programacion En C
25 Noviembre 2017, 16:16 PM
¿Qué se supone que tiene que ver esto con programación en el lenguaje C?.

Respondiendo a tu pregunta (en caso de que la haya entendido bien): debes usar el comando Echo para escribir el contenido/los comandos en el archivo de salida:

Código (dos) [Seleccionar]
(
 Echo:Start /B "cyberpuerta" "https://www.cyberpuerta.mx/"
)>"%TEMP%\BTemp01.bat"


Saludos