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

#1161
Cita de: EleKtro H@cker en 19 Noviembre 2012, 19:12 PM
PD: uso Dim mCheck(9999) porque la cantidad de checkboxes a agregar es indeterminada, se agrega un checkbox nuevo en el form por cada carpeta de una ruta previamente cargada, no se si puedo hacerlo de mejor manera eso...

Se me ocurre sumarr un indíce a dicha matriz mCheck por cada carpeta encontrada, es decir, Resizeas la matriz por cada indice.

Código (VB.NET) [Seleccionar]

Dim mCheck(0) as CheckBox() 'un indice

Private Sub BuscarCarpetas()
Dim i as integer = 0
for directorio in subdirectorios
i+=1 'se encontró una carpeta, sumo un indice
Array.Resize(mCheck,i) 'meto un indice mas a la matriz de CheckBoxes
for i as int32 = 0 to mCheck.length - 1
mCheck(i) = New CheckBox()
'y aqui sigues como esta
Next


De esta forma sólo creas los CheckBoxes que tú necesites basándote en las carpetas encontradas en un directorio. En cuanto al no poder controlar el evento de cierre, ¿Has probado metiéndole un Breakpoint o un MsgBox() para ver si se llama? ¿Has probado a utilizar el evento FormClosed en vez de FormClosing? ¿Probaste quitándole el Me.Formclosing y poniéndole MyBase.Formclosing? Ésto último no tiene mucho que ver xD pero ya sabes, la vida es rara.

No he detectado ninguna anomalía a simple vista, solo que no utilizas una variable y que Dim filesystem = CreateObject("Scripting.FileSystemObject") sobra porque hay una clase del Framework que nos permite trabajar de la misma forma (FileIO creo que era).

Saludos!
#1162
Joder que comedero de cabeza xD todo para encontrar que una vez generado el archivo Settings no se puede agregar configuraciones desde el código, como el tuyo de arriba o el que te había posteado (que ya lo corregí, pero no cargaba las configs). Para agregarlas tendrías que hacerlo dinámicamente, es decir, sobre el fichero de configuraciones, pues ya sea mediante serialización para convertir dichos valores de las propiedades a XML.

Se me ocurre que podrías hacer trampa en esto, es decir, creas una propiedad "CuantosChecked" donde añadiras los controles que están checkados. Pues si tienes el Checkbox2 el 5 y el 6 checkados la cadena que le pasarás a esa propiedad quedará así -> 256. Luego en el inicio de la app obtienes todos los CheckBox y obtienes un índice de dicha cadena. Si el CheckBox que has obtenido contiene el elemento del indice de la cadena (If checkbox2.contains(2) entonces lo checkas). Vamos, esto lo llevaba pensando tiempo ya, pero estaba intentando encontrar la forma limpia de implementarlo.

Te dejo un ejemplo. Funciona 100%, eso sí cualquier error ya sabes.

Código (VB.NET) [Seleccionar]

Public Class Form1

   Dim mCheck(5) As CheckBox 'matriz que contendrá los 5 CheckBox

   Private Sub GenerarPropiedades() 'metodo que generará la propiedad al producirse el cierre del formulario
       Dim CheckedN As String = Nothing 'la cadena que contendrá los CheckBoxes que estén Checkados
       For i As Int32 = 0 To mCheck.Length - 1 'recorro la matriz de los CheckBoxes
           If mCheck(i).Checked = True Then 'Si el CheckBox actual está checkado
               CheckedN &= i + 1 'Obtengo su indice y lo meto al string (si es Checkbox1 pues 1, si es chckbx2 pues 2) ...
           End If
       Next
       My.Settings.CuantosChecked = CheckedN 'Actualizo la propiedad
       My.Settings.Save() 'Guardo la propiedad
   End Sub
   Private Sub CargarPropiedad() 'método que comprobará que CheckBoxes fueron tildados la útlima vez
       Dim mCuantosChecked As Char() = My.Settings.CuantosChecked.ToCharArray 'Paso el String de la propiedad a una matriz
       'Simplemente hago esto para separar el String por indices (un caracter por indice)
       For Each caracter As Char In mCuantosChecked 'Recorro la matriz caracteres que contendrá los checboxes tildados
           For Each CheckboxN In mCheck 'Recorro la matriz de CheckBoxes, para comparar si está o no está tildado
               If CheckboxN.Name.Contains(caracter) Then
                   'Si el CheckBox actual contiene cualquier caracter de la propiedad
                   'que tiene los indices de los CheckBoxes tildados
                   CheckboxN.Checked = True 'Lo tildo
               End If
           Next
       Next
   End Sub
   Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
       'Este es el evento al que se llamará cuando se cierre la aplicación
       'Como ves al cerrar la aplicación llamamos al método GenerarPropiedades() para guardar los CheckBoxes que fueron tildados
       GenerarPropiedades()
   End Sub
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       For i As Int32 = 0 To mCheck.Length - 1
           mCheck(i) = New CheckBox() 'creo un CheckBox en cada espacio de la matriz
           With mCheck(i)
               .Text = "Checkbox" & i + 1 ' Le adjunto un nombre Checkbox1 / Checkbox2 y 3
               .Location = New Point(20, i * 30) ' Sin más los situo....
               .Name = "Checkbox" & i + 1
           End With
           Me.Controls.Add(mCheck(i)) 'Añado el control al formulario, es decir, lo dibujo
       Next
       CargarPropiedad() 'Cargo las propiedades una vez dibujados los CheckBoxes
   End Sub
End Class


Saludos!
#1163
Uhm como solo te interesan los CheckBoxes tildados (Checked = TRUE) pues ponle un condicional para que sólo guarde éstos últimos.

Ya me cuentas ;)

#1164
Cita de: EleKtro H@cker en 19 Noviembre 2012, 16:34 PM
Una vez conseguido eso, al volver a abrir la app (el form) necesitaría averiguar cuales checkboxes estaban clickados para seleccionarlos automáticamente

En ese momento deberias cargar las propiedades e ir comparando uno a uno los valores de las propiedades y si esta en True (Clickado) pues activar la propiedad Checked del CheckBox. Es decir, PropiedadCheckBox1 -> ¿True? -> Sí -> Activar CheckBox1 .. saltar ala siguiente propiedad.

No he probado el código, hace mil que no utilizo propieadades de forma dinámica (on the fly) pero bueno, este código lo que hace es generar X propiedades por cada X CheckBoxes que haya en una matriz mCheckBox (lo de la matriz lo puedes cambiar recorriendo por ejemplo los controles del Panel donde estén los CheckBox)

Código (VB.NET) [Seleccionar]

    Private Sub GenerarPropiedades(ByVal mCheckBox As CheckBox())
        For Each checkboxN As CheckBox In mCheckBox 'por cada CheckBox en mCheckBox
'Creo una propiedad con el nombre del CheckBox
'De esta forma cada CheckBox tendrá una propiedad equivalente
            My.Settings.Properties.Add(New Configuration.SettingsProperty(checkboxN.Name))
'Meto el valor de la propiedad Checked en la nueva propiedad que hemos creado para el CheckBox
            My.Settings.Properties.Item("CheckBox").DefaultValue = checkboxN.Checked
        Next
        My.Settings.Save()
    End Sub


Gracias por tu atención :)

Si necesitas ayuda para el siguiente caso (Cargar los CheckBoxes tildados mediante las propiedades) avisa.

Saludos!
#1165
Aludo al comentario de Keyen Night diciendo que en .NET independientemente del lenguaje que utilices (C# o VB) se trabaja con el mismo Framework, el de .NET. Por lo que en ambos lenguajes utilizaremos clases y métodos comunes aunque difiera la sintaxis del código y la manera en que se estructura el code. Ambos son poderosos y capaces de hacer lo mismo. Cabe decir que .NET compila el código en MSIL (código intermedio) que luego será llevado a nativo con el CLI/CLR en tiempo de ejecucción.
Estoy cansado de leer que VB es para newbies y C#/C++ es para proS lol no confundais .NET con C/C++ por favor :D

Saludos!
#1166
Aupa EleKtro H@cker,

buscas cambiar el valor de alguna propiedad guardada en my.settings o simplemente hacer comprobaciones con éstas? Sería mejor que fueras más claro : p

Ahora estoy en clase y no puedo echarle una buena ojeada, más tarde estaré disponible.

Espero tu respuesta,

Saludos!
#1167
Lo que buscas es que todos los CheckBox al ser clickados llamen a un mismo método. Con el "Handles" logras que las acciones de el método trabajen con el objeto que va con el "Handles", no con todos los objetos del mismo tipo.

Este ejemplo crea 3 CheckBox dinámicamente y los agrega al Formulario, sin haberlos dibujado con el IDE del Visual Basic. Después asocio a cada evento CheckedChange del Checkbox con la funcion "LlamadaCheckBox", donde se ejecutarán las instrucciones que desees. Es decir, todos los eventos CheckedChanged de tus CheckBox se asociarán a dicho método, y al producirse tal evento pues se llamará a dicha función.

Código (VB.NET) [Seleccionar]

Public Class Form1

' Esta es la función que se llamará al producirse el evento CheckedChange del CheckBox
   Private Sub LlamadaCheckBox(ByVal sender As Object, ByVal e As System.EventArgs)
       Dim CheckboxN As CheckBox = CType(sender, CheckBox) 'a partir del sender creo el CheckBox (paso de objet a CheckBox para poder utilizar sus propiedades)
       msgbox("Me pinchaste, la cagaste xD")
   End Sub
   
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       Dim mCheck(2) As CheckBox 'matriz que contendrá los 3 CheckBox
       For i As Int32 = 0 To mCheck.Length - 1
           mCheck(i) = New CheckBox() 'creo un CheckBox en cada espacio de la matriz
           With mCheck(i)
               .Text = "Checkbox" & i + 1 ' Le adjunto un nombre Checkbox1 / Checkbox2 y 3
               .Location = New Point(20, i * 30) ' Sin más los situo....
           End With
           AddHandler mCheck(i).CheckedChanged, AddressOf LlamadaCheckBox'Asocio el evento CheckedChange del CheckBox actual a la función LlamadaCheckBox
           Me.Controls.Add(mCheck(i)) 'Añado el control al formulario, es decir, lo dibujo
       Next
   End Sub
End Class


Espero haberte servido de ayuda!

Saludos!
#1168
Uhm, podrías restaurar el equipo a un punto anterior, donde el Avast todavía no estuviera instalado. También se me ocurre que podrías deshabilitar la opción de autoiniciar el Avast en cada inicio del Sistema, de esta forma cuando inicies sesión en Windows, Avast no se ejecutaría a no ser que lo abrieras, de esta forma podrías hasta eliminarlo.
Métodos alternativos como uso de Keyloggers para capturar la contraseña también son válidos, pero claro, tienes que saber como utilizar un Keylogger, que a su vez sea fiable e indetectable por el Avast.

No sé, igual podrías crear otro usuario en el sistema e iniciar sesión con éste, de esta forma el Avast no estaría presente.

Espero haberte servido de ayuda,

Saludos!
#1169
.NET (C#, VB.NET, ASP) / Re: Iniciando C#
17 Noviembre 2012, 22:58 PM
Cita de: makinavaja3500 en 17 Noviembre 2012, 21:36 PM
Antes de programar imagino que planificareis todo la estructura del programa (todas las opciones de los menús, excepciones, algoritmos, entrelazado de utilidades, etc).
Creo que habrá que tenerlo todo muy muy muy estudiado antes de empezar a programar. Hay aplicaciones que se podrán hacer mentalmente pero cuando es un programa extenso, ¿como planificáis todo?, ¿mentalmente, libreta, algún programa?.

En mi caso, bajo mi opinión, siempre intento ser lo más ordenado posible. Cuando tengo que resolver un problema, aunque pueda hacerlo mentalmente, si éste es extenso suelo resolverlo en folios, pues me aporta una mejor comprensión una vez finalizado el proceso.

Te sugiero que evalues los casos críticos que puedan darse en tu programa, es decir, los casos de prueba (en la universidad te rayan demasiado con esto menudos son xD), una vez los hayas estudiado pues es importante que pienses en como implementar lo que tengas pensado. Intenta que tus algoritmos, es decir, el código que utilices para resolver el problema, sea lo más claro posible y siga un orden estructurado, porque sino dejarías todo bastante lioso y hazme caso, si lo revisaras en unas semanas te sería complicado de entender. Intenta que estén lo más optimizados posibles. Como consejo, si estás haciendo una calculadora piensa como está estructurada una calculadora, si piensas en hacer un keylogger piensa en como está éste estructurado, de esta manera más o menos puedes hacerte a la idea de como programarlo.

En cuanto al diseño, nunca ha sido una preocupación, es lo último en lo que pienso, aunque sea una pieza elemental para la interacción Ordenador-Usuario, sólo tienes que tener una idea de con que controles vas a trabajar en la aplicación, eso sí, dales nombres identificatorios que sean descriptivos, pues tendrás que trabajar con algunos que estén repetidos.
#1170
Ingeniería Inversa / Re: Seguridad de un programa
17 Noviembre 2012, 16:44 PM
Buenas de nuevo!

Os cuento mis progresos, pues me he documentado acerca del Generador de Imágenes Nativas (Ngen.exe) del NET Framework y lo he utilizado en ensamblados como .dll y .exe.
Si aplicas ngen en cualquier ensamblado de .NET, el archivo resultante será la imágen en código nativo del anterior, pero claro, como anteriormente dije, necesitamos del Framework para poder ejecutarlo.

¿Por qué? Bueno, en dicho archivo generado por el ngen.exe no se habrá eliminado el código MSIL del ejecutable original ni sus metadatos. Aunque el código MSIL no sea útil ya que no necesitamos del compilador en tiempo de ejecucción del Framework, tenemos información relevante en los metadatos del ejecutable y dichos metadatos serán agregados a la sección del MSIL (código intermedio). Esto quiere decir que la aplicación generada por el ngen.exe tendrá código nativo e intermedio, por lo que este último no será eliminado haciendo que la aplicación sea fácilmente decompilada y posteriormente descifrada.

Hay protectores de código que emplean el método de generación de imágenes nativas a partir de un ejecutable, la diferencia es que estos protectores eliminan la sección de código intermedio MSIL y sólo dejan código nativo en la aplicación final, pero como ya dije, su precio tiende a ser caro.

También he estado probando packers para .NET, que como ya sabreis, empaquetan el código del ejecutable que le pasemos al packer y le meten una rutina de desempaquetamiento y cargado del ensamblado. De esta manera añadiendo capas y capas de Protección a ambos códigos tendríamos un ejecutable lo suficientemente seguro.

Saludos.