In Windows, the shift state of a key is ignored unless explicitly specified. For example:
ID_MYACCELTABLE ACCELERATORS BEGIN "a", ID_LOWERA, ASCII "B", ID_UPPERB, ASCII SHIFT END
This accelerator table generates a WM_COMMAND of ID_LOWERA when the user clicks on the "a" key or "Shift+a" keys (with Caps Lock ON). However, a WM_COMMAND of ID_UPPERB will be generated only when you click on the "Shift+b" keys (with Caps Lock OFF).
In OS/2, the shift state of a key must be specified explicitly: The equivalent OS/2 accelerator table would look like:
ACCELTABLE ID_MYACCELTABLE BEGIN "a", ID_LOWERA, CHAR "a", ID_LOWERA, CHAR SHIFT /* Additional entry to allow SHIFT+a */ "B", ID_UPPERB, CHAR SHIFT END
For Open32, the OS/2 model is followed; accelerator table entries that do not specify SHIFT will not generate WM_COMMAND messages when the user clicks on the Shift key.