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 - Keyen Night

#231
En resumen if lo vas a usar para comprobar cualquier condición y try para capturar error. Como ya te habia dicho $Edu$, la mayoria de los tipos tienen TryParse, que devuelve false cuando no se pudo convertir.

Código (C#) [Seleccionar]
int variable;
bool conver;

conver = int.TryParse(textbox1.text, out variable));

if (conver == false)
{
MessageBox.Show("Introduzca un numero valido!");
}
#232
Es algo complicado que entiendas porque pasa eso porque eres nuevo en el tema, sin animos de ofender ;D te explicare lo mas sencillo que pueda

Yo se lo que intentas hacer, estas tratando de capturar un error cuando no se ingresa una letra, pero estas usando para comparar la función .Equals y una de sus caracteristicas es que el parametro de entrada es System.Object que soporta todos los tipos, así que como soporta todos los tipos si el usuario coloca un número o una letra o cualquier cosa, Equals si los 2 objetos no son iguales simplemenete retorna false sin errores. Equals puede comparar incluso una imagen con una letra aunque no tenga sentido.

Como dicen arriba te recomiendo leer muchísimo y prácticar aún más.
#233
.NET (C#, VB.NET, ASP) / Re: Problema con Clases
5 Octubre 2011, 20:51 PM
Las clases son la bendición de visual studio :xD puedes simplificar muchisimas cosas, las clases simples se basan en 3 cosas un contructor que inicializa los objetos necesarios y da valor a las variables usando o no parametros, los miembros públicos que están a disposición del usuario y los miembros privados que están a disposición de los públicos pero no a disposición del usuario. Entiendase por miembros subs, variables, funciones, propiedadesm etc.

Un ejemplo, sencillo, recuerda tener siempre en cuenta las 3 cosas para una clase simple. Igualmente te recomiendo para tu caso investigar sobre herencia y como funcionan las palabras para las declaraciones (private, public, shared, readonly, shadows, etc.)

Código (vb.net) [Seleccionar]

Public Class Persona

    Private _Nombre As String, _
    _Edad As Byte

    Public Property Nombre() As String
        Get
            Return _Nombre
        End Get
        Set(ByVal value As String)
            _Nombre = value
        End Set
    End Property

    Public Property Edad() As Byte
        Get
            Return _Edad
        End Get
        Set(ByVal value As Byte)
            _Edad = value
        End Set
    End Property

    Public ReadOnly Property EsMayorDeEdad() As Boolean
        Get
            Return _Edad >= 18
        End Get
    End Property

    Public Sub New(ByVal Nombre As String, ByVal Edad As Byte)
        _Nombre = Nombre
        _Edad = Edad
    End Sub

End Class


Si pones el código de la clase te puedo ayudar con el error específico
#234
Bool, booleana, boolean es un tipo así como string ó int, no solo cuando haces un condicional (if) aplicas boolean sino tambien como dice $Edu$ si tienes una función de tipo boolean, retorna true o false así como una función int puede retornar 1 ó 0 por ejemplo.
#235
De esa forma sigues trantando el control de forma no segura, lee el ejemplo y nota la diferencia.
#236
Los threads no pueden o al menos no deberian tener comunicación con los controles y esto se resuelve usando delegados como el ejemplo que te puse arriba ese ejemplo devuelve de manera segura el objeto Me. Si quieres setear el texto de un label en un thread debes hacer un delegado para eso, mira este ejemplo que acabo de escribir:

Código (vb.net,5,6) [Seleccionar]
Public Class Form1

   Public T As New Threading.Thread(AddressOf Thread_Sub)
   Public Sub Thread_Sub()
       SetControlText(Label1, "Texto cambiado") 'Aqui no da error
       'Label1.Text = "Texto cambiado" 'Aqui da error
   End Sub

   Public Delegate Sub SetControlText_Delegate(ByVal Ctrl As Control, ByVal Text As String)
   Public Sub SetControlText(ByVal Ctrl As Control, ByVal Text As String)
       If Me.InvokeRequired Then
           Me.Invoke(New SetControlText_Delegate(AddressOf SetControlText), New Object() {Ctrl, Text})
       Else
           Ctrl.Text = Text
       End If
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       T.Start()
   End Sub

End Class

#237
Creo haber entendido bien :xD sino aclarame más

Si el proyecto es corto y personal puedes definir Control.CheckForIllegalCrossThreadCalls como False y el ApartamentState del thread en STA para que los threads puedan tener acceso a los controles.

Si es algo más serio puedes usar siempre delegados, este ejemplo se refiere a Me

Código (vb.net) [Seleccionar]

    Delegate Function Me_Delegate() As Form
    Public Function _Me() As Form
        If Me.InvokeRequired Then
            Return Me.Invoke(New Me_Delegate(AddressOf _Me), New Object() {})
        Else
            Return Me
        End If
    End Function
#238
Usar el GC de .Net de manera manual no es malo pero si es considerado de mala práctica, mejor asegurate de llamar a .Dispose del Bitmap antes de volver a cargarlo, me explico:

Esto no se debe hacer:
Código (vb.net) [Seleccionar]
       Dim x As New Bitmap("C:\Ejemplo.png")
       Do While True
           x = Bitmap.FromFile("C:\Ejemplo.png")
       Loop


No tiene nada de malo el bucle infinito sino que nunca se destruye el objeto antes de volverlo a crear, una y otra vez se crea un objeto nuevo que a pesar de que lo estás creando en la misma variable, se está guardando en otra dirección en memoria y eso causa el error, en cambio así con el mismo bucle infinito, no pasa nada:

Código (vb.net) [Seleccionar]
       Dim x As New Bitmap("C:\Ejemplo.png")
       Do While True
           x = Bitmap.FromFile("C:\Ejemplo.png")
           'Aqui se puede trabajar con el Bitmap'
           x.Dispose()
       Loop


Puedes observar el Uso de memoria en los 2 casos, en el primero sube hasta dar error y en el segundo caso sube hasta que se dispara el GC automáticamente y baja el consumo, porque ya ha sido marcado el objeto como Dispose.

#239
Entonces es Hook por inyección de dll, debes tener en cuenta que Hookear es algo muy delicado, si instalas o desinstalas inadecuadamente el Hook puedes terminar con una bonita BSOD :xD o que el proceso crashee, debes usar C++ no hay otra opción :-X

Si estas buscando una dll en especifico basta con hacer tu una dll para inyectar en los procesos y descargar la dll que buscas, si estas generalizando y quieres detectar y descargar un tipo en especifico tienes que buscar como funcionan para ver como detectar ese tipo de inyección, con respecto a UPX, no hay que preocuparse porque cuando el dll esta cargado en memoria ya no está protegido. Por esto del Hook si estas dispuesto a hacerlo en C++ no tienes mucho de que preocuparte hay muchos ejemplos aqui en el foro incluso hay una clase en ASM/C++ hecha por [Zero] (Este tipo es un genio :xD) que la puedes usar en VS C++

Si no tienes el Source ni es .Net entonces no puedes hacer nada para evitar que el proceso no se habrá, a menos que estes dispuesto a hacerle un parche a el ejecutable, bastante difícil si eres principiante, si no tienes el Source pero es .Net puedes hacer un parche con .Net Reflector y el Add-Ins Reflexil, bastante fácil de hacer.
#240
1.- Tienes el source del exe que no quieres que habra sin la aplicación en C#?
2.- No te recomiendo .Net para hacer esto, pero si lo quieres intentar adelante, tengo experiencias personales con .Net y Hooks traumantes :xD

Los Hooks vienen de diferentes colores, tamaños y formas, hay muchos metodos para hacer Hook, busca como funcionan algunos de estos metodos para poder detectar su presencia, siempre dejan alguna marca que se puede detectar.