All WM_CHAR messages generated by keyboard input events have valid scan codes. WM_CHAR messages posted by other applications might or might not have valid scan codes. The following code fragment shows how to extract a scan code from a WM_CHAR message:
USHORT fsKeyFlags;
UCHAR uchScanCode;
case WM_CHAR:
fsKeyFlags = (USHORT) SHORT1FROMMP(mp1);
if (fsKeyFlags & KC_SCANCODE) {
/* Get the scan code from mp1. */
uchScanCode = CHAR4FROMMP(mp1);
.
. /* Process the scan code. */
.
return (MRESULT) TRUE;
}