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

#7601
Una nueva versión de mi INI manager, empecé desde cero para simplificar todo el código y le añadí un parámetro al método "Get_Value" para devolver un valor por defecto (se debe especificar) si el valor no se encuentra.

Código (vbnet) [Seleccionar]

' [ INI File Manager ]
'
' // By Elektro H@cker

#Region " Usage Examples "

'' Set the initialization file path.
'INIFileManager.FilePath = IO.Path.Combine(Application.StartupPath, "Config.ini")

'' Create the initialization file.
'INIFileManager.File.Create()

'' Check that the initialization file exist.
'MsgBox(INIFileManager.File.Exist)

'' Writes a new entire initialization file with the specified text content.
'INIFileManager.File.Write(New List(Of String) From {"[Section Name 1]"})

'' Set an existing value or append it at the enf of the initialization file.
'INIFileManager.Key.Set("KeyName1", "Value1")

'' Set an existing value on a specific section or append them at the enf of the initialization file.
'INIFileManager.Key.Set("KeyName2", "Value2", "[Section Name 2]")

'' Gets the value of the specified Key name,
'MsgBox(INIFileManager.Key.Get("KeyName1"))

'' Gets the value of the specified Key name on the specified Section.
'MsgBox(INIFileManager.Key.Get("KeyName2", , "[Section Name 2]"))

'' Gets the value of the specified Key name and returns a default value if the key name is not found.
'MsgBox(INIFileManager.Key.Get("KeyName0", "I'm a default value"))

'' Gets the value of the specified Key name, and assign it to a control property.
'CheckBox1.Checked = CType(INIFileManager.Key.Get("KeyName1"), Boolean)

'' Checks whether a Key exists.
'MsgBox(INIFileManager.Key.Exist("KeyName1"))

'' Checks whether a Key exists on a specific section.
'MsgBox(INIFileManager.Key.Exist("KeyName2", "[First Section]"))

'' Remove a key name.
'INIFileManager.Key.Remove("KeyName1")

'' Remove a key name on the specified Section.
'INIFileManager.Key.Remove("KeyName2", "[Section Name 2]")

'' Add a new section.
'INIFileManager.Section.Add("[Section Name 3]")

'' Get the contents of a specific section.
'MsgBox(String.Join(Environment.NewLine, INIFileManager.Section.Get("[Section Name 1]")))

'' Remove an existing section.
'INIFileManager.Section.Remove("[Section Name 2]")

'' Checks that the initialization file contains at least one section.
'MsgBox(INIFileManager.Section.Has())

'' Sort the initialization file (And remove empty lines).
'INIFileManager.File.Sort(True)

'' Gets the initialization file section names.
'MsgBox(String.Join(", ", INIFileManager.Section.GetNames()))

'' Gets the initialization file content.
'MsgBox(String.Join(Environment.NewLine, INIFileManager.File.Get()))

'' Delete the initialization file from disk.
'INIFileManager.File.Delete()

#End Region

#Region " INI File Manager "

Public Class INIFileManager

#Region " Members "

#Region " Properties "

   ''' <summary>
   ''' Indicates the initialization file path.
   ''' </summary>
   Public Shared Property FilePath As String =
       IO.Path.Combine(Application.StartupPath, Process.GetCurrentProcess().ProcessName & ".ini")

#End Region

#Region " Variables "

   ''' <summary>
   ''' Stores the initialization file content.
   ''' </summary>
   Private Shared Content As New List(Of String)

   ''' <summary>
   ''' Stores the INI section names.
   ''' </summary>
   Private Shared SectionNames As String() = {String.Empty}

   ''' <summary>
   ''' Indicates the start element index of a section name.
   ''' </summary>
   Private Shared SectionStartIndex As Integer = -1

   ''' <summary>
   ''' Indicates the end element index of a section name.
   ''' </summary>
   Private Shared SectionEndIndex As Integer = -1

   ''' <summary>
   ''' Stores a single sorted section block with their keys and values.
   ''' </summary>
   Private Shared SortedSection As New List(Of String)

   ''' <summary>
   ''' Stores all the sorted section blocks with their keys and values.
   ''' </summary>
   Private Shared SortedSections As New List(Of String)

   ''' <summary>
   ''' Indicates the INI element index that contains the Key and value.
   ''' </summary>
   Private Shared KeyIndex As Integer = -1

   ''' <summary>
   ''' Indicates the culture to compare the strings.
   ''' </summary>
   Private Shared ReadOnly CompareMode As StringComparison = StringComparison.InvariantCultureIgnoreCase

#End Region

#Region " Exceptions "

   ''' <summary>
   ''' Exception is thrown when a section name parameter has invalid format.
   ''' </summary>
   Private Class SectionNameInvalidFormatException
       Inherits Exception

       Public Sub New()
           MyBase.New("Section name parameter has invalid format." &
                      Environment.NewLine &
                      "The rigth syntax is: [SectionName]")
       End Sub

       Public Sub New(message As String)
           MyBase.New(message)
       End Sub

       Public Sub New(message As String, inner As Exception)
           MyBase.New(message, inner)
       End Sub

   End Class

#End Region

#End Region

#Region " Methods "

   <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
   Private Shadows Sub ReferenceEquals()
   End Sub

   <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
   Private Shadows Sub Equals()
   End Sub

   Public Class [File]

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub ReferenceEquals()
       End Sub

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub Equals()
       End Sub

       ''' <summary>
       ''' Checks whether the initialization file exist.
       ''' </summary>
       ''' <returns>True if initialization file exist, otherwise False.</returns>
       Public Shared Function Exist() As Boolean
           Return IO.File.Exists(FilePath)
       End Function

       ''' <summary>
       ''' Creates the initialization file.
       ''' If the file already exist it would be replaced.
       ''' </summary>
       ''' <param name="Encoding">The Text encoding to write the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Create(Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           Try
               IO.File.WriteAllText(FilePath,
                                    String.Empty,
                                    If(Encoding Is Nothing, System.Text.Encoding.Default, Encoding))
           Catch ex As Exception
               Throw
               Return False

           End Try

           Return True

       End Function

       ''' <summary>
       ''' Deletes the initialization file.
       ''' </summary>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Delete() As Boolean

           If Not [File].Exist Then Return False

           Try
               IO.File.Delete(FilePath)
           Catch ex As Exception
               Throw
               Return False

           End Try

           Content = Nothing

           Return True

       End Function

       ''' <summary>
       ''' Returns the initialization file content.
       ''' </summary>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       Public Shared Function [Get](Optional ByVal Encoding As System.Text.Encoding = Nothing) As List(Of String)

           Content = IO.File.ReadAllLines(FilePath,
                                          If(Encoding Is Nothing, System.Text.Encoding.Default, Encoding)).ToList()

           Return Content

       End Function

       ''' <summary>
       ''' Sort the initialization file content by the Key names.
       ''' If the initialization file contains sections then the sections are sorted by their names also.
       ''' </summary>
       ''' <param name="RemoveEmptyLines">Remove empty lines.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Sort(Optional ByVal RemoveEmptyLines As Boolean = False,
                                   Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then Return False

           [File].[Get](Encoding)

           Select Case Section.Has(Encoding)

               Case True ' initialization file contains at least one Section.

                   SortedSection.Clear()
                   SortedSections.Clear()

                   Section.GetNames(Encoding) ' Get the (sorted) section names

                   For Each name As String In SectionNames

                       SortedSection = Section.[Get](name, Encoding) ' Get the single section lines.

                       If RemoveEmptyLines Then ' Remove empty lines.
                           SortedSection = SortedSection.Where(Function(line) _
                                                               Not String.IsNullOrEmpty(line) AndAlso
                                                               Not String.IsNullOrWhiteSpace(line)).ToList
                       End If

                       SortedSection.Sort() ' Sort the single section keys.

                       SortedSections.Add(name) ' Add the section name to the sorted sections list.
                       SortedSections.AddRange(SortedSection) ' Add the single section to the sorted sections list.

                   Next name

                   Content = SortedSections

               Case False ' initialization file doesn't contains any Section.
                   Content.Sort()

                   If RemoveEmptyLines Then
                       Content = Content.Where(Function(line) _
                                                       Not String.IsNullOrEmpty(line) AndAlso
                                                       Not String.IsNullOrWhiteSpace(line)).ToList
                   End If

           End Select ' Section.Has()

           ' Save changes.
           Return [File].Write(Content, Encoding)

       End Function

       ''' <summary>
       ''' Writes a new initialization file with the specified text content..
       ''' </summary>
       ''' <param name="Content">Indicates the text content to write in the initialization file.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Write(ByVal Content As List(Of String),
                                    Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           Try
               IO.File.WriteAllLines(FilePath,
                                     Content,
                                     If(Encoding Is Nothing, System.Text.Encoding.Default, Encoding))
           Catch ex As Exception
               Throw
               Return False

           End Try

           Return True

       End Function

   End Class

   Public Class [Key]

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub ReferenceEquals()
       End Sub

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub Equals()
       End Sub

       ''' <summary>
       ''' Return a value indicating whether a key name exist or not.
       ''' </summary>
       ''' <param name="KeyName">Indicates the key name that contains the value to modify.</param>
       ''' <param name="SectionName">Indicates the Section name where to find the key name.</param>
       ''' <param name="Encoding">The Text encoding to write the initialization file.</param>
       ''' <returns>True if the key name exist, otherwise False.</returns>
       Public Shared Function Exist(ByVal KeyName As String,
                                    Optional ByVal SectionName As String = Nothing,
                                    Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then Return False

           [File].[Get](Encoding)

           [Key].GetIndex(KeyName, SectionName)

           Select Case SectionName Is Nothing

               Case True
                   Return Convert.ToBoolean(Not KeyIndex)

               Case Else
                   Return Convert.ToBoolean(Not (KeyIndex + SectionStartIndex))

           End Select

       End Function

       ''' <summary>
       ''' Set the value of an existing key name.
       '''
       ''' If the initialization file doesn't exists, or else the Key doesn't exist,
       ''' or else the Section parameter is not specified and the key name doesn't exist;
       ''' then the 'key=value' is appended to the end of the initialization file.
       '''
       ''' if the specified Section name exist but the Key name doesn't exist,
       ''' then the 'key=value' is appended to the end of the Section.
       '''
       ''' </summary>
       ''' <param name="KeyName">Indicates the key name that contains the value to modify.</param>
       ''' <param name="Value">Indicates the new value.</param>
       ''' <param name="SectionName">Indicates the Section name where to find the key name.</param>
       ''' <param name="Encoding">The Text encoding to write the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function [Set](ByVal KeyName As String,
                                    ByVal Value As String,
                                    Optional ByVal SectionName As String = Nothing,
                                    Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then [File].Create()

           [File].[Get](Encoding)

           [Key].GetIndex(KeyName, SectionName)

           ' If KeyName is not found and indicated Section is found, then...
           If KeyIndex = -1 AndAlso SectionEndIndex <> -1 Then

               ' If section EndIndex is the last line of file, then...
               If SectionEndIndex = Content.Count Then

                   Content(Content.Count - 1) = Content(Content.Count - 1) &
                                                        Environment.NewLine &
                                                        String.Format("{0}={1}", KeyName, Value)

               Else ' If not section EndIndex is the last line of file, then...

                   Content(SectionEndIndex) = String.Format("{0}={1}", KeyName, Value) &
                                                   Environment.NewLine &
                                                   Content(SectionEndIndex)
               End If

               ' If KeyName is found then...
           ElseIf KeyIndex <> -1 Then
               Content(KeyIndex) = String.Format("{0}={1}", KeyName, Value)

               ' If KeyName is not found and Section parameter is passed. then...
           ElseIf KeyIndex = -1 AndAlso SectionName IsNot Nothing Then
               Content.Add(SectionName)
               Content.Add(String.Format("{0}={1}", KeyName, Value))

               ' If KeyName is not found, then...
           ElseIf KeyIndex = -1 Then
               Content.Add(String.Format("{0}={1}", KeyName, Value))

           End If

           ' Save changes.
           Return [File].Write(Content, Encoding)

       End Function

       ''' <summary>
       ''' Get the value of an existing key name.
       ''' If the initialization file or else the Key doesn't exist then a 'Nothing' object is returned.
       ''' </summary>
       ''' <param name="KeyName">Indicates the key name to retrieve their value.</param>
       ''' <param name="DefaultValue">Indicates a default value to return if the key name is not found.</param>
       ''' <param name="SectionName">Indicates the Section name where to find the key name.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       Public Shared Function [Get](ByVal KeyName As String,
                                    Optional ByVal DefaultValue As Object = Nothing,
                                    Optional ByVal SectionName As String = Nothing,
                                    Optional ByVal Encoding As System.Text.Encoding = Nothing) As Object

           If Not [File].Exist() Then Return DefaultValue

           [File].[Get](Encoding)

           [Key].GetIndex(KeyName, SectionName)

           Select Case KeyIndex

               Case Is <> -1 ' KeyName found.
                   Return Content(KeyIndex).Substring(Content(KeyIndex).IndexOf("=") + 1)

               Case Else ' KeyName not found.
                   Return DefaultValue

           End Select

       End Function

       ''' <summary>
       ''' Returns the initialization file line index of the key name.
       ''' </summary>
       ''' <param name="KeyName">Indicates the Key name to retrieve their value.</param>
       ''' <param name="SectionName">Indicates the Section name where to find the key name.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       Private Shared Sub GetIndex(ByVal KeyName As String,
                                   Optional ByVal SectionName As String = Nothing,
                                   Optional ByVal Encoding As System.Text.Encoding = Nothing)

           If Content Is Nothing Then [File].Get(Encoding)

           ' Reset the INI index elements to negative values.
           KeyIndex = -1
           SectionStartIndex = -1
           SectionEndIndex = -1

           If SectionName IsNot Nothing AndAlso Not SectionName Like "[[]?*[]]" Then
               Throw New SectionNameInvalidFormatException
               Exit Sub
           End If

           ' Locate the KeyName and set their element index.
           ' If the KeyName is not found then the value is set to "-1" to return an specified default value.
           Select Case String.IsNullOrEmpty(SectionName)

               Case True ' Any SectionName parameter is specified.

                   KeyIndex = Content.FindIndex(Function(line) line.StartsWith(String.Format("{0}=", KeyName),
                                                                             StringComparison.InvariantCultureIgnoreCase))

               Case False ' SectionName parameter is specified.

                   Select Case Section.Has(Encoding)

                       Case True ' INI contains at least one Section.

                           SectionStartIndex = Content.FindIndex(Function(line) line.Trim.Equals(SectionName.Trim, CompareMode))
                           If SectionStartIndex = -1 Then ' Section doesn't exist.
                               Exit Sub
                           End If

                           SectionEndIndex = Content.FindIndex(SectionStartIndex + 1, Function(line) line.Trim Like "[[]?*[]]")
                           If SectionEndIndex = -1 Then
                               ' This fixes the value if the section is at the end of file.
                               SectionEndIndex = Content.Count
                           End If

                           KeyIndex = Content.FindIndex(SectionStartIndex, SectionEndIndex - SectionStartIndex,
                                                                 Function(line) line.StartsWith(String.Format("{0}=", KeyName),
                                                                                     StringComparison.InvariantCultureIgnoreCase))

                       Case False ' INI doesn't contains Sections.
                           GetIndex(KeyName, , Encoding)

                   End Select ' Section.Has()

           End Select ' String.IsNullOrEmpty(SectionName)

       End Sub

       ''' <summary>
       ''' Remove an existing key name.
       ''' </summary>
       ''' <param name="KeyName">Indicates the key name to retrieve their value.</param>
       ''' <param name="SectionName">Indicates the Section name where to find the key name.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Remove(ByVal KeyName As String,
                                     Optional ByVal SectionName As String = Nothing,
                                     Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then Return False

           [File].[Get](Encoding)

           [Key].GetIndex(KeyName, SectionName)

           Select Case KeyIndex

               Case Is <> -1 ' Key found.

                   ' Remove the element containing the key name.
                   Content.RemoveAt(KeyIndex)

                   ' Save changes.
                   Return [File].Write(Content, Encoding)

               Case Else ' KeyName not found.
                   Return False

           End Select

       End Function

   End Class

   Public Class Section

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub ReferenceEquals()
       End Sub

       <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
       Private Shadows Sub Equals()
       End Sub

       ''' <summary>
       ''' Adds a new section at bottom of the initialization file.
       ''' </summary>
       ''' <param name="SectionName">Indicates the Section name to add.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Add(Optional ByVal SectionName As String = Nothing,
                                  Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then [File].Create()

           If Not SectionName Like "[[]?*[]]" Then
               Throw New SectionNameInvalidFormatException
               Exit Function
           End If

           [File].[Get](Encoding)

           Select Case Section.GetNames(Encoding).Where(Function(line) line.Trim.Equals(SectionName.Trim, CompareMode)).Any

               Case False ' Any of the existing Section names is equal to given section name.

                   ' Add the new section name.
                   Content.Add(SectionName)

                   ' Save changes.
                   Return [File].Write(Content, Encoding)

               Case Else ' An existing Section name is equal to given section name.
                   Return False

           End Select

       End Function

       ''' <summary>
       ''' Returns all the keys and values of an existing Section Name.
       ''' </summary>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <param name="SectionName">Indicates the section name where to retrieve their keynames and values.</param>
       Public Shared Function [Get](ByVal SectionName As String,
                                    Optional ByVal Encoding As System.Text.Encoding = Nothing) As List(Of String)

           If Content Is Nothing Then [File].Get(Encoding)

           SectionStartIndex = Content.FindIndex(Function(line) line.Trim.Equals(SectionName.Trim, CompareMode))

           SectionEndIndex = Content.FindIndex(SectionStartIndex + 1, Function(line) line.Trim Like "[[]?*[]]")

           If SectionEndIndex = -1 Then
               SectionEndIndex = Content.Count ' This fixes the value if the section is at the end of file.
           End If

           Return Content.GetRange(SectionStartIndex, SectionEndIndex - SectionStartIndex).Skip(1).ToList

       End Function

       ''' <summary>
       ''' Returns all the section names of the initialization file.
       ''' </summary>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       Public Shared Function GetNames(Optional ByVal Encoding As System.Text.Encoding = Nothing) As String()

           If Content Is Nothing Then [File].Get(Encoding)

           ' Get the Section names.
           SectionNames = (From line In Content Where line.Trim Like "[[]?*[]]").ToArray

           ' Sort the Section names.
           If SectionNames.Count <> 0 Then Array.Sort(SectionNames)

           ' Return the Section names.
           Return SectionNames

       End Function

       ''' <summary>
       ''' Gets a value indicating whether the initialization file contains at least one Section.
       ''' </summary>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the INI contains at least one section, otherwise False.</returns>
       Public Shared Function Has(Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Content Is Nothing Then [File].Get(Encoding)

           Return (From line In Content Where line.Trim Like "[[]?*[]]").Any()

       End Function

       ''' <summary>
       ''' Removes an existing section with all of it's keys and values.
       ''' </summary>
       ''' <param name="SectionName">Indicates the Section name to remove with all of it's key/values.</param>
       ''' <param name="Encoding">The Text encoding to read the initialization file.</param>
       ''' <returns>True if the operation success, otherwise False.</returns>
       Public Shared Function Remove(Optional ByVal SectionName As String = Nothing,
                                     Optional ByVal Encoding As System.Text.Encoding = Nothing) As Boolean

           If Not [File].Exist() Then Return False

           If Not SectionName Like "[[]?*[]]" Then
               Throw New SectionNameInvalidFormatException
               Exit Function
           End If

           [File].[Get](Encoding)

           Select Case [Section].GetNames(Encoding).Where(Function(line) line.Trim.Equals(SectionName.Trim, CompareMode)).Any

               Case True ' An existing Section name is equal to given section name.

                   ' Get the section StartIndex and EndIndex.
                   [Get](SectionName)

                   ' Remove the section range index.
                   Content.RemoveRange(SectionStartIndex, SectionEndIndex - SectionStartIndex)

                   ' Save changes.
                   Return [File].Write(Content, Encoding)

               Case Else ' Any of the existing Section names is equal to given section name.
                   Return False

           End Select

       End Function

   End Class

#End Region

End Class

#End Region
#7602
Windows / Re: El volumen de audio cambia solo.
10 Diciembre 2013, 12:30 PM
Cita de: Saberuneko en 10 Diciembre 2013, 12:04 PMNo sé ni por dónde empezar a mirar, ya que esto me parece sumamente extraño.
¿Ideas?

Hola

¿Te has asegurado de que no inicias ningún programa que esté regulando automáticamente el nivel de volumen?, esto puede ser debido a "X" programas, como reproductores de video y codecs como FFDSHOW (si tienes activado el auto volumen).

De todas formas entra a la configuración de volumen y prueba a desactivar esta opción en el dispositivo conflictivo:



Y si sueles comunicarte por Skype (llamadas) o cosas parecidas entonces sigue los pasos de este manual: Windows 7: System Sounds Auto Leveling - Disable

Saludos
#7603
Un buen ejemplo de como parsear un documento HTML utilizando la librería HTMLAgilityPack.

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

    Private ReadOnly html As String =
        <a><![CDATA[
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<body>

<div class="infolinks"><input type="hidden" name="IL_IN_TAG" value="1"/></div><div id="main">

<div class="music">

<h2 class="boxtitle">New releases \ <small>
<a href="/newalbums" title="New releases mp3 downloads" rel="bookmark">see all</a></small>
</h2>

<div class="item">

    <div class="thumb">
<a href="http://www.mp3crank.com/curt-smith/deceptively-heavy-121861" rel="bookmark" lang="en" title="Curt Smith - Deceptively Heavy album downloads"><img width="100" height="100" alt="Mp3 downloads Curt Smith - Deceptively Heavy" title="Free mp3 downloads Curt Smith - Deceptively Heavy" src="http://www.mp3crank.com/cover-album/Curt-Smith-Deceptively-Heavy-400x400.jpg"/></a>
    </div>

<div class="release">
<h3>Curt Smith</h3>
<h4>
<a href="http://www.mp3crank.com/curt-smith/deceptively-heavy-121861" title="Mp3 downloads Curt Smith - Deceptively Heavy">Deceptively Heavy</a>
</h4>
<script src="/ads/button.js"></script>
</div>

<div class="release-year">
<p>Year</p>
<span>2013</span>
</div>

<div class="genre">
<p>Genre</p>
<a href="http://www.mp3crank.com/genre/indie" rel="tag">Indie</a><a href="http://www.mp3crank.com/genre/pop" rel="tag">Pop</a>
</div>

</div>

<div class="item">

    <div class="thumb">
<a href="http://www.mp3crank.com/wolf-eyes/lower-demos-121866" rel="bookmark" lang="en" title="Wolf Eyes - Lower Demos album downloads"><img width="100" height="100" alt="Mp3 downloads Wolf Eyes - Lower Demos" title="Free mp3 downloads Wolf Eyes - Lower Demos" src="http://www.mp3crank.com/cover-album/Wolf-Eyes-–-Lower-Demos.jpg" /></a>
    </div>

<div class="release">
<h3>Wolf Eyes</h3>
<h4>
<a href="http://www.mp3crank.com/wolf-eyes/lower-demos-121866" title="Mp3 downloads Wolf Eyes - Lower Demos">Lower Demos</a>
</h4>
<script src="/ads/button.js"></script>
</div>

<div class="release-year">
<p>Year</p>
<span>2013</span>
</div>

<div class="genre">
<p>Genre</p>
<a href="http://www.mp3crank.com/genre/rock" rel="tag">Rock</a>
</div>

</div>

</div>

</div>

</body>
</html>
]]></a>.Value

    Private sb As New System.Text.StringBuilder

    Private htmldoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    Private htmlnodes As HtmlAgilityPack.HtmlNodeCollection = Nothing

    Private Title As String = String.Empty
    Private Cover As String = String.Empty
    Private Year As String = String.Empty
    Private Genres As String() = {String.Empty}
    Private URL As String = String.Empty

    Private Sub Test() Handles MyBase.Shown

        ' Load the html document.
        htmldoc.LoadHtml(html)

        ' Select the (10 items) nodes.
        ' All "SelectSingleNode" below will use this DIV element as a starting point.
        htmlnodes = htmldoc.DocumentNode.SelectNodes("//div[@class='item']")

        ' Loop trough the nodes.
        For Each node As HtmlAgilityPack.HtmlNode In htmlnodes

            Title = node.SelectSingleNode(".//div[@class='release']/h4/a[@title]").GetAttributeValue("title", "Unknown Title")
            Cover = node.SelectSingleNode(".//div[@class='thumb']/a/img[@src]").GetAttributeValue("src", String.Empty)
            Year = node.SelectSingleNode(".//div[@class='release-year']/span").InnerText
            Genres = (From n In node.SelectNodes(".//div[@class='genre']/a") Select n.InnerText).ToArray()
            URL = node.SelectSingleNode(".//div[@class='release']/h4/a[@href]").GetAttributeValue("href", "Unknown URL")

            ' Display the information:
            sb.Clear()
            sb.AppendLine(String.Format("Title : {0}", Title))
            sb.AppendLine(String.Format("Cover : {0}", Cover))
            sb.AppendLine(String.Format("Year  : {0}", Year))
            sb.AppendLine(String.Format("Genres: {0}", String.Join(", ", Genres)))
            sb.AppendLine(String.Format("URL   : {0}", URL))
            MsgBox(sb.ToString)

        Next node

    End Sub

End Class
#7604
Cita de: @drvy en  9 Diciembre 2013, 16:24 PMte pasa en todos los navegadores o solo en Firefox ?

Hola

Ocurre lo mismo con Firefox, Chrome y Tor

saludos!
#7605
La verdad es que un ListBox reduciría bastante el espacio que ocupan 30 textboxes xD




Citarquiero mostrar el resultado de   Result1 ,Result2, Result3

Eso lo entiendo, pero esto no:

Citar Private Sub TextBox_Leave(ByVal sender As System.Object, ByVal e As  _
System.EventArgs) Handles TextBox7.Leave, TextBox8.Leave, TextBox9.Leave
       ListBox1.Items.Add(sender.text)
   End Sub

¿Que intentas conseguir ahí?, quiero decir ¿porque usas el evento Leave para añadir el texto al ListBox?.

¿Si quieres reemplazar los textbox por un ListBox porque usas ese Evento?,
¿Has probado a añadir los resultados diréctamente en el ListBox sin intervenir con ningún TextBox? (eso sería lo coherente xD)

Algo como esto:
Código (vbnet) [Seleccionar]
Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

  Case False ' El número no está repetido en ninguna "linea"
      ' Así que colocamos el número en el ListBox
      ListBox1.Items.Add(CStr(Results(X)))

  Case True ' El número está repetido en alguna de las "lineas"
      ' Así que escribimos el número "máximo" en el ListBox
      ListBox1.Items.Add(CStr(maximum))

End Select


¿Es eso a lo que te refieres?.

Saludos!
#7606
Cita de: Vaagish en  9 Diciembre 2013, 17:29 PM
Te referís a que solo se pueden usar enteros y no decimales,, no?

Hola

Me refería a que los nombres de los identifficadores de una Enum no pueden ser numéricos, como en este ejemplo:

Código (vbnet) [Seleccionar]
<Flags>
Enum Widths As Short
   500
   600
End Enum


Aunque no sé si Ikillnukes tenia pensado hacer algo asi, pero de todas formas lo intenté aclarar.

Saludos!
#7607
vamos a ver Ikillnukes, que esta vez creo que eres tu quien se ha exo la pixa un lio xD, el problema no es con el destinatario, pues ahí es muy óbvio que hay que delmitar corréctamente encerrando las cadenas entre comillas dobles,
el problema surge en el mensaje del cuerpo!. ¿no has leido la parte donde hablo sobre el filtro de palabras prohibidas?, pues por algo es '¬¬ ...

Saludos!
#7608
Pues si, buena observación, por lo visto eso lo soluciona, pero el bug sigue existiendo para casos sin comillas dobles.

Saludos!
#7609
Hola

¿Que tiene que ver una GUI con Batch?, ¿Es que quizás estás usando WinBatch o derivados?, en caso contrario, ¿Si la GUI la has creado con un lenguaje distinto a Batch, porque quieres realizar la tarea usando Batch? eso sería un punto muy negativo.

Lo que debes hacer (usando el mismo lenguaje con el que creaste los botones) es obtener el valor de la subclave de registro de la configuración de Office donde se especifica la ruta de ejecución del proceso...

...San Google dice que la subclave para Office97 (Office, no Word) es esta:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\BinDirPath
(adentro puedes localizar la ruta del Word)

Y también dice que la subclave para Word 2007 es esta:
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Word\InstallRoot

Puedes Googlear para obtener las demás localizaciones del proceso Word.exe de las distintas versiones de Office, y así simplificarás la tarea.

Saludos!
#7610
Hola

Es tan sencillo como hacer esto:

[.ShellClassInfo]
IconResource=\..\Aplicación\Configuración\Librería.dll,48


\..\ = Letra de unidad de origen.




Ahora bien, si me permites un par de consejos:

1. Deberías extraer el icono 48 de esa dll, y en caso de que el icono contenga varias capas, quedarte sólamente con la más grande (a ser posible 256x256), todo esto para ahorrar el mayor espacio posible.

2. En caso de que quieras usar un icono diferente para cada carpeta coloca el icono en el directorio, junto al archivo ini, solo tendrías que hacer esto:

[.ShellClassInfo]
IconResource=icono.ico,0


Comprendo muy bien el fastidio que supone editar contínuamente el contenido del desktop.ini, por eso si te fijas yo lo que hago es especificar el mismo nombre para todos los iconos (icono.ico), y así solo tengo que copiar el mismo desktop.ini al directorio que yo quiera, sin requerir modificaciones de texto.

Esa es la manera en la que yo lo hago cuando requiero asignar distintos iconos:

(Click para agrandar)


Saludos