elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 [502] 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 ... 1236
5011  Sistemas Operativos / Windows / Re: Descompilar S.O en: 6 Julio 2015, 07:07 am
Intenta especificar claramente que es lo que pretendes hacer o averiguar, deberías empezar por documentarte, leer para aprender sobre los diversos conceptos que definen a un sistema operativo para reformular una pregunta con sentido, ya que "Descompilar el sistema operativo" es una frase abierta a demasiadas interpretaciones.

El S.O, Windows, no es una unidad, es un entorno compuesto por muchos tentáculos, cómo librerías, aplicaciones, imágenes, y otro tipo de recursos y archivos esenciales o no, además, sus aplicaciones y librerías están desarrollado en diferentes lenguajes, la mayoría está desarrollado en C/C++, pero Windows también se compone de aplicaciones desarrolladas en C# (metro WPF), y varios scripts en diferentes lenguajes, "decompilar el sistema operativo" sería descompilar esos miles y miles de compononentes compilados adicionales pero necesarios para el funcionamiento del S.O.

En cambio, si te refieres unicamente a descompilar el Kernel de Windows, es decir, el core o corazón de Windows, el cual tampoco se trata de un único archivo sino que también se compone por varios archivos esenciales en conjunto, pues sin duda sería una tarea menos laboriosa dentro de lo que cabe que descompilar miles de aplicaciones y librerías, pero no, no esperes obtener el código fuente legible si eso es lo que estás buscando, casi suena cómo a una broma ese tipo de cuestión...

Pongamos cómo ejemplo el archivo Kernel32.dll, pues puedes usar un descompilador cómo ExeToC para intentar reproducir unidades de código muy parciales, y/o puedes utilizar un desamblador para obtener las instrucciones cómo son, el código máquina, el código fuente en su más puro estado. Puedes ver y analizar las llamadas que este archivo hace a la API de Windows, ¿pero que más?.

Con el desamblador IDA por ejemplo podrías obtener un código legible en C/C++ pero muy parcial y siempre que hubiese un archivo de información de depuración del archivo a desamblar en cuestión (archivo.pdb), pero windows no se distribuye con este tipo de archivos de depuración...

Saludos
5012  Programación / Programación General / Re: Hilo oficial: Solicitudes de Expresiones Regulares en: 5 Julio 2015, 18:33 pm
Pues aquí va una expresión regular para capturar una Ipv6:
Código
  1.        ''' ----------------------------------------------------------------------------------------------------
  2.        ''' <summary>
  3.        ''' A pattern that matches an IPv6 address.
  4.        '''
  5.        ''' For Example:
  6.        ''' FE80:0000:0000:0000:0202:B3FF:FE1E:8329
  7.        ''' </summary>
  8.        ''' ----------------------------------------------------------------------------------------------------
  9.        Public Const Ipv6 As String =
  10.            "(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"

o una Ipv4, cómo expresión alternativa a la que ha publicado WHK:
Código
  1.        ''' ----------------------------------------------------------------------------------------------------
  2.        ''' <summary>
  3.        ''' A pattern that matches an IPv4 address.
  4.        '''
  5.        ''' For Example:
  6.        ''' 127.0.0.1
  7.        ''' </summary>
  8.        ''' ----------------------------------------------------------------------------------------------------
  9.        Public Const Ipv4 As String =
  10.            "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"

PD: Sintaxis VB.Net

Saludos
5013  Foros Generales / Foro Libre / Re: Base de datos de libros o películas en: 5 Julio 2015, 14:20 pm
¿Importa el formato de la bd?.

Aquí tienes la base de datos completa de películas de IMDB con 3.389.398 títulos.
ftp://ftp.funet.fi/pub/mirrors/ftp.imdb.com/pub/movies.list.gz
( Comparar cantidad con ➢ http://www.imdb.com/stats )

Fuente(s):
http://www.imdb.com/interfaces
http://opendata.stackexchange.com/questions/1073/where-to-get-imdb-datasets

Saludos
5014  Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets para VB.Net !! (Compartan aquí sus snippets) en: 5 Julio 2015, 06:52 am
Buenas queria preguntas si en este hilo solo se puede publicar codigo de vb y c# o tambien se puede de otro lenguajes

Ya que me he dado la tarea de traducir parte del codigo aqui ya publicado y otro mio en el lenguaje Delphi  o mejor lo pongo en otro post?

Este hilo es para publicar códigos de VisualBasic.Net, aunque .Net no es solamente VB.Net y C#, pero Delphi no forma parte de .Net, lo mejor será que crees un post en la sección de programación general.

Saludos!
5015  Programación / .NET (C#, VB.NET, ASP) / [SOURCE] Algoritmo KeyLogger (RawInput) en: 4 Julio 2015, 18:31 pm
INTRODUCCIÓN


Buenas!.

La forma tradicional de capturar las pulsaciones del teclado es mediante un hook del teclado, sin embargo, esta técnica está deprecada en .Net, ya que existe una forma alternativa o "moderna" que aporta bastantes mejoras (sobre todo mejoras de rendimiento), RawInput (el cual también sirve para sustituir a un LL-Hook del mouse):

About Raw Input

Citar
The raw input model is different from the original Windows input model for the keyboard and mouse.

In the original input model, an application receives device-independent input in the form of messages that are sent or posted to its windows, such as WM_CHAR, WM_MOUSEMOVE, and WM_APPCOMMAND. In contrast, for raw input an application must register the devices it wants to get data from.

Also, the application gets the raw input through the WM_INPUT message.

There are several advantages to the raw input model:

    An application does not have to detect or open the input device.
    An application gets the data directly from the device, and processes the data for its needs.
    An application can distinguish the source of the input even if it is from the same type of device. For example, two mouse devices.
    An application manages the data traffic by specifying data from a collection of devices or only specific device types.
    HID devices can be used as they become available in the marketplace, without waiting for new message types or an updated OS to have new commands in WM_APPCOMMAND.

Siempre tuve curiosidad por RawInput pero nunca me animé a implementar este modelo ya que sabía que iba a ser una auténtica pesadilla de P/Invoking, pero al final la curiosidad pudo conmigo, y tras analizar decenas de ejemplos y semi-ejemplos en C#, acabé acumulando suficiente información para desarrollar el core de un keylogger para uso genérico en VB.Net.





DESCRIPCIÓN


Esto NO es un programa, es un algoritmo o código que encapsula los datos y las definiciones de la API de Windows de los miembros de RawInput, junto a todo lo demás adicional y necesario, exponiendo sus funcionalidades a través de una Class, con propiedades, y eventos.

Se puede decir que es la base o el core para poder desarrollar la UI de un KeyLogger, ya que usando esta Class solamente sería necesario diseñar la UI y/o adaptar este código si fuese necesario según las necesidades del programador por ejemplo para monitorizar las ventana que tiene el foco activado, o la interpretación textual de las teclas del sistema, etc...

Hay varias cosas que perfeccionar y refactorizar en el código, no comparto este código cómo si fuese el mejor y más completo algoritmo del mundo, me he tomado la molestia de decorar bastante este post por que creo que el código cómo ejemplo está muy bien ...ha sido bastante laborioso y por ese motivo se merece una mención especial de esta forma (por mi parte), pero simplemente comparto el código para mostrarles una manera curiosa, distina y mejor, una alternativa "moderna" a la deprecada técnica de SetWindowsHookEx + CallNextHookEx + UnhookWindowsHookEx para llevar a cabo la misma tarea.





CARACTERÍSTICAS


  • Multi-Idioma
    El keylogger soporta distintos layouts del teclado.
    Gracias a esto, se puede cambiar el comportamiento de las pulsaciones en cualquier momento, por ejemplo del teclado Español (es-ES) al Inglés (en-US).

  • Multi-Dispositivo
    El Keylogger soporta varios dispositivos de teclado al mismo tiempo.
    NOTA: En teoría. Se intentan registrar todos los dispositivos conectados que sean de tipo "KEYBOARD", pero no lo puedo probar con certeza.

  • Soporte para caracteres especiales.
    Gracias a la función 'ToUnicodeEx' de la API de Windows, el Keylogger es capaz de interpretar caracteres especiales cómo la Ñ o la Ç.
    NOTA: En teoría. No lo he probado con el layout ruso por ejemplo.

  • Ignorar teclas, caracteres, o strings producidos por teclas muertas (dead keys).
    Se puede especificar una serie de teclas, caracteres, o strings que serán ignorados por el keylogger.

  • Controlar las operaciones de pegado (pasting) de texto (Ctrl+v).
    Se puede activar esta característica para que, mediante un evento, se nos notifique el texto que se ha pegado (si algún texto) al pulsar la combinación de teclas Ctrl+V.






DEMOSTRACIÓN


A la derecha está lo que escribo en un editor de texto, a la izquierda está lo que intercepta el keylogger y la interpretación de las teclas del sistema.



El código que he utilizado para desarrollar el ejemplo:
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private WithEvents keyLogger As InputDevice
  4.  
  5.    Public Sub New()
  6.  
  7.        Me.InitializeComponent()
  8.  
  9.        ' Instance an InputDevice object, which enumerates and registers the keyboards found.
  10.        Me.keyLogger = New InputDevice(Me.Handle)
  11.  
  12.        ' Set keyboard layout to the default culture, in my case 'es-ES'.
  13.        Me.keyLogger.Language = InputLanguage.DefaultInputLanguage.Culture.Name
  14.  
  15.        ' Handle text pasting operations (Ctrl+V).
  16.        Me.keyLogger.HandlePastes = True
  17.  
  18.        ' Avoid raising KeyPressed event for non-relevant keys for this app example:
  19.        ' Left/Right Shift, Alt, AltGr, CapsLock, NumLock, and Left/Right Win key.
  20.        Me.keyLogger.IgnoredKeys = {Keys.ShiftKey, Keys.Menu, Keys.CapsLock, Keys.NumLock, Keys.LWin, Keys.RWin}
  21.  
  22.        ' Me.keyLogger.IgnoredChars = {"^"c}
  23.        ' Me.keyLogger.IgnoredCharsComparer = EqualityComparer(Of Char).Default
  24.  
  25.        ' Me.keyLogger.IgnoredStrings = {"^^"}
  26.        ' Me.keyLogger.IgnoredStringsComparer = StringComparer.OrdinalIgnoreCase
  27.  
  28.    End Sub
  29.  
  30.    Private Sub KeyLogger_KeyPressed(ByVal sender As Object, ByVal e As InputDevice.KeyPressedEventArgs) _
  31.    Handles keyLogger.KeyPressed
  32.  
  33.        Me.Label_Handle.Text = String.Format("Device Handle: {0}", e.DeviceInfo.DeviceHandle.ToString)
  34.        Me.Label_Type.Text = String.Format("Device Type: {0}", e.DeviceInfo.DeviceType)
  35.        Me.Label_Name.Text = String.Format("Device Name: {0}", e.DeviceInfo.DeviceName.Replace("&", "&&"))
  36.        Me.Label_Descr.Text = String.Format("Device Description: {0}", e.DeviceInfo.DeviceDescription)
  37.        Me.Label_Key.Text = String.Format("Device Key: System.Windows.Forms.Keys.{0}", e.DeviceInfo.Key.ToString)
  38.        Me.Label_DevCount.Text = String.Format("Devices Count: {0}", Me.keyLogger.DeviceCount.ToString)
  39.  
  40.        Select Case e.DeviceInfo.Key
  41.  
  42.            Case Keys.Enter
  43.                e.DeviceInfo.Chars = ControlChars.CrLf & "{ENTER}"
  44.  
  45.            Case Keys.Back
  46.                e.DeviceInfo.Chars = "{BACKSPACE}"
  47.  
  48.            Case Keys.ControlKey
  49.                e.DeviceInfo.Chars = "{CTRL}"
  50.  
  51.            Case Else
  52.                ' ...
  53.  
  54.        End Select
  55.  
  56.        Me.TextBox1.Text = e.DeviceInfo.Chars
  57.        Me.TextBox2.AppendText(e.DeviceInfo.Chars)
  58.  
  59.    End Sub
  60.  
  61.    Private Sub KeyLogger_HotkeyPastePressed(ByVal sender As Object, ByVal e As InputDevice.HotkeyPastePressedEventArgs) _
  62.    Handles keyLogger.HotkeyPastePressed
  63.  
  64.        Me.TextBox2.AppendText("{INIT_PASTE}" & e.ClipboardData & "{END_PASTE}")
  65.  
  66.    End Sub
  67.  
  68.    Private Sub Button_Clean_Click(sender As Object, e As EventArgs) _
  69.    Handles Button_Clean.Click
  70.  
  71.        Me.TextBox2.Clear()
  72.  
  73.    End Sub
  74.  
  75.    Private Sub Button_Dispose_Click(ByVal sender As Object, ByVal e As EventArgs) _
  76.    Handles Button_Dispose.Click
  77.  
  78.        If Me.keyLogger IsNot Nothing Then
  79.            Me.keyLogger.Dispose()
  80.        End If
  81.  
  82.    End Sub
  83.  
  84. End Class





DIAGRAMA DE CLASS


v





CÓDIGO FUENTE


http://pastebin.com/sMGREDTj
http://pastebin.com/u7uKf8ge

Espero que les haya gustado.

Si encuentran cualquier bug por favor coméntenlo aquí.

Saludos!
5016  Programación / Ingeniería Inversa / Re: Evitar que se minimize esta maldita app... en: 4 Julio 2015, 09:15 am
Mil gracias MCKSys y Mad Antrax.

A ese 03 que está cerca del final lo cambias por un 02 y la ventana ya no se minimiza al hacerle click al botón compare.

Al hacer eso, la ventana no se minimiza, pero el resto de botones ya no funcionan tras darle al botón "Compare", se quedan desactivados, por lo que es necesario reiniciar la app...

El valor correcto parece ser el 01, en lugar del 02. Todo parece funcionar bien, espero no encontrarme ninguna anomalía cómo la que he comentado.

Saludos
5017  Programación / Programación General / Re: ¿Chica programadora? en: 3 Julio 2015, 18:50 pm
¿por qué no?, hay muchas, muchas féminas programadoras... aquí, allá, y con certificaciones profesionales de Microsoft u otra compañia.

Un ejemplo:
https://en.wikipedia.org/wiki/Adele_Goldberg_%28computer_scientist%29

y varios ejemplos más en la wikipedia:
https://en.wikipedia.org/wiki/Women_in_computing
(abajo del todo de la página)

Aparte de lo que ha comentado @Drvy, tampoco es solo que haya mayor interés por los hombres, es que las mujeres pueden encontrarse muchas más barreras que los hombres para desarrollarse y avanzar en el sentido laboral, es igual que la mala costumbre que algunos conservan de pensar que las mujeres son malas conductoras, por que si, sin razón, pues algo parecido pasa también con las mujeres programadores ...¿por qué?, suongo que son simples prejuicios por que sois minoria en la programación.

Y aquí tienes esto que me h a resultado curioso, es la historia de una chica normal que cuenta algunas de sus experiencias vividas cómo programadora a lo largo de 20 años, algunas partes puede que te resulten deprimentes (y machistas xD), pero otras puede que te motiven ;):
https://medium.com/@sailorhg/coding-like-a-girl-595b90791cce

Saludos
5018  Programación / Programación General / Re: Duda Brainfuck en: 3 Julio 2015, 18:34 pm
Pero... entonces ¿sólo se puede mostrar carácteres por pantalla con ese lenguaje? ¿No sirve para nada más?

Mostrar caracteres es solo una manera de interpretar los bytes, los valores asignados a cada celda.

Es un lenguaje muy extravagante, ¿para que más esperas que se utilice comunmente si no es para saciar la curiosidad de representar un texto? xD.


no entiendo como se puede hacer un while

El loop de tipo while se hace con los símbolos [, y ], cómo ya he comentado.

Aquí tienes una IDE que incluye un generador automático de código brainfuck para cualquier cadena de texto:
http://4mhz.de/bfdev.html

Saludos!
5019  Programación / .NET (C#, VB.NET, ASP) / Re: Obtener porcentaje de descarga desde un módulo en: 3 Julio 2015, 17:00 pm
No trabajo para ninguna empresa ni tengo intención de ello, ni creo que pueda.

No te preocupes, la mayoría de usuarios (y moderadores) tampoco trabajamos para empresas, si lo hicieramos probablemente no tendriamos tiempo para pasarnos a ayudar por aquí a los demás, cómo es el caso de algún que otro moderador que si se dedica a la programación profesional y que ya no se le ve el pelo por el foro...



B. Acabo de empezar con VB.NET hace como un par de meses o tres, más o menos.
Empecé tonteando un poco para adaptarme al entorno, del cual solo he usado seguramente como el 2% de lo que tiene.

Si acabas de empezar hace unos meses entonces no has podido llegar a tocar ni un 0,2% en ese tiempo. No exagero, creeme, la librería de classes de .Net Framework es colosalmente extensa, más de lo que te puedes imaginar, igual que todos los conceptos que se pueden aprender.



Estas cosas:
AddHandler, Task, WithEvents, RaiseEvent ,IsNullOrWhiteSpace, InvokeRequired

todavía no se como van, es nuevo para mí, tendré que mirar uno por uno para poder entender el código y conseguir lo que busco.

La declaración AddHandler asocia un evento a un método.

La declaración RemoveHandler desaasocia un evento de un método.

La declaración RaiseEvent dispara un evento.

El keyword WithEvents indica que el objeto declarado puede disparar eventos, por ende, esto posibilita que se pueda usar directamente el keyword Handles para declarar el evento que controla un método (ej: sub metodo() Handles evento; Esto así mismo evita la necesitad de llenar el código con las sentencias AddHandler y RemoveHandler, queda muy feo cuando no es necesario hacerlo.

La extensión o función String.IsNullOrWhiteSpace determina si un string es nulo, vacío, o solo contiene espacios en blanco.

El método Threading.Tasks.Task.Factory.StartNew invoka un método encapsulado en un delegado o expresión Lambda, en un nuevo hilo (thread).

La propiedad Control.InvokeRequired determina si un control debe ser invocado, esto será así siempre que se intente llamar al control desde un hilo distinto al hilo donde se creó el control, de lo contrario, si no se invoca en dicha condición, se producirá una excepción de tipo Cross-Thread Exception.



Citar
buscando información sobre GDI, que siempre aparecen ejemplo de programas completos y bastante complejos.

Bueno, ese argumento es discutible, por que GDI/GDI+ de por si ya es algo complejo según se mire, hay características muy sencillas pero también otras muchas que se dificultan.



Hace poco modifiqué un programa de Leandro (no se qué) que semitransparenta un Form de modo que se vean nítidamente los controlos y demás pero el fondo del form sea semitransparente.

Pero tengo que decir que no comprendo el código completo. Tuve que modificarlo porque su código degradaba el form en dos colores sin opción o propiedad 'set' para cambiar dichos colores o ponerlo todo a un solo color.

Un consejo:
Olvida todos esos hacks para hacer transparente o semi-transparente un Form, WinForms no fue pensado ni está capacitado (de forma natural) para ese tipo de cosas, la transparencia y WinForms se llevan muy mal.

Todo ese tipo de códigos "transparentes" provocan un efecto muy negativo en la app, ya que ralentizan el form (todo lo que compone el form, sus controles), y mucho más si en dicho código se ua el hack de suplantar la función CreateParams para reducir el flickering. Si hicieses cualquier tipo de test de rendimiento en una app "transparente" (el tiempo que tarda un RichTextBox en mostrar X cantidad de caracteres por ejemplo) te dará resultados nefastos, y, si eres tan meticuloso (o tiquismiquis) cómo yo en ese sentido, entonces no querrás volver a hacer transparente una app utilzando ese tipo de técnicas esotéricas.

Confórmate con la manera natural de hacer transparente las cosas, ajustando la propiedad TransparencyKey.

Si quieres hacer algo más del estilo de ese tipo de códigos que mencionas, entonces olvida WinForms y ponte a programar en tecnología WPF, que está considerablemente más extendido en ese sentido, y en todos los demás sentidos también, ya que WPF es el sucesor de WinForms, y WPF sigue estando en desarrollo/actualización por parte de Microsoft, cosa que WinForms no.



porque en el momento que se me ocurre algo y quiero hacer una modificación, puede resultar o bien que  la modificación produzca un error que me obliga a modificar todo  o empezar casi desde el principio por incompatibilidad o bien haya pasado tanto tiempo desde que revisé el código que ya no recuerdo ni lo que hice y no se lo que hacía esto o aquello, sobre todo con códigos muy grandes.

Y por supuesto mi me memoria es pésima, cuando dejo de usar algo se me olvida, y es muy práctico tener un código de ejemplo para cuando lo necesite.

Existe algo llamado lineas de comentario (o documentación), aplícalo a tus códigos y no deberías tener problemas de memoria en el futuro :P, preferiblemente la documentación XML de .Net + la característica IntelliSense en la IDE o unas llamadas al Object Inspector, con eso es imposible perderte en códios grandes que estén XML-documentados.

En el código de ejemplo que publiqué arriba puedes ver un ejemplo de documentación XML para un método y sus parámetros:

Citar
Código
  1.    ''' ----------------------------------------------------------------------------------------------------
  2.    ''' <summary>
  3.    ''' Releases unmanaged and - optionally - managed resources.
  4.    ''' </summary>
  5.    ''' ----------------------------------------------------------------------------------------------------
  6.    ''' <param name="isDisposing">
  7.    ''' <c>True</c> to release both managed and unmanaged resources;
  8.    ''' <c>False</c> to release only unmanaged resources.
  9.    ''' </param>
  10.    ''' ----------------------------------------------------------------------------------------------------
  11.    Protected Sub Dispose(ByVal isDisposing As Boolean)
  12.       ...
  13.    End Sub

La documentación XML además también te permite añadir ejemplos de código con los tags: <example><code>CÓDIGO AQUÍ</code></example>, y muchas cosas más.

No se si lo he dejado del todo claro, pero por si no lo has pillado lo diré con otras palabras:
Cuando pasas el puntero del mouse por el nombre de un miembro en la IDE y te sale un tooltip con una descripción del miembro y de sus parámetros y tal, pues eso es lo que se consigue con la documentación XML, además la misma documentación también sirve para crear el archivo de referencia de una API, es decir, se documenta con XML los miembros de una librería .dll y se refleja toda esa información al compilar la dll en un archivo de ayuda (.chm, .html, pdf, etc).



Tengo cientos de plantillas de código simple y ejemplos sólo de VB, los cuales hacen lo básico y lo importante. Por supuesto son modificables y ajustables  a la necesidades del programa.

Quizás te pueda interesar este hilo:

Librería de Snippets para VB.Net !! (Compartan aquí sus snippets)



Citar
Tan sólo quiero:

Form1 (o cualquier otro, o módulo)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-Llama a la función y la URL
-Recibir información de descarga mientras se produce
-Opción cancelar
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
               ▲
                •
                •
                •
               ▼
Bloque de código aparte
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Función de descarga con la URL  
- Obtener información de descarga
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

Por lo tanto como ejemplo y como base, tan solo necesito un label el cual va a recibir la información del porcentaje, todo lo demás es irrelevante.

Bien, ¿pero hay algún problema con eso?, ¿el código que te mostré no te ha servido?.

Saludos!
5020  Programación / .NET (C#, VB.NET, ASP) / Re: Obtener porcentaje de descarga desde un módulo en: 2 Julio 2015, 21:02 pm
Lo que busco es tan simple como esto

¿Ese es el código completo que estás utilizando?, en ese caso, ¿còmo esperas que no se quede en blanco el label?, jeje, estás devolviendo un objeto una única vez, un objeto vacío/nulo.

En resumidas cuentas, descartando el resto del código esta es la trayectoria que haces, de la linea 5 a la 15, FIN.

Código
  1.    Public Class Form1
  2.  
  3.        Private Sub Button1_Click(...) Handles Button1.Click
  4.            ...
  5.            Label1.Text = ns.getProgress
  6.        End Sub
  7.  
  8.    End Class
  9.  
  10.    Class modDownloadURL
  11.        Public Progress As Object
  12.  
  13.        ReadOnly Property getProgress() As String
  14.            Get
  15.                Return Progress
  16.            End Get
  17.        End Property
  18.  
  19.    End Class

Primero llamas al método que descarga el archivo, y mientras tanto asignas el texto al label, pero solo lo asignas una vez, y el valor seguramente esté en blanco por que al objeto "Progress" no lo inicializaste con un valor inicial y el texto del label se asigna más rápido de lo que la operación asincrona tarda en disparar el evento del WebClient para asignarle un valor inicial a ese objeto "Progress".

Vamos, que despues de la primera vez que le asignas el texto vacío al label, no llegas a actualizar el texto del label nunca más.

Debes controlar cuando los eventos del Webclient se disparan, para actualizar el texto del label cuando eso suceda (cómo en el ejemplo que he publicado arriba).
El control no se va a actualizar por arte de magia.


¿Hay algo que no entiendas de tú código, de lo que estás haciendo?.


Saludos!
Páginas: 1 ... 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 [502] 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 ... 1236
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines