Mostrando las entradas con la etiqueta keyremap. Mostrar todas las entradas
Mostrando las entradas con la etiqueta keyremap. Mostrar todas las entradas
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
7/12/2020 02:38:00 p.m.
csharp
,
keyremap
,
programacion
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.
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.
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.
Vamos a programar #86 - Reasignando teclas del teclado.
Hola de nuevo a todos, el día de hoy vamos a ver cómo reasignar algunas botones
de nuestro teclado para que hagan otra cosa.
El código de la tecla que queremos usar es "E0 20" y el código de la tecla "Page UP" es "E0 49" pero ¿y después? Cómo ya mencione antes, Windows es el encargado de gestionar las pulsaciones y guarda esta configuración en el registro. Para acceder a ella, necesitamos encontrar la siguiente clave:
Hace unos días en la eterna lucha del hombre contra la máquina, mi teclado
simplemente decidió que 15 años de uso eran suficientes y simplemente ya no
quiso funcionar. Mi teclado compaq 5185 fue el primero que tuve y lo use de
forma bastante extenuante.
Algo paso que simplemente ya no quiso reconocer las pulsaciones. Cómo siempre
que "reparo" algo hay una enorme tendencia a que me "sobren" piezas,
simplemente decidí guardarlo. Para su reemplazo, saque un teclado que un amigo
me regaló hace mucho (cómo el de la primer imagen), es más compacto y mas
viejo que el mio pero totalmente funcional salvo por unos cuantos botones.
Mi primer teclado tenía la ventaja que tenia varios botones adicionales; los
mas importantes (para mi) eran: volumen arriba, volumen abajo, silencio y
calculadora. El reemplazo también tiene unos botones extra (seis para ser
exacto), pero al conectarlo y presionarlos, ninguna hizo nada. Busqué los
controladores pero no encontré ninguno para mi sistema operativo. Las teclas
"normales" funcionan cómo deben, pero las "especiales" no.
Para solucionar mi problema busque en internet y encontré que todas las
pulsaciones del teclado son gestionadas por el sistema operativo, es decir, si
presionamos una tecla, está genera un código pero nuestro amigo Windows es el
responsable de que pasa después y no solo eso, posee la capacidad de reasignar
las pulsaciones.
Tomando en cuenta lo anterior, vamos a buscar una forma de re-asignar una
tecla, pero hay una advertencia, vamos a modificar el registro de Windows (el
registro prácticamente es un lugar donde se guardan las configuraciones de una
computadora con ese sistema operativo), si sigues los pasos que voy a mostrar
no habrá ningún problema, pero si mueves más "cosillas" puedes hacer que el PC
no inicie correctamente.
Antes que nada veamos unos cuantos códigos para algunas teclas.
|
US key assignment |
Base Make |
|---|---|
| Insert |
E0 52 |
| Delete |
E0 53 |
|
Left Arrow |
E0 4B |
| Home |
E0 47 |
| End |
E0 4F |
|
Up Arrow |
E0 48 |
|
Dn Arrow |
E0 50 |
|
Page Up |
E0 49 |
|
Page Down |
E0 51 |
|
Right Arrow |
E0 4D |
Para nuestra demostración vamos a usar la tecla "Page Up" y la vamos a
reasignar para silenciar el volumen del sistema. La siguiente tabla
muestra algunos de los códigos de teclas multimedia.
| CODE | ALIAS |
|---|---|
| E0 6A | VK_BROWSER_BACK |
| E0 69 | VK_BROWSER_FORWARD |
| E0 67 | VK_BROWSER_REFRESH |
| E0 68 | VK_BROWSER_STOP |
| E0 65 | VK_BROWSER_SEARCH |
| E0 66 | VK_BROWSER_FAVORITES |
| E0 32 | VK_BROWSER_HOME |
| E0 20 | VK_VOLUME_MUTE |
| E0 2E | VK_VOLUME_DOWN |
| E0 30 | VK_VOLUME_UP |
| E0 19 | VK_MEDIA_NEXT_TRACK |
| E0 10 | VK_MEDIA_PREV_TRACK |
| E0 24 | VK_MEDIA_STOP |
| E0 22 | VK_MEDIA_PLAY_PAUSE |
| E0 6C | VK_LAUNCH_MAIL |
| E0 6D | VK_LAUNCH_MEDIA_SELECT |
| E0 6B | VK_LAUNCH_APP1 |
| E0 21 | VK_LAUNCH_APP2 |
El código de la tecla que queremos usar es "E0 20" y el código de la tecla "Page UP" es "E0 49" pero ¿y después? Cómo ya mencione antes, Windows es el encargado de gestionar las pulsaciones y guarda esta configuración en el registro. Para acceder a ella, necesitamos encontrar la siguiente clave:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
Ahí crearemos un nuevo valor binario.
La estructura que debe de tener el valor es de la siguiente forma:
- 00,00,00,00 > encabezado
- 00,00,00,00 > flags
- 02,00,00,00 > número de entradas más uno
- xx,xx,xx,xx > el código de las teclas a reasignar empezando por el código que queremos que se aplique seguido por el código de la tecla
- 00,00,00,00 > terminación.
Hay que notar que cada código tiene los valores "invertidos", es decir, la tecla de silencio tiene el código "E0 20" pero al momento de escribir el valor en el registro, lo ponemos cómo "20 E0" y lo mismo va para todas las teclas, la tecla "Page Up" tiene el codigo "E0 49" pero lo escribimos cómo "49 E0". Al reiniciar la computadora y presionamos la tecla "Page Up", el sistema se debería de silenciar (en caso contrario algo salio mal). Si quieres hacer el proceso de forma automática, puedes copiar el siguiente texto y guardarlo cómo "key.reg" usando el bloc de notas.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,20,E0,49,E0,00,00,00,00
Cada vez que hagas un cambio se debe de reiniciar la computadora.
Finalmente y a manera de ejemplo, supongamos que queremos cambiar las teclas que ya cambiamos, pero ademas queremos que la tecla numérica 7 suba el volumen, tendríamos algo cómo lo que sigue:
- 00,00,00,00 > encabezado
- 00,00,00,00 > flags
- 03,00,00,00 > número de entradas más uno
- 20,e0,49,e0 > el código del primer juego de teclas
- 30,e0,47,00 > el código del segundo juego de teclas
- 00,00,00,00 > terminación.
Los leo luego.
6/22/2020 07:08:00 p.m.
4th Anniversary
,
aprende
,
keyremap
Suscribirse a:
Entradas
(
Atom
)














