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

#7851
Scripting / Re: Sobre archivos .Bat
14 Octubre 2013, 15:23 PM
For /F

-> http://ss64.com/nt/for_f.html

For /F %%X in ('Ver') Do ()...

Saludos
#7852
Scripting / Re: cambiar icono de archivo .vbs
14 Octubre 2013, 11:31 AM
Cualquier icono de extensión de archivo se puede modificar mediante el registro, pero esa técnica no sirve para lo que el usuario necesita, porque implica estas cosas:

1. Disponer de un archivo de icono por separado, es decir, el archivo VBS y el archivo ICO (o depender de un archivo del sistema de Windows, las DLL de Windows contienen todos los iconos del sistema)

2. Ejecutar el código necesario para modificar el registro, es decir, habría que ejecutar un script en la máquina para modificar la ruta del icono de la extensión del archivo, en el registro.

3. Disponer de permisos de usuario para poder modificar claves del registro.

4. Reiniciar el PC o reiniciar Explorer y posíblemente vaciar la caché de iconos para que los cambios surgan efecto al instante.

El usuario habla de modificar el archivo de forma permanente sin realizar otros cambios, símplemente mover el archivo a otro PC y que tenga el icono, y eso requiere convertirlo a executable, que es el que puede almacenar el recurso de icono que deseemos.

Saludos!
#7853
Añadir la funcionalidad 'Find Next' y 'Find Previous' en un RichTextBox,
Le añadi soporte para poder utilizar expresiones regulares y también para poder resaltar el text seleccionado en colores :).

[youtube=640,360]http://www.youtube.com/watch?v=mWRMdlC5DH8[/youtube]

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

   ' [ FindNext ]
   '
   ' //By Elektro H@cker
   '
   ' Examples :
   '
   ' RichTextBox1.Text = "Hello World!, Hello World!, Hello World!"
   '
   ' FindNext(RichTextBox1, "hello", FindDirection.Down, RegexOptions.IgnoreCase, Color.LightBlue, Color.Black)
   ' FindNext(RichTextBox1, "hello", FindDirection.Up, RegexOptions.IgnoreCase, Color.Red, Color.Black)
   '
   ' Private Sub RichTextBox_Enter(sender As Object, e As EventArgs) ' Handles RichTextBox1.Enter
   '    ' Restore Selection Colors before search next match.
   '    sender.SelectionBackColor = DefaultBackColor
   '    sender.SelectionColor = DefaultForeColor
   ' End Sub

   Public Enum FindDirection
       Up = 0
       Down = 1
   End Enum

   ' FindNext
   Private Sub FindNext(ByVal [Control] As RichTextBox, _
                              ByVal SearchText As String, _
                              ByVal Direction As FindDirection, _
                              Optional ByVal IgnoreCase As System.Text.RegularExpressions.RegexOptions = RegexOptions.None, _
                              Optional ByVal Highlight_BackColor As Color = Nothing, _
                              Optional ByVal Highlight_ForeColor As Color = Nothing)

       If [Control].TextLength = 0 Then Exit Sub

       ' Start searching at 'SelectionStart'.
       Dim Search_StartIndex As Integer = [Control].SelectionStart

       ' Stores the MatchIndex count
       Dim matchIndex As Integer = 0

       ' Flag to check if it's first find call
       Static First_Find As Boolean = True

       ' Checks to don't ommit the selection of first match if match index is exactly at 0 start point.
       If First_Find _
           AndAlso Search_StartIndex = 0 _
           AndAlso Direction = FindDirection.Down Then
           Search_StartIndex = -1
           First_Find = False
       ElseIf Not First_Find _
           AndAlso Search_StartIndex = 0 _
           AndAlso Direction = FindDirection.Down Then
           First_Find = False
           Search_StartIndex = 0
       End If

       ' Store the matches
       Dim matches As System.Text.RegularExpressions.MatchCollection = _
           System.Text.RegularExpressions.Regex.Matches([Control].Text, _
                                                        SearchText, _
                                                        IgnoreCase Or If(Direction = FindDirection.Up, _
                                                                         RegexOptions.RightToLeft, _
                                                                         RegexOptions.None))

       If matches.Count = 0 Then First_Find = True : Exit Sub

       ' Restore Highlight colors of previous selection
       [Control].SelectionBackColor = [Control].BackColor
       [Control].SelectionColor = [Control].ForeColor

       ' Set next selection Highlight colors
       If Highlight_BackColor = Nothing Then Highlight_BackColor = [Control].BackColor
       If Highlight_ForeColor = Nothing Then Highlight_ForeColor = [Control].ForeColor

       ' Set the match selection
       For Each match As System.Text.RegularExpressions.Match In matches

           matchIndex += 1

           Select Case Direction

               Case FindDirection.Down
                   If match.Index > Search_StartIndex Then ' Select next match
                       [Control].Select(match.Index, match.Length)
                       Exit For
                   ElseIf match.Index <= Search_StartIndex _
                   AndAlso matchIndex = matches.Count Then ' Select first match
                       [Control].Select(matches.Item(0).Index, matches.Item(0).Length)
                       Exit For
                   End If

               Case FindDirection.Up
                   If match.Index < Search_StartIndex Then ' Select previous match
                       [Control].Select(match.Index, match.Length)
                       Exit For
                   ElseIf match.Index >= Search_StartIndex _
                   AndAlso matchIndex = matches.Count Then ' Select last match
                       [Control].Select(matches.Item(0).Index, matches.Item(0).Length)
                       Exit For
                   End If

           End Select

       Next match

       ' Set the current selection BackColor
       [Control].SelectionBackColor = Highlight_BackColor
       ' Set the current selection ForeColor
       [Control].SelectionColor = Highlight_ForeColor
       ' Scroll to Caret/Cursor selection position
       [Control].ScrollToCaret()

   End Sub

#End Region



EDITO:

Aquí dejo una versión alternativa, no soporta RegEx y no soporta búsqueda hacia arriba,
el código no es peor, símplemente si no se requiere el uso de búsqueda por RegEx ni buscar hacia arriba entonces es preferible usar este snippet.

Código (vbnet) [Seleccionar]
#Region " [RichTextBox] FindNext String "

    ' [ FindNext String ]
    '
    ' //By Elektro H@cker
    '
    ' Examples :
    '
    ' FindNext(RichTextBox1, "Hello", RichTextBoxFinds.MatchCase, Color.LightBlue, Color.Black)
    '
    ' Private Sub RichTextBox_Enter(sender As Object, e As EventArgs) ' Handles RichTextBox1.Enter
    '    ' Restore Selection Colors before search next match.
    '    sender.SelectionBackColor = DefaultBackColor
    '    sender.SelectionColor = DefaultForeColor
    ' End Sub

    ' FindNext
    Private Sub FindNext(ByVal [Control] As RichTextBox, _
                        ByVal SearchText As String, _
                        ByVal IgnoreCase As RichTextBoxFinds, _
                        Optional ByVal Highlight_BackColor As Color = Nothing, _
                        Optional ByVal Highlight_ForeColor As Color = Nothing)

        ' Start searching at 'SelectionStart'.
        Dim Search_StartIndex As Integer = [Control].SelectionStart
        Static Next_Count As Integer = 0

        ' Restore Highlight colors of previous selection
        [Control].SelectionBackColor = [Control].BackColor
        [Control].SelectionColor = [Control].ForeColor

        ' Set next selection Highlight colors
        If Highlight_BackColor = Nothing Then Highlight_BackColor = [Control].BackColor
        If Highlight_ForeColor = Nothing Then Highlight_ForeColor = [Control].ForeColor

        ' If is not first FindNext call then...
        If Next_Count <> 0 Then
            Search_StartIndex += SearchText.Length
        Else ' If is first FindNext call then...
            Next_Count += 1
        End If

        ' Set Search_StartIndex
        Search_StartIndex = _
        [Control].Find(SearchText, Search_StartIndex, IgnoreCase)
        ' ...And prevent search at End Of File
        If Search_StartIndex = -1 Then
            Search_StartIndex = _
            [Control].Find(SearchText, 0, IgnoreCase)
        End If

        If Search_StartIndex = -1 Then
            Exit Sub ' No matches found
        End If

        ' Set the match selection
        [Control].Select(Search_StartIndex, SearchText.Length)
        ' Set the BackColor
        [Control].SelectionBackColor = Highlight_BackColor
        ' Set the ForeColor
        [Control].SelectionColor = Highlight_ForeColor
        ' Scroll to Caret/Cursor position
        [Control].ScrollToCaret()

    End Sub

#End Region
#7854
@MauriH

Vuelve a leer este post hasta el final: http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1891125#msg1891125

He subido un proyecto de prueba a Mediafire.

Saludos
#7856
Scripting / Re: cambiar icono de archivo .vbs
14 Octubre 2013, 04:12 AM
Necesitas empaquetar el VBS en un archivo executable, es decir, necesitas convertir el VBS a EXE, y luego modificar el recurso de Icono principal de ese EXE.

-> ExeScript Editor

Saludos
#7857
Con estas funciones podemos acceder a la información de la ScrollBar integrada de un control (la scrollbar vertical de un RichTextBox por ejemplo), para averiguar si la barra está scrolleada hacia abajo del todo, o hacia arriba del todo, o si ha sobrepasado el límite de abajo/arriba (aunque esto último creo que no pede suceder, pero bueno).

Esto es útil para prevenir el molesto efecto de "rebote" del método ScrollToCaret cuando intentamos scrollear la ScrollBar de un richtextbox cuando ha llegado al límite.

Ejemplo de uso:
Código (vbnet) [Seleccionar]
       RichTextBox1.Select(RichTextBox1.TextLength - 1, 1)
       If Not ScrollBarInfo.IsAtBottom(RichTextBox1) Then
           RichTextBox1.ScrollToCaret()
       End If



Código (vbnet) [Seleccionar]
Public Class ScrollBarInfo

   <System.Runtime.InteropServices.DllImport("user32")> _
   Private Shared Function GetScrollInfo(hwnd As IntPtr, nBar As Integer, ByRef scrollInfo As SCROLLINFO) As Integer
   End Function

   Private Shared scrollInf As New SCROLLINFO()

   Private Structure SCROLLINFO
       Public cbSize As Integer
       Public fMask As Integer
       Public min As Integer
       Public max As Integer
       Public nPage As Integer
       Public nPos As Integer
       Public nTrackPos As Integer
   End Structure

   Private Shared Sub Get_ScrollInfo(control As Control)
       scrollInf = New SCROLLINFO()
       scrollInf.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(scrollInf)
       scrollInf.fMask = &H10 Or &H1 Or &H2 'SIF_RANGE = &H1, SIF_PAGE= &H2, SIF_TRACKPOS = &H10
       GetScrollInfo(control.Handle, 1, scrollInf)
   End Sub

   Public Shared Function ReachedBottom(control As Control) As Boolean
       Get_ScrollInfo(control)
       Return scrollInf.max = scrollInf.nTrackPos + scrollInf.nPage
   End Function

   Public Shared Function ReachedTop(control As Control) As Boolean
       Get_ScrollInfo(control)
       Return scrollInf.nTrackPos < 0
   End Function

   Public Shared Function IsAtBottom(control As Control) As Boolean
       Get_ScrollInfo(control)
       Return scrollInf.max = (scrollInf.nTrackPos + scrollInf.nPage) - 1
   End Function

   Public Shared Function IsAtTop(control As Control) As Boolean
       Get_ScrollInfo(control)
       Return scrollInf.nTrackPos = 0
   End Function

End Class
#7859
He descubierto este mensaje de Windows para mover el ScrollBar de un control pudiendo especificar la cantidad de lineas a mover, y la dirección.

Código (vbnet) [Seleccionar]
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
    Private Shared Function SendMessage(hWnd As IntPtr, wMsg As UInteger, wParam As UIntPtr, lParam As IntPtr) As Integer
    End Function

    ' Examples:
    '
    ' SendMessage(RichTextBox1.Handle, &HB6, 0, 1)  ' Move 1 line to down
    ' SendMessage(RichTextBox1.Handle, &HB6, 0, 5)  ' Move 5 lines to down
    ' SendMessage(RichTextBox1.Handle, &HB6, 0, -1) ' Move 1 line to up
    ' SendMessage(RichTextBox1.Handle, &HB6, 0, -5) ' Move 5 lines to up
#7860
Creo que no existe esa información en la estructura M3U, no estoy seguro, pero no creo que cueste tanto abrir la wikipedia, buscar, e informarse: http://en.wikipedia.org/wiki/M3U

CitarDirective Description                                       Example
#EXTM3U File header. Must be the first line of the file! #EXTM3U

#EXTINF Track information, including runtime and title. #EXTINF:191,Artist Name - Track Title


Para especificar el tiempo de duración tienes que crear otro tipo de lista multimedia, por ejemplo "pls", y eso requiere escribir el código desde cero para adaptarlo a la estructura de la nueva lista multimedia.

Pero además, usando Batch no es posible obtener la información de duración de un archivo multimedia, ya te lo dije que pides cosas que con Batch no es posible y va siendo hora de que uses otro lenguaje.

De todas formas puedes usar la aplicación MediaInfo desde la consola para obtener la duración de un archivo multimedia: http://mediaarea.net/es/MediaInfo/Download/Windows

Saludos