Index: keyboard.cpp
===================================================================
--- keyboard.cpp	(revision 8321)
+++ keyboard.cpp	(working copy)
@@ -895,6 +895,8 @@
 
 	if (rec->EventType==KEY_EVENT)
 	{
+		static bool bForceAltGr = false;
+
 		if (!rec->Event.KeyEvent.bKeyDown)
 		{
 			was_repeat = false;
@@ -904,8 +906,21 @@
 		{
 			was_repeat = (last_pressed_keycode == rec->Event.KeyEvent.wVirtualKeyCode);
 			last_pressed_keycode = rec->Event.KeyEvent.wVirtualKeyCode;
+
+			if (rec->Event.KeyEvent.wVirtualKeyCode == VK_MENU)
+			{
+				// Шаманство с AltGr (виртуальная клавиатура)
+				bForceAltGr = (rec->Event.KeyEvent.wVirtualScanCode == 0)
+					&& ((rec->Event.KeyEvent.dwControlKeyState & 0x1F) == 0x0A);
+			}
 		}
 
+		if (bForceAltGr && (rec->Event.KeyEvent.dwControlKeyState & 0x1F) == 0x0A)
+		{
+			rec->Event.KeyEvent.dwControlKeyState &= ~LEFT_ALT_PRESSED;
+			rec->Event.KeyEvent.dwControlKeyState |= RIGHT_ALT_PRESSED;
+		}
+
 		DWORD CtrlState=rec->Event.KeyEvent.dwControlKeyState;
 
 		//_SVS(if(rec->EventType==KEY_EVENT)SysLog(L"[%d] if(rec->EventType==KEY_EVENT) >>> %s",__LINE__,_INPUT_RECORD_Dump(rec)));
