Dim b As Integer
Const NumChars = "0123456789ABCDEF"
Rem Transforma un número en decimal
Rem S = Número (cualquier base)
Rem NumBase = Número de la Base
Rem 2=Binario, 8=Octal, 10=Decimal, 16=Hexadecimal
Rem Si hay un error, retorna -1.
Function ToDec(ByVal S As String, ByVal NumBase As Integer) As Long
Dim R As Long, I As Integer, P As Integer
R = -1
S = UCase(S)
If (NumBase = 2) Or (NumBase = 8) Or (NumBase = 10) Or (NumBase = 16) Then
R = 0
For I = 1 To Len(S)
P = InStr(NumChars, Mid(S, I, 1))
If (P = 0) Or (P > NumBase) Then
R = -1
Exit For
End If
R = R + (P - 1) * (NumBase ^ (Len(S) - I))
Next I
End If
ToDec = R
End Function
Rem Transforma un número decimal en otras bases
Rem N = Número a convertir
Rem NumBase = Número de la Base
Rem 2=Binario, 8=Octal, 10=Decimal, 16=Hexadecimal
Rem Si hay un error, retorna una cadena vacía.
Function FromDec(ByVal N As Long, ByVal NumBase As Integer) As String
Dim S As String
S = ""
If ((NumBase = 2) Or (NumBase = 8) Or (NumBase = 10) Or (NumBase = 16)) And (N >= 0) Then
Do
S = Mid(NumChars, (N Mod NumBase) + 1, 1) + S
N = Fix(N / NumBase)
Loop Until (N = 0)
End If
FromDec = S
End Function
Rem Convierte de Cualquier base a cualquier base.
Rem N = Núero a convertir
Rem fromBase = Base de origen (2, 8, 10, 16)
Rem toBase = base destino (2, 8, 10, 16)
Function Convert(ByVal N As String, ByVal fromBase As Integer, ToBase As Integer) As String
Dim Nm As Long, S As String
Nm = ToDec(N, fromBase)
If (Nm = -1) Then
S = ""
Else
S = FromDec(Nm, ToBase)
End If
Convert = S
End Function
Private Sub Command1_Click()
Text2.Text = Convert(Val(Text1.Text), Combo1.ItemData(Combo1.ListIndex), Combo2.ItemData(Combo2.ListIndex))
End Sub
Private Sub Form_Load()
b = 1
Combo1.Clear
Combo1.AddItem "Binario"
Combo1.ItemData(Combo1.ListCount - 1) = 2
Combo1.AddItem "Octal"
Combo1.ItemData(Combo1.ListCount - 1) = 8
Combo1.AddItem "Decimal"
Combo1.ItemData(Combo1.ListCount - 1) = 10
Combo1.AddItem "Hexadecimal"
Combo1.ItemData(Combo1.ListCount - 1) = 16
Combo2.Clear
Combo2.AddItem "Binario"
Combo2.ItemData(Combo2.ListCount - 1) = 2
Combo2.AddItem "Octal"
Combo2.ItemData(Combo2.ListCount - 1) = 8
Combo2.AddItem "Decimal"
Combo2.ItemData(Combo2.ListCount - 1) = 10
Combo2.AddItem "Hexadecimal"
Combo2.ItemData(Combo2.ListCount - 1) = 16
End Sub
Private Sub Timer1_Timer()
For I = 1 To 288 Step 10
Label3.Left = Label3.Left + b
If Label3.Left >= (Form1.Width - 2190) Or Label3.Left <= 120 Then b = b * -1 End If Next I End Sub
Visitas por el Mundo:
Hola gente! aprovecho este espacio para saludarlos y presentarme. I'm Pelonchas de Posadas Misiones, llevo 20 y estoy estudiando Ing. en Inf. Bueno ya fue, paso a contar que estuve mirando el Keylogger de Chuky y me pareció que había cosas para cambiar, así es como salio una nueva versión hecha por mi. El aspecto visual casi no lo toque, cabe aclarar que si cambia el color o algo de eso es porque no veía bien en mi monitor ;)
Bueno básicamente el alma del programa de Chuky es un Timer donde se llama a la función "GetAsyncKeyState" que está dentro de la librería "User32". Esta función devuelve "-32767" en caso de que el código-carácter que se indico en el argumento de dicha función, corresponda con la tecla presionada en el teclado. (En realidad la función es mucho mas complicada que solo eso, pero la información en español es escasa o busque mal, como sea no tengo intención de describirla en profundidad).
Bueno ya tenemos el código-carácter de la tecla presionada y ahora es cuando diferimos con Chuky, el plantea la idea de mediante un "Select Case" mandar a mostrar el carácter correspondiente. Esto es muy tedioso porque hay 256 posibilidades y no estoy dispuesto a hacer cada una, entonces encontré una serie de funciones, también de "User32", que ya hacían esto. La única que pude "hacer andar" fue "MapVirtualKey" que en pocas palabras traduce el código del carácter en el carácter, valga la repetición y no la redundancia.
La otra gran diferencia con el de Chuky es que el hace una función nueva por cada carácter a mostrar, yo plantee una sola función a la que se le pasa como argumento el carácter a mostrar y lo hace.
Cambios menores:
* Me pareció que si se podía borrar lo que se “tecleaba” no cumplía la función de Keylogger, entonces opte por sacar la función “resta” que permitía borrar lo ingresado.
* Cambié las teclas para mostrar y ocultar el formulario. Ahora se hace ambas con F10.
* Para funcionar el botón “Borrar Todo” era necesario otro Timer que me pareció innecesario, opte por quitarlo (al Timer) y además incluí un MsgBox para confirmar que se quiere borrar todo.
* “ON/OFF” servían para posibilitar la copia de lo “capturado” hasta el momento, para hacerlo habilitaban y deshabilitaban la edición del TextBox. Esto me pareció malo porque se podía adulterar accidentalmente lo capturado; en fin mi idea fue eliminar esos dos botones y puse uno solo que en cualquier momento que se desee se lo puede presionar y se guardará en el Clipboard/porta papeles lo seleccionado/sombreado en el TextBox (en caso de no seleccionar nada se copia todo el contenido).
* Los botones “Prendido” y “Apagado” los fusioné en uno solo y cambié los Caption’s porque me sonaba feo ;)
Aclaración: subo dos versiones, una Simple y otra Extendida. La simple contiene lo que explique hasta ahora. La Extendida es lo mismo más todas las teclas que se pueden presionar que no traduce la función. Es decir teclas como "[F1]" "[F2]" "[Enter]" "[Esc]" también los botones del mouse, no indica la posición pero si que botón fue presionado. En la versión simple las teclas que no se pueden traducir las pone como "|".
Haz click en los link para poder descargar los archivos por separado.
________________________________________
Versión SIMPLE | Versión EXTENDIDA
________________________________________
Bueno creo que eso es todo lo que toqué. Espero haber sido claro y ojala se entienda que los cambios no son por creerme superior a Chuky sino que es mi versión de cómo veo la solución de este problema.
Y ahora si plagiando a Chuky: Ante cualquier inconveniente comenten explicando su duda o problema. Si se les ocurre sugerir alguna idea para mejorar este código fuente, bienvenida sea, solo haz el comentario.
Espero que les haya gustado y hayan aprendido algo nuevo en este código fuente. Saludos, Pelonchas.

KeyLogger by Chuky
a las 8:26 p. m.Haz click aquí para bajar el archivo.
Una Pantalla del Programa:

Modo de uso:
Para poder comenzar a grabar en la caja de texto lo que se ingresa en el teclado, primero debemos presionar en el botón de "Prendido". Luego de haber hecho esto, ya podemos ocultar la ventana para que no levante sospechas presionando la tecla "F10", de esta forma todo lo que escribamos a través del teclado, quedará registrado en la caja de texto, y para volver a verlo (restaurar la ventana), debemos presionar "F9", de esta forma observaremos que todo lo ingresado del teclado quedará registrado en dicha caja de texto, en el caso que no queramos que se sigua tomando lo que se escribe por el teclado, deberemos apretar en el botón "Apagado". Si se desea copiar el texto directamente, procedemos a presionar el botón "ON" y acto siguiente nos habilita la caja de texto para que podemos seleccionar el texto y copiarlo y pegarlo en otro lugar. Para volver a deshabilitar la caja de texto, presionamos "OFF". Con el botón "Borrar Todo", podremos establecer que el contenido de la caja de texto sea vacio o nulo. Y para finalizar, presionando en el botón "Salir", cerramos el programa.
A tener en cuenta: El programa no toma ningún caracter especial, ni tampoco diferencia mayúsculas; solo es sensible a letras minúsculas sin tilde y números. Pero leyendo un poco el código fuente lo pueden renovar y hacer que permita tomar dichos caracteres que actualmente el programa no tiene en cuenta, solo deben saber que número de activación toma cada tecla y cada conbinación de teclas, y luego solo realizar el procedimiento adecuado, es sencillo pero largo.
Ante cualquier inconveniente comenten explicando su duda o problema. Si se les ocurre sugerir alguna idea para mejorar este código fuente, bienvenida sea, solo haz el comentario.
Espero que les haya gustado y hayan aprendido algo nuevo en este código fuente. Saludos, Chuky.

Ta - Te - Ti
a las 12:26 p. m.
