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 - okik

#661
De nuevo gracias por las respuestas.

Me he descargado Html Agility Pack, pero antes de usarlo he buscado la forma de no depender de librerías externas. He encontrado esta forma usando System.Windows.Forms.HtmlDocument y algo tan viejo como la función InStr.

Antes de usar Instr es obtener las líneas <td class="Pais">*</td> mediante miembro OuterHtml de HtmlElement, luego mediante Instr determinar si estamos en "Num" o "Pais" y en cuyo caso se obtiene el InnerText, que sería el número o país.


Código (vbnet) [Seleccionar]
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim doc As HtmlDocument = WebBrowser1.Document
        Dim divs As HtmlElementCollection = doc.GetElementsByTagName("div")

        Dim Tipo As String
        Label1.Text = ""

        For Each div As HtmlElement In divs
            If div.GetAttribute("id") = "contenedor-portadilla" Then
                Dim tables As HtmlElementCollection = doc.GetElementsByTagName("table")
                For Each table As HtmlElement In tables
                    Dim tds As HtmlElementCollection = table.GetElementsByTagName("td")
                    Dim tdText As String = String.Empty
                    For Each td As HtmlElement In tds
                        tdText = td.InnerText
                        Tipo = td.OuterHtml

                        'Obtiene la columna "num"
                        ' If InStr(Tipo, "num", CompareMethod.Text) > 0 Then
                        '  Label1.Text = Label1.Text & tdText & vbCrLf
                        '  End If

                        'Obtiene la columna "pais"
                        If InStr(Tipo, "Pais", CompareMethod.Text) > 0 Then
                            Label1.Text = Label1.Text & tdText & vbCrLf
                        End If
                    Next

                    'Obtiene la cabezera "Totales"
                    Dim ths As HtmlElementCollection = table.GetElementsByTagName("th")

                    Dim thText As String = String.Empty
                    For Each th As HtmlElement In ths
                        thText = th.InnerText
                        Label1.Text = Label1.Text & thText & vbCrLf
                    Next
                Next
            End If
        Next
    End Sub


Ignoraba que hacer esto se llama "parsear html", este termino me ha venido muy bien a la hora de buscar en la red sobre este tema y he encontrado otras formas que más adelante probaré. 


Sl2
     
#662
Cuantas respuestas, muchas gracias  :D

Estos días he tenido problemas con la compu, concrectamente con la concexión a Internet (estuve haciendo cosas raras...), pero ya está arreglado. A causa de ello no he podido ver vuestras respuestas. Las vi ayer, pero he estado terminando de recuperar el sistema.

Ahora probaré el código de Elektro, a ver que tal.

Sl2
#663
Hola buenas,

Necesito obtener estos datos y de forma ordenada, en el mismo orden de la tabla.

Por ejemplo tengo esta tabla (que he simplificado):
Código (html4strict) [Seleccionar]
<html>
<div id="contenedor-portadilla">
<table class="TablaPaises" id="calsificacion_completa">
<thead>
<tr class="Estadistica">
<th colspan="2" class="sinfondo">&nbsp;</th>
<th colspan="1">Totales</th>
</tr>
</thead>
<tbody><tr>
<td class="Num">1</td>
<td class="Pais">España</td>
</tr>
<tr>
<td class="Num">2</td>
<td class="Pais">Portugal</td>
</tr>
</tbody></table></html>


Quedaría así:

   Totales
1 España
2 Portugal


Lo he intentado cargando la página en  webbrowser y usando webbrowser.document ... y sus propiedades, el tagname, y eso pero solo he conseguido un listado del <td> sin ningún orden y todo mezclado.

yo quiero poder conseguir los datos a voluntad para mostrarlo en un ListView


Agradezco cualquier ayuda.

Sl2



#664
Cita de: Eleкtro en 13 Junio 2015, 10:52 AM
Process.Start(filename) - MSDN

Saludos!

Gracias Eleкtro, he probado  Process.Start y funciona bien, aunque el archivo esté en la carpeta temp.




Como la aportación de Elektro funciona he quitado ShellExecute y quedaría así:

Código (vbnet) [Seleccionar]
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim DirTemp As String = My.Computer.FileSystem.SpecialDirectories.Temp
       Dim TextFile1 As New System.IO.StreamWriter(DirTemp & "\Text1.txt") 'Crea un archivo vacío
       Dim TextFile2 As New System.IO.StreamWriter(DirTemp & "\Text2.txt") 'Crea un archivo vacío
       Dim strTexto1 As String = My.Resources.Resource1.Text1_txt 'Introuduce el texto del archivo de recursos Text.txten strTexto
       Dim strTexto2 As String = My.Resources.Resource1.Text2_txt

       TextFile1.WriteLine(strTexto1) 'Crea el archivo
       TextFile1.Flush() 'Borra bufferes
       TextFile2.WriteLine(strTexto2) 'Crea el archivo
       TextFile2.Flush() 'Borra bufferes
       Process.Start(DirTemp & "\Text1.txt") 'Abre el archivo Text1.txt
       Process.Start(DirTemp & "\Text2.txt") 'Abre el archivo Text2.txt
   End Sub


#665
Buenas

He intentado ejecutar el código y bueno,  WriteAllBytes se llama de la siguiente manera:

WriteAllBytes(ByVal path As String, ByVal bytes() As Byte)

si pones:

IO.File.WriteAllBytes(My.Computer.FileSystem.SpecialDirectories.Temp & "\Text.txt", My.Resources.Text)

Entonces  se produce error ya que sólo admite bytes(), es decir, un exe, imagen, etc.




Para leo_gec:
"he tratado de hacer un programa en vb2008 para cuando abran el archivo... "(supong que te refieres a programa) "... se abran 2 txt al mismo tiempo y no se les olvide abrirlos.

Supongo que lo que que quieres,   es crear dos TXT y que se abran automáticamente. Se me ocurre que uses ShellExecute, ya que he probado con 'Shell'  y a través de la consola y no funcionaba.

Con ShellExecute se abren sin problema. Quizás haya otra manera, no se.


Código (vbnet) [Seleccionar]
Public Class Form1
   Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
       (ByVal hWnd As Integer, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Integer) As Integer
   Const SW_SHOWNORMAL = 1
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim DirTemp As String = My.Computer.FileSystem.SpecialDirectories.Temp
       Dim TextFile1 As New System.IO.StreamWriter(DirTemp & "\Text1.txt") 'Crea un archivo vacío
       Dim TextFile2 As New System.IO.StreamWriter(DirTemp & "\Text2.txt") 'Crea un archivo vacío
       Dim strTexto1 As String = My.Resources.Resource1.Text1_txt 'Introuduce el texto del archivo de recursos Text.txten strTexto
       Dim strTexto2 As String = My.Resources.Resource1.Text2_txt

       TextFile1.WriteLine(strTexto1) 'Crea el archivo
       TextFile1.Flush() 'Borra bufferes
       TextFile2.WriteLine(strTexto2) 'Crea el archivo
       TextFile2.Flush() 'Borra bufferes

       ShellExecute(Me.Handle, "Open", "notepad", DirTemp & "\Text1.txt", vbNullString, SW_SHOWNORMAL)
       ShellExecute(Me.Handle, "Open", "notepad", DirTemp & "\Text2.txt", vbNullString, SW_SHOWNORMAL)

   End Sub

End Class




Cuando metes el archivo Text1.txt en Recursos, se renombra automáticamente Text1_txt. Yo cambié el nombre y le quité el "_txt" por eso he puesto esta línea de código así:

Dim strTexto1 As String = My.Resources.Resource1.Text1

pero supongo que tu no lo has cambiado, entonces sería así:

Dim strTexto1 As String = My.Resources.Resource1.Text1_txt

Por otro lado el nombre del resource lo tengo en Resource1, pero también se puede cambiar.

En resumen:  

My.Resources.[NombreResource].[NombreArchivo]

En fin para que no haya confusión lo he puesto con la extensión Text1_txt

#666
Cita de: leo_gec en 11 Junio 2015, 10:23 AM
el copiado no me funciona.
lo demas si
alguien me puede ayudar a completarlo???????????


Parece que #scott_  está en lo cierto, ya que has rectificado y has puesto "%temp%\leelo.exe". Si lo que quieres es camuflar un EXE (para que no lo detecte un antivirus...), el sistema es el mismo, debes añadirlo como archivo de recursos, pero en lugar de 'Archivo', debes seleccinar 'Otros'. Sin embargo, a la hora de crear el archivo debes leerlo y crearlo com archivo binario y darle extensión "exe".

Almenos así lo hacía con el VB6, pero no lo he hecho con VB.Net. Por mera curiosidad me lo voy a mirar, ya que estoy pasando todo lo que hacía con VB6 a VB.Net y eso no lo he pasado.

Saludos




Jo jo, ni punto de comparación en VB.Net. más fácil que en VB6.

Bueno, como he comentado arriba hay que leerlo como binario y no como archivo de texto. Y a la hora de crearlo pues lo mismo.


1. En el menú, Clic 'Proyecto'

2. Clic en 'Agregar control de usuario'

3. Selecciona 'Archivo de recursos'

4. Selecciona 'Resource1.resx'

5. En el menú de  'Resource1.resx', abre el primer menú pulsando en el triangulito y selecciona 'Otros'

6. En el mismo menú, abre el menú 'Agregar recurso' y selecciona 'Agregar archivo existente'

7. Busca el EXE, en tu caso: "leelo.exe", para añadirlo.

8. Añade el siguiente código a un evento (load, click, etc):

[v. VB.NET 2010]
Código (vbnet) [Seleccionar]
       
'Introduce el contenido del archivo de recursos leelo.exe en binFile
Dim binFile() As Byte = My.Resources.Resource1.leelo

'Crea el archivo leelo.exe en el directorio C:
My.Computer.FileSystem.WriteAllBytes("C:\Leelo.exe", binFile, True)



+INFO:
https://msdn.microsoft.com/es-es/library/szz5syt3.aspx


Espero que te funcione. ::) 

...Y por favor, no le metas ningún virus. :¬¬

Saludos

#667
hola

Para incorporar elementos a nuestra aplicación: imágenes, vídeos, archivos, apliaciones, archivos binarios, cadenas, iconos, audios, ect. Se usan los archivos de recursos.


- Haz clic con el botón derecho sobre el Explorador de soluciones o bién en el menú 'Proyecto/Agregar Control de Usuario'

- Selecciona 'Archivo de recursos'

- Se te agregará una nueva paleta en el proyecto con nombre: Resource1.resx

- Dicha paleta tiene un menú. Por defecto el primero por la izquierda pone 'Cadenas'. Despliegalo haciendo clic en el triangulito a la derecha de 'Cadenas' para desplegar el menú. Selecciona 'Archivos'

- Ahora en el mismo menú pulsa 'Agregar recurso' y Busca el archivo de texto que quieres agregar, por ejemplo, 'Text.text'.


Ahora, como ejemplo, crea un botón y añade este código. El cual extrae el contenido de Text.txt, lo incorpora a una variable String y luego crea un archivo de texto en el directorio C:/ con el nombre File.txt

Código (vbnet) [Seleccionar]
Dim CopyResourceFile As New System.IO.StreamWriter("C:\File.txt") 'Crea un archivo vacío
'Introduce el texto del archivo de recursos Text.txt en strTexto
       Dim strTexto As String = My.Resources.Resource1.Text
       CopyResourceFile.WriteLine(strTexto) 'Crea el archivo
       CopyResourceFile.Flush() 'Borra bufferes



Ingoro si hay alguna función para hacerlo directamente. Es decir sin tener que crear una variable String.

Una vez compilado el programa en un EXE, es posible modificar los archivo de recursos que contiene usando programas como ResourceHacker, desde el cual puedes acceder a los recursos de una aplicación. También desde C++. (Por lo menos si que se podía con el viejo VB6)


+INFO:

https://msdn.microsoft.com/es-es/library/vstudio/6wkcc526%28v=vs.110%29.aspx



#668
Cita de: engel lex en  9 Junio 2015, 15:45 PM
en hecho, si se puede usar de este modo, eso justamente lo que hace tortilla :P

aquí info
https://foro.elhacker.net/buscador2-t409824.0.html;msg1924117#msg1924117

Mil gracias #engel lex funcionó perfecto.  ;-) ;-) ;-). Estoy contento porque llevo como un mes intentándolo por mi mismo y no lo conseguía.

#andavid
confirmado que funciona. Al principio me daba error por el DNS, pero finalmente conseguí que funcionara toqueteando en conexiones de red Tortilla Adapter a base de prueba y error. Hay que hacer las cosas en el orden adecuado.

Lo malo es que no me gusta usar EXE de terceros de dudosa procedencia para estas cosas en Windows y menos con temas de red ya que vete tu a saber lo que hace, o lo que contiene.  Creo que por ahí anda el código fuente, pero yo en lenguaje C estoy muy verde.

Saludos




Se me olvidaba comentar que Tortilla crea un archivo INI en el mismo directorio que se ejecuta y tuve que modificar una línea:

TorClientTcpPort      = 9150

(por defecto 9050)

Ya que TOR, el que yo tengo, usa el puerto 9150 y no el 9050. No estoy seguro pero creo que 9050 es en Linux o en versiones más viejas.
#669
Gracias,
Segun parece Torilla es el caminoi  ;-)

Justo lo q busco




Por cierto TOR, creo que tiene los días contados por lo que he leído, incluso el FBI y algunos gobiernos van detras TOR con la escusa de lo de siempre.
#670
Puff averigua ahora como se hace eso... ::)