Click here to Skip to main content
6,595,854 members and growing! (18,395 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » Win32/64 SDK & OS » General     Intermediate License: The Code Project Open License (CPOL)

RusKey: mapping the Russian keyboard layout into the Latin alphabets

By Wanderley Caloni

An easy way to replace characters while typing in the keyboard.
VC7.1WinXPVS.NET2003, Dev
Posted:12 Oct 2005
Updated:15 Feb 2007
Views:92,645
Bookmarked:16 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
7 votes for this article.
Popularity: 2.96 Rating: 3.50 out of 5
2 votes, 28.6%
1

2

3
1 vote, 14.3%
4
4 votes, 57.1%
5

Introduction

Using a very simple hook, you can change the meaning of what the user is typing and put anything else. The process is even easier if what you want is to replace the characters typed one by one.

This is a very simple program that uses this technique to make the Russian keyboard layout easy to learn. I made it for myself, but maybe it can be useful for anyone else. At least the hook technique, flexible enough, is worthy to learn.

Why map characters

An alphabet is one of the many ways to represent the words of a language in writing. A written word is a set of letters meaning the sounds we use to pronounce this word. Every different sound is a different phoneme.

Even though the Russian alphabet is so different from the Latin alphabet, they share many phonemes. This means that we can get some Cyrillic letters and replace them directly to some Latin letters. However, after the translation, the position of this letter normally is different from the Latin keyboard layout. So we have a Latin letter in a different place in the keyboard. If made a near translation between the both, the Latin letters will be disposed like this:

Latin phonemes inside the russian keyboard layout

Ii is a bit different from the well-known qwert asdfg, isn't?

When typing using this pseudo-keyboard layout, the Latin layout is replaced for the Russian layout in a Latin letters set. So a person can practice a Russian keyboard even using the Latin alphabet. Cool, isn't? I can code using the misplaced letters, because the final result is the same. I just need to train my fingers to beat the same letters in different places. This way, if I would need to use Cyrillic, I already know where every Russian letter is supposed to be in the Russian keyboard.

Obs: Almost all the Russian letters can be replaced using a Latin one, but there're some exceptions. So I chose to ignore the translation in this case and put another letter instead. It is not necessarily a good choice for the phoneme, but it is required in order to write using all the available Latin letters.

Background

It would be nice to know something about the Win32 API function SetWindowsHookEx() and how to use it for message hooks.

Using the code

The code itself is already a useful program (at least for me +). You can use it for typing training in another keyboard layout system. The only thing to change inside the code is the correspondence of the letters, located inside the arrays below:

const TCHAR g_tzRussAlphabet[] = 
   _T("F<RLTAU{B:RKVYJGSHCNED}IOPf,rltauiop");
const TCHAR g_tzPortAlphabet[] = 
  _T("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");

The handling code is quite simple. It is about an original charset array search and consequent replace for its Latin brother (the same index inside another array):

      switch( pMsg->message )
      {
         case WM_CHAR:
         {
            LPTSTR ptzChar = 
               _tcschr(g_tzRussAlphabet, (TCHAR) pMsg->wParam);

            if( ptzChar )
            {
               size_t offset = ptzChar - g_tzRussAlphabet;
               pMsg->wParam = (WPARAM) g_tzPortAlphabet[offset];
            }
         }
      }

Points of Interest

While debugging a project that makes message hooks globally, the attention must be multiplied for three times or more. Any mistake you do inside the callback function can put the system down (like a MessageBox() called for any message, for example). However, once you're debugging a specific message for a specific process, generally the only process that will freeze will be the debuggee itself and the ones that depends directly on some frozen action.

History

15 Feb 2007 - updated the code to work with VS6 and using a makefile, allowing people to use several versions of Visual C++

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Wanderley Caloni


Member

Occupation: Web Developer
Location: Brazil Brazil

Other popular Win32/64 SDK & OS articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 23 of 23 (Total in Forum: 23) (Refresh)FirstPrevNext
GeneralRusKey Pinmembergeoyar7:24 15 Apr '07  
GeneralRe: RusKey PinmemberWanderley Caloni8:50 15 Apr '07  
GeneralCheck the Microsoft Keyboard Layout Creator PinmemberMihai Nita12:47 16 Feb '07  
GeneralRe: Check the Microsoft Keyboard Layout Creator PinmemberWanderley Caloni0:50 22 Feb '07  
Questioncannot run in another computer PinmemberMartinLeung22:44 24 Oct '06  
AnswerRe: cannot run in another computer PinmemberWanderley Caloni4:17 26 Oct '06  
GeneralRe: cannot run in another computer PinmemberMartinLeung16:23 26 Oct '06  
GeneralRe: cannot run in another computer PinmemberWanderley Caloni3:21 27 Oct '06  
GeneralAdvise PinmemberSMDtheone18:39 8 Feb '06  
GeneralRe: Advise PinmemberWanderley Caloni1:48 9 Feb '06  
GeneralGreat to disable cheating codes for kids PinmemberMarc Stern6:26 20 Oct '05  
GeneralRe: Great to disable cheating codes for kids PinmemberWanderley Caloni6:31 20 Oct '05  
GeneralCompatibility PinmemberMarc Stern2:56 20 Oct '05  
GeneralRe: Compatibility PinmemberWanderley Caloni3:12 20 Oct '05  
NewsRussian keyboard. PinmemberXoXoXo6:08 19 Oct '05  
GeneralRe: Russian keyboard. PinmemberWanderley Caloni6:51 19 Oct '05  
GeneralRe: Russian keyboard. PinmemberXoXoXo5:23 20 Oct '05  
GeneralRe: Russian keyboard. PinmemberWanderley Caloni6:28 20 Oct '05  
GeneralRe: Russian keyboard. PinmemberXoXoXo11:30 20 Oct '05  
GeneralSource code PinmemberRimas18:19 13 Oct '05  
GeneralRe: Source code PinmemberWanderley Caloni19:02 13 Oct '05  
GeneralRe: Source code Pinmembergohila10:24 19 Oct '05  
GeneralRe: Source code PinmemberWanderley Caloni14:10 19 Oct '05  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 15 Feb 2007
Editor: Chris Maunder
Copyright 2005 by Wanderley Caloni
Everything else Copyright © CodeProject, 1999-2009
Web16 | Advertise on the Code Project