Recent Resources
-
GLSL 4.0: Discarding Fragments to Create a Perf...
-
GLSL 4.0: Using Subroutines to Select Shader Fu...
-
Building a Complete Board-based Puzzle Game wit...
-
JIRA: Programming Workflows
-
.NET Generics 4.0: Container Patterns and Best...
-
Raw Meat: Game Design Tips from Team Meat's...
-
Sedge: An Automated Error Reporting Tool
Converting Scan Codes to ASCII
By Photon | Published Nov 12 1999 10:06 AM in DirectX and XNA
It is often the case in games, that keyboard input is needed to input text, rather than be used for usual game controls. This poses three basic problems:
These are the steps we'll use:
This returns the number of characters extracted. It will return 0 in the case that there was no conversion, or 1 or 2, depending multibyte character sets, for a valid output.
In most cases, using char(result[0]) would provide the desired output.
- Key identifiers in DirectInput are keyboard scan codes.
- Various international keyboards map scan codes differently, according to their layout.
- The same scan code can be translated to various ASCII codes, depending on the status of the shift key, and other such cases.
These are the steps we'll use:
- We'll use GetKeyboardLayout() to get the current keyboard layout.
- GetKeyboardState() will be used to retrieve the state of keys like shift, ctrl, alt, etc.
- Then using the current layout and scan code, using MapVirtualKeyEx() will give us a win32 virtual key (UINT type).
- The ToAsciiEx() function will finally convert the virtual key to 0 - 2 extended ASCII characters (unsigned short)
static int scan2ascii(DWORD scancode, ushort* result)
{
static HKL layout=GetKeyboardLayout(0);
static uchar State[256];
if (GetKeyboardState(State)==FALSE)
return 0;
UINT vk=MapVirtualKeyEx(scancode,1,layout);
return ToAsciiEx(vk,scancode,State,result,0,layout);
}
This returns the number of characters extracted. It will return 0 in the case that there was no conversion, or 1 or 2, depending multibyte character sets, for a valid output.
In most cases, using char(result[0]) would provide the desired output.



















Skaarah
Dec 03 2011 09:50 PM