SDL with Vista Keyboard issue

Team-
This is my first try with this email system so I hope it works. In any case I am codeing in C/C++ with VC++6. My program is going to be an awesone file share and chat program btw. On XP it works fine but in Vista the shift key does not work. I updated to 1.2.12 but it did not resolve the issue. I will post some code so you know what I’m doing>

string Details::proc_key(SDL_Event &event, string cpp_main_string)
{
//duhmod = SDL_GetModState();
//if (duhmod == KMOD_CAPS && duhmod == KMOD_LSHIFT)
// {cpp_main_string = cpp_main_string + “OO”;}

if( event.key.keysym.mod & KMOD_NUM ) printf( "NUMLOCK \n" );
    if( event.key.keysym.mod & KMOD_CAPS ) printf( "CAPSLOCK " );
    if( event.key.keysym.mod & KMOD_LCTRL ) printf( "LCTRL " );
    if( event.key.keysym.mod & KMOD_RCTRL ) printf( "RCTRL " );
    if( event.key.keysym.mod & KMOD_RSHIFT ) printf( "RSHIFT " );
    if( event.key.keysym.mod & KMOD_LSHIFT ) printf( "LSHIFT " );
    if( event.key.keysym.mod & KMOD_RALT ) printf( "RALT " );
    if( event.key.keysym.mod & KMOD_LALT ) printf( "LALT " );
    if( event.key.keysym.mod & KMOD_CTRL ) printf( "CTRL " );
    if( event.key.keysym.mod & KMOD_SHIFT ) printf( "SHIFT " );
    if( event.key.keysym.mod & KMOD_ALT ) printf( "ALT " );
    printf( "\n" );

if (event.key.keysym.mod == KMOD_LSHIFT || event.key.keysym.mod == KMOD_RSHIFT)
	{
	if(event.key.keysym.sym == SDLK_a) {cpp_main_string = cpp_main_string + "A";} 
	if(event.key.keysym.sym == SDLK_b) {cpp_main_string = cpp_main_string + "B";}
	if(event.key.keysym.sym == SDLK_c) {cpp_main_string = cpp_main_string + "C";} 
	if(event.key.keysym.sym == SDLK_d) {cpp_main_string = cpp_main_string + "D";}
	if(event.key.keysym.sym == SDLK_e) {cpp_main_string = cpp_main_string + "E";} 
	if(event.key.keysym.sym == SDLK_f) {cpp_main_string = cpp_main_string + "F";}
	if(event.key.keysym.sym == SDLK_g) {cpp_main_string = cpp_main_string + "G";} 
	if(event.key.keysym.sym == SDLK_h) {cpp_main_string = cpp_main_string + "H";}
	if(event.key.keysym.sym == SDLK_i) {cpp_main_string = cpp_main_string + "I";} 
	if(event.key.keysym.sym == SDLK_j) {cpp_main_string = cpp_main_string + "J";}
	if(event.key.keysym.sym == SDLK_k) {cpp_main_string = cpp_main_string + "K";} 
	if(event.key.keysym.sym == SDLK_l) {cpp_main_string = cpp_main_string + "L";}
	if(event.key.keysym.sym == SDLK_m) {cpp_main_string = cpp_main_string + "M";} 
	if(event.key.keysym.sym == SDLK_n) {cpp_main_string = cpp_main_string + "N";}
	if(event.key.keysym.sym == SDLK_o) {cpp_main_string = cpp_main_string + "O";} 
	if(event.key.keysym.sym == SDLK_p) {cpp_main_string = cpp_main_string + "P";}
	if(event.key.keysym.sym == SDLK_q) {cpp_main_string = cpp_main_string + "Q";} 
	if(event.key.keysym.sym == SDLK_r) {cpp_main_string = cpp_main_string + "R";}
	if(event.key.keysym.sym == SDLK_s) {cpp_main_string = cpp_main_string + "S";} 
	if(event.key.keysym.sym == SDLK_t) {cpp_main_string = cpp_main_string + "T";}
	if(event.key.keysym.sym == SDLK_u) {cpp_main_string = cpp_main_string + "U";} 
	if(event.key.keysym.sym == SDLK_v) {cpp_main_string = cpp_main_string + "V";}
	if(event.key.keysym.sym == SDLK_w) {cpp_main_string = cpp_main_string + "W";} 
	if(event.key.keysym.sym == SDLK_x) {cpp_main_string = cpp_main_string + "X";}
	if(event.key.keysym.sym == SDLK_y) {cpp_main_string = cpp_main_string + "Y";} 
	if(event.key.keysym.sym == SDLK_z) {cpp_main_string = cpp_main_string + "Z";}
	if(event.key.keysym.sym == SDLK_BACKQUOTE) {cpp_main_string = cpp_main_string + "~";}
	if(event.key.keysym.sym == SDLK_1) {cpp_main_string = cpp_main_string + "!";}
	if(event.key.keysym.sym == SDLK_2) {cpp_main_string = cpp_main_string + "@";}
	if(event.key.keysym.sym == SDLK_3) {cpp_main_string = cpp_main_string + "#";}
	if(event.key.keysym.sym == SDLK_4) {cpp_main_string = cpp_main_string + "$";}
	if(event.key.keysym.sym == SDLK_5) {cpp_main_string = cpp_main_string + "%";}
	if(event.key.keysym.sym == SDLK_6) {cpp_main_string = cpp_main_string + "^";}
	if(event.key.keysym.sym == SDLK_7) {cpp_main_string = cpp_main_string + "&";}
	if(event.key.keysym.sym == SDLK_8) {cpp_main_string = cpp_main_string + "*";}
	if(event.key.keysym.sym == SDLK_9) {cpp_main_string = cpp_main_string + "(";}
	if(event.key.keysym.sym == SDLK_0) {cpp_main_string = cpp_main_string + ")";}
	if(event.key.keysym.sym == SDLK_MINUS) {cpp_main_string = cpp_main_string + "_";}
	if(event.key.keysym.sym == SDLK_EQUALS) {cpp_main_string = cpp_main_string + "+";}
	if(event.key.keysym.sym == SDLK_LEFTBRACKET) {cpp_main_string = cpp_main_string + "{";}
	if(event.key.keysym.sym == SDLK_RIGHTBRACKET) {cpp_main_string = cpp_main_string + "}";}
	if(event.key.keysym.sym == SDLK_BACKSLASH) {cpp_main_string = cpp_main_string + "|";}
	if(event.key.keysym.sym == SDLK_SEMICOLON) {cpp_main_string = cpp_main_string + ":";}
	if(event.key.keysym.sym == SDLK_QUOTE) {cpp_main_string = cpp_main_string + '"';}
	if(event.key.keysym.sym == SDLK_COMMA) {cpp_main_string = cpp_main_string + "<";}
	if(event.key.keysym.sym == SDLK_PERIOD) {cpp_main_string = cpp_main_string + ">";}
	if(event.key.keysym.sym == SDLK_SLASH) {cpp_main_string = cpp_main_string + "?";}
	}
	/*
else if (event.key.keysym.mod == KMOD_CAPS)
	{
	if(event.key.keysym.sym == SDLK_a) {cpp_main_string = cpp_main_string + "A";} 
	if(event.key.keysym.sym == SDLK_b) {cpp_main_string = cpp_main_string + "B";}
	if(event.key.keysym.sym == SDLK_c) {cpp_main_string = cpp_main_string + "C";} 
	if(event.key.keysym.sym == SDLK_d) {cpp_main_string = cpp_main_string + "D";}
	if(event.key.keysym.sym == SDLK_e) {cpp_main_string = cpp_main_string + "E";} 
	if(event.key.keysym.sym == SDLK_f) {cpp_main_string = cpp_main_string + "F";}
	if(event.key.keysym.sym == SDLK_g) {cpp_main_string = cpp_main_string + "G";} 
	if(event.key.keysym.sym == SDLK_h) {cpp_main_string = cpp_main_string + "H";}
	if(event.key.keysym.sym == SDLK_i) {cpp_main_string = cpp_main_string + "I";} 
	if(event.key.keysym.sym == SDLK_j) {cpp_main_string = cpp_main_string + "J";}
	if(event.key.keysym.sym == SDLK_k) {cpp_main_string = cpp_main_string + "K";} 
	if(event.key.keysym.sym == SDLK_l) {cpp_main_string = cpp_main_string + "L";}
	if(event.key.keysym.sym == SDLK_m) {cpp_main_string = cpp_main_string + "M";} 
	if(event.key.keysym.sym == SDLK_n) {cpp_main_string = cpp_main_string + "N";}
	if(event.key.keysym.sym == SDLK_o) {cpp_main_string = cpp_main_string + "O";} 
	if(event.key.keysym.sym == SDLK_p) {cpp_main_string = cpp_main_string + "P";}
	if(event.key.keysym.sym == SDLK_q) {cpp_main_string = cpp_main_string + "Q";} 
	if(event.key.keysym.sym == SDLK_r) {cpp_main_string = cpp_main_string + "R";}
	if(event.key.keysym.sym == SDLK_s) {cpp_main_string = cpp_main_string + "S";} 
	if(event.key.keysym.sym == SDLK_t) {cpp_main_string = cpp_main_string + "T";}
	if(event.key.keysym.sym == SDLK_u) {cpp_main_string = cpp_main_string + "U";} 
	if(event.key.keysym.sym == SDLK_v) {cpp_main_string = cpp_main_string + "V";}
	if(event.key.keysym.sym == SDLK_w) {cpp_main_string = cpp_main_string + "W";} 
	if(event.key.keysym.sym == SDLK_x) {cpp_main_string = cpp_main_string + "X";}
	if(event.key.keysym.sym == SDLK_y) {cpp_main_string = cpp_main_string + "Y";} 
	if(event.key.keysym.sym == SDLK_z) {cpp_main_string = cpp_main_string + "Z";}
	if(event.key.keysym.sym == SDLK_BACKQUOTE) {cpp_main_string = cpp_main_string + "`";}
	if(event.key.keysym.sym == SDLK_1) {cpp_main_string = cpp_main_string + "1";}
	if(event.key.keysym.sym == SDLK_2) {cpp_main_string = cpp_main_string + "2";}
	if(event.key.keysym.sym == SDLK_3) {cpp_main_string = cpp_main_string + "3";}
	if(event.key.keysym.sym == SDLK_4) {cpp_main_string = cpp_main_string + "4";}
	if(event.key.keysym.sym == SDLK_5) {cpp_main_string = cpp_main_string + "5";}
	if(event.key.keysym.sym == SDLK_6) {cpp_main_string = cpp_main_string + "6";}
	if(event.key.keysym.sym == SDLK_7) {cpp_main_string = cpp_main_string + "7";}
	if(event.key.keysym.sym == SDLK_8) {cpp_main_string = cpp_main_string + "8";}
	if(event.key.keysym.sym == SDLK_9) {cpp_main_string = cpp_main_string + "9";}
	if(event.key.keysym.sym == SDLK_0) {cpp_main_string = cpp_main_string + "0";}
	if(event.key.keysym.sym == SDLK_MINUS) {cpp_main_string = cpp_main_string + "-";}
	if(event.key.keysym.sym == SDLK_EQUALS) {cpp_main_string = cpp_main_string + "=";}
	if(event.key.keysym.sym == SDLK_LEFTBRACKET) {cpp_main_string = cpp_main_string + "[";}
	if(event.key.keysym.sym == SDLK_RIGHTBRACKET) {cpp_main_string = cpp_main_string + "]";}
	if(event.key.keysym.sym == SDLK_BACKSLASH) {cpp_main_string = cpp_main_string + "\\";}
	if(event.key.keysym.sym == SDLK_SEMICOLON) {cpp_main_string = cpp_main_string + ";";}
	if(event.key.keysym.sym == SDLK_QUOTE) {cpp_main_string = cpp_main_string + "'";}
	if(event.key.keysym.sym == SDLK_COMMA) {cpp_main_string = cpp_main_string + ",";}
	if(event.key.keysym.sym == SDLK_PERIOD) {cpp_main_string = cpp_main_string + ".";}
	if(event.key.keysym.sym == SDLK_SLASH) {cpp_main_string = cpp_main_string + "/";}
	}
	*/
else
	{
	if(event.key.keysym.sym == SDLK_a) {cpp_main_string = cpp_main_string + "a";} 
	if(event.key.keysym.sym == SDLK_b) {cpp_main_string = cpp_main_string + "b";}
	if(event.key.keysym.sym == SDLK_c) {cpp_main_string = cpp_main_string + "c";} 
	if(event.key.keysym.sym == SDLK_d) {cpp_main_string = cpp_main_string + "d";}
	if(event.key.keysym.sym == SDLK_e) {cpp_main_string = cpp_main_string + "e";} 
	if(event.key.keysym.sym == SDLK_f) {cpp_main_string = cpp_main_string + "f";}
	if(event.key.keysym.sym == SDLK_g) {cpp_main_string = cpp_main_string + "g";} 
	if(event.key.keysym.sym == SDLK_h) {cpp_main_string = cpp_main_string + "h";}
	if(event.key.keysym.sym == SDLK_i) {cpp_main_string = cpp_main_string + "i";} 
	if(event.key.keysym.sym == SDLK_j) {cpp_main_string = cpp_main_string + "j";}
	if(event.key.keysym.sym == SDLK_k) {cpp_main_string = cpp_main_string + "k";} 
	if(event.key.keysym.sym == SDLK_l) {cpp_main_string = cpp_main_string + "l";}
	if(event.key.keysym.sym == SDLK_m) {cpp_main_string = cpp_main_string + "m";} 
	if(event.key.keysym.sym == SDLK_n) {cpp_main_string = cpp_main_string + "n";}
	if(event.key.keysym.sym == SDLK_o) {cpp_main_string = cpp_main_string + "o";} 
	if(event.key.keysym.sym == SDLK_p) {cpp_main_string = cpp_main_string + "p";}
	if(event.key.keysym.sym == SDLK_q) {cpp_main_string = cpp_main_string + "q";} 
	if(event.key.keysym.sym == SDLK_r) {cpp_main_string = cpp_main_string + "r";}
	if(event.key.keysym.sym == SDLK_s) {cpp_main_string = cpp_main_string + "s";} 
	if(event.key.keysym.sym == SDLK_t) {cpp_main_string = cpp_main_string + "t";}
	if(event.key.keysym.sym == SDLK_u) {cpp_main_string = cpp_main_string + "u";} 
	if(event.key.keysym.sym == SDLK_v) {cpp_main_string = cpp_main_string + "v";}
	if(event.key.keysym.sym == SDLK_w) {cpp_main_string = cpp_main_string + "w";} 
	if(event.key.keysym.sym == SDLK_x) {cpp_main_string = cpp_main_string + "x";}
	if(event.key.keysym.sym == SDLK_y) {cpp_main_string = cpp_main_string + "y";} 
	if(event.key.keysym.sym == SDLK_z) {cpp_main_string = cpp_main_string + "z";}
	if(event.key.keysym.sym == SDLK_BACKQUOTE) {cpp_main_string = cpp_main_string + "`";}
	if(event.key.keysym.sym == SDLK_1) {cpp_main_string = cpp_main_string + "1";}
	if(event.key.keysym.sym == SDLK_2) {cpp_main_string = cpp_main_string + "2";}
	if(event.key.keysym.sym == SDLK_3) {cpp_main_string = cpp_main_string + "3";}
	if(event.key.keysym.sym == SDLK_4) {cpp_main_string = cpp_main_string + "4";}
	if(event.key.keysym.sym == SDLK_5) {cpp_main_string = cpp_main_string + "5";}
	if(event.key.keysym.sym == SDLK_6) {cpp_main_string = cpp_main_string + "6";}
	if(event.key.keysym.sym == SDLK_7) {cpp_main_string = cpp_main_string + "7";}
	if(event.key.keysym.sym == SDLK_8) {cpp_main_string = cpp_main_string + "8";}
	if(event.key.keysym.sym == SDLK_9) {cpp_main_string = cpp_main_string + "9";}
	if(event.key.keysym.sym == SDLK_0) {cpp_main_string = cpp_main_string + "0";}
	if(event.key.keysym.sym == SDLK_MINUS) {cpp_main_string = cpp_main_string + "-";}
	if(event.key.keysym.sym == SDLK_EQUALS) {cpp_main_string = cpp_main_string + "=";}
	if(event.key.keysym.sym == SDLK_LEFTBRACKET) {cpp_main_string = cpp_main_string + "[";}
	if(event.key.keysym.sym == SDLK_RIGHTBRACKET) {cpp_main_string = cpp_main_string + "]";}
	if(event.key.keysym.sym == SDLK_BACKSLASH) {cpp_main_string = cpp_main_string + "\\";}
	if(event.key.keysym.sym == SDLK_SEMICOLON) {cpp_main_string = cpp_main_string + ";";}
	if(event.key.keysym.sym == SDLK_QUOTE) {cpp_main_string = cpp_main_string + "'";}
	if(event.key.keysym.sym == SDLK_COMMA) {cpp_main_string = cpp_main_string + ",";}
	if(event.key.keysym.sym == SDLK_PERIOD) {cpp_main_string = cpp_main_string + ".";}
	if(event.key.keysym.sym == SDLK_SLASH) {cpp_main_string = cpp_main_string + "/";}
	}
if(event.key.keysym.sym == SDLK_SPACE) {cpp_main_string = cpp_main_string + " ";}
if(event.key.keysym.sym == SDLK_TAB) {cpp_main_string = cpp_main_string + "     ";}
if(event.key.keysym.sym == SDLK_BACKSPACE) 
	{
	i = strlen(((char*)cpp_main_string.c_str()));
	i--;
	cpp_main_string = cpp_main_string.substr(0,i);
	}

return cpp_main_string;
}

Don’t interpret SDL keysyms into characters yourself, call
SDL_EnableUNICODE and allow SDL to do the work for you.

Tim Goya

---- Tim Goya wrote:

Don’t interpret SDL keysyms into characters yourself, call
SDL_EnableUNICODE and allow SDL to do the work for you.

Tim Goya


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

You mean this? /* Enable Unicode translation */
SDL_EnableUNICODE( 1 );
Description
Enables/Disables Unicode keyboard translation.

To obtain the character codes corresponding to received keyboard events, Unicode translation must first be turned on using this function. The translation incurs a slight overhead for each keyboard event and is therefore disabled by default. For each subsequently received key down event, the unicode member of the SDL_keysym structure will then contain the corresponding character code, or zero for keysyms that do not correspond to any character code.

So the keysym contains the code and I check it to see which one right? Is there another way?

Most of the code would be simplified to:

if(event.key.keysym.unicode != 0) {cpp_main_string += event.key.keysym.unicode;}

You’ll have to be careful about the extra bits given in the unicode
code and deal with it by (for example) converting to UTF-8, filtering
out non-ascii, or using std::wstring.