Vamos a programar #88 - KeyRemap M (beta)
Hola de nuevo a todos, el día de hoy vamos a ver cómo es que funciona un programa al que decidí llamar "KeyRemap M" (en su versión beta).Cómo el programa aun está en modo beta, solo voy a explicar un poco su funcionamiento y ya que mucho del código va a cambiar, en cuanto libere la versión 1 explicare cada una de las partes del código (y también liberare el código fuente).
Para empezar, debes de descargar el programa (cómo es costumbre de mi dropbox). Y la forma de usarlo es realmente simple. Para empezar debemos de hacer clic en la caja de texto que dice "tecla a re-programar", cuando presionemos una tecla, aparecerá un número y lo debemos de dejar tal y cómo está (si presionas otra tecla, aparecerá un código diferente). Para la tecla de destino, podemos hacer dos cosas, la primera: revisar esta tabla que contiene algunos códigos o en el mismo programa vienen algunos.
Si queremos averiguar cual es el código de una de las teclas por ejemplo la tecla "e", puedes presionar la tecla cuando el la caja de texto "tecla a re-programar" está seleccionada y el código que resulte lo copias y lo pegas en la caja siguiente una vez hecho, vuelves a la caja de texto "tecla a re-programar"y presionas la tecla que quieres re-programar. Cuando hayas configurado las teclas que quires reasignar, debes de hacer clic en el botón que dice "Agregar" y con eso la combinación de teclas se agregará a la lista.
Cuando hayas agregado todas las combinaciones de teclas, en el menú "archivo" deberás de hacer clic en "Exportar REG" y se abrirá un cuadro de dialogo para guardar el archivo. Guarda el archivo y dale doble clic
Con eso se agregará la información al registro; solo para ver si se agrego de forma correcta, presiona la tecla de windows + r y en el cuadro "ejecutar" escribe "Regedit"
y busca la ruta "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]"
Tras reiniciar la computadora, la teclas debería de hacer su nueva función. Pero antes, he de aclarar que algunos códigos no funcionaran dependido de la configuración de algunos programas, por ejemplo; muchos juegos ignoran la configuración de windows y manejan por si mismos las pulsaciones. En otros casos, algunas teclas especiales no se pueden re-configurar y el ejemplo mas claro de ello es la tecla "Pausa-Inter" esta no es posible re asignarla usando este método (aunque muchos teclados ya ni la tienen).
Si todo salio bien, para re-establecer las teclas a su función normal, bastara con eliminar la clave "scancode map" del registro y reiniciar la computadora.
Y bien por ahora es todo. Cómo podrás ver, la aplicación aun no es fácil de usar, pero por eso es una versión beta, en el siguiente post trataremos de hacerla mas amigable con el usuario para que cualquiera sea capaz de usarla sin problema.
Los leo luego
Vamos a programar #87 - Camino a KeyRemap, MessageTextBox .
Hola de nuevo a todos, el día de hoy vamos a empezar un programa que nos sirva para re- configurar las teclas de nuestro teclado.En el post anterior vimos que es posible re-asignar algunas teclas, todo bien si conocemos cual es el código de la tecla que queremos cambiar (tanto la actual cómo la objetivo) pero actualmente existen teclados que tienen tantas teclas que no están dentro del estandar, que resulta difícil determinar el código buscando en Internet.
En este post veremos cómo es posible determinar el código de cada tecla usando un programa que escribiremos en C# (Si no te interesa, en el siguiente post veremos la versión final de este programa lista para usarse).
Para empezar, primero hay que saber cómo es que se "crean" las pulsaciones. En C# (y probablemente en windows) cuando presionamos una tecla, ocurren los siguientes tres:
- KeyDown
- KeyPress
- KeyUp
Supongamos que tenemos un control "ComboBox" llamado "MsCboKeyOut" al crear el manejador para el evento tendríamos algo cómo lo que sigue:
private void MsCboKeyOut_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyCode.ToString());
e.SuppressKeyPress = true;
}Si accedemos al procedimiento "KeyCode" y presionamos la tecla de silencio (mute), esta nos devolverá un valor de 173. Si hacemos memoria, en el post anterior vimos que el código de esa tecla era E020 hexadecimal o 57376 decimal que dista mucho de lo que nos entrego. Incluso haciendo pruebas con varias teclas, el valor maximo que obtuve fue 255 decimal (FF hexadecimal) por lo que si queremos usar este procedimiento para saber el código de las teclas "no normales" simplemente no nos sera posible.
La manera correcta de de saber el valor real de la tecla, es leyendo directamente el mensaje lo lleva. En C#, podemos sobrecargar el procedimiento "WndProc" que básicamente sirve para leer los mensajes. Pero cómo queremos ser capaces de utilizar el valor cuando el formulario tiene el foco (que es lo mas común), crearemos un control sencillo con la sobrecarga para que asi podamos utilizarlo.
using System;
using System.Windows.Forms;
namespace KeyRemap
{
class MessageTextBox : TextBox
{
public const int WM_KEYDOWN = 0x0100;
private uint TheValue = 0;
public string GetHexValue
{
get
{
return Convert.ToString(TheValue, toBase: 16);
}
}
public uint ShowKeyCode(uint TheNumber)
{
uint KeyValue = TheNumber;
uint KeyCode = ((KeyValue >> 16) % 256);
uint IsExtendedKey = ((KeyValue >> 24) % 2);
if (IsExtendedKey == 1)
{
KeyCode = FrmMain.EXTENDED_KEY_VALUE | KeyCode;
return KeyCode;
}
else
return KeyCode;
}
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_KEYDOWN:
base.Text = "";
base.Text = Convert.ToString(ShowKeyCode((uint)m.LParam));
TheValue = (uint)m.LParam;
break;
}
base.WndProc(ref m);
}
}
}
Con este control será mas sencillo interceptar el mensaje que contiene el código de la tecla. Para usarlo, simplemente agrega una nueva clase a tu proyecto y el evento "_KeyDown" del parámetro "e" , la propiedad "SuppressKeyPress" se debe de establecer el valor de "true" para que el texto que se escriba en el cuadro de texto, corresponda solamente al código de la tecla, si no se suprime la pulsación, si por ejemplo presionamos la tecla "u", en la caja de texto diría "uxx" (donde xx es el código de la tecla u).
Por ahora solo veremos esto y cómo aun falta implementar mucho código, la explicacion detallada vendrá en el siguiente post (junto con la versión ultra beta de "KeyRemap M"), por ahora si sabes programar en C# puede probar el control (y si algo anda mal me pueden avisar).
Los leo luego.
Suscribirse a:
Entradas
(
Atom
)










No hay comentarios. :
Publicar un comentario