Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp	(revision 23983)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp	(revision 23984)
@@ -2094,5 +2094,5 @@
     /* These special keys have to be handled by Windows as well to update the
      * internal modifier state and to enable/disable the keyboard LED */
-    if (vkey == VK_NUMLOCK || vkey == VK_CAPITAL)
+    if (vkey == VK_NUMLOCK || vkey == VK_CAPITAL || vkey == VK_SHIFT)
         return false;
 
@@ -2573,4 +2573,12 @@
         codes[(*count)++] = 0x3a;
         codes[(*count)++] = 0x3a | 0x80;
+        /* Some keyboard layouts require shift to be pressed to break
+         * capslock.  For simplicity, only do this if shift is not
+         * already held down. */
+        if (mCapsLock && !(mPressedKeys [0x2a] & IsKeyPressed))
+        {
+            codes[(*count)++] = 0x2a;
+            codes[(*count)++] = 0x2a | 0x80;
+        }
     }
 
@@ -2588,4 +2596,12 @@
         codes[(*count)++] = 0x3a;
         codes[(*count)++] = 0x3a | 0x80;
+        /* Some keyboard layouts require shift to be pressed to break
+         * capslock.  For simplicity, only do this if shift is not
+         * already held down. */
+        if (mCapsLock && !(mPressedKeys [0x2a] & IsKeyPressed))
+        {
+            codes[(*count)++] = 0x2a;
+            codes[(*count)++] = 0x2a | 0x80;
+        }
     }
 
@@ -2598,4 +2614,12 @@
         codes[(*count)++] = 0x3a;
         codes[(*count)++] = 0x3a | 0x80;
+        /* Some keyboard layouts require shift to be pressed to break
+         * capslock.  For simplicity, only do this if shift is not
+         * already held down. */
+        if (mCapsLock && !(mPressedKeys [0x2a] & IsKeyPressed))
+        {
+            codes[(*count)++] = 0x2a;
+            codes[(*count)++] = 0x2a | 0x80;
+        }
     }
 
