关于获得键盘状态的有关问题,大家来帮忙看看

关于获得键盘状态的问题,大家来帮忙看看
我的程序里有一段这样的代码

获得键盘状态

                                                BYTE   ks[256];  
                                                GetKeyboardState(ks);  
                                                WORD   w;  
                                                UINT   scan=0;  
                                                ToAscii(wParam,scan,ks,&w,0);
                                                ch   =char(w);    

我用   POSTMESSAGE来检测,可是发出来的信息,我键盘输入的是A,可是显示的是1

HWND   now=GetFocus();

::PostMessage(now,WM_KEYDOWN,VK_BACK,NULL);

我又用MESSAGEBOX来检测,第一个字母显示的是正确的,显示的是我打出来的字符,可是后面跟着一堆类似中文的乱码,为什么哦,如何解决这个问题?

我想让他我打   A,他就显示   A

::AfxMessageBox(&ch,NULL,NULL);

------解决方案--------------------
在GetKeyboardState(ks);之前加一局
memset(ks, 0, sizeof(ks));
------解决方案--------------------
大概了解楼主想干什么了,不过这样似乎比较麻烦啊,首先你只能显示出可显示字符,另外因为是VK_KEY,没有A和a的区别哦,
顺便改一下你的code;
AfxMessageBox(&ch,NULL,NULL); 我不知道你ch哪里定义的,应该是个char[]吧。在ch=char(w)之前,每次最好先清0一下。
------解决方案--------------------
ch =char(w); // 看来ch是char型的。否则编译不过。:)
::AfxMessageBox(&ch,NULL,NULL); //ch后面没有\0,所以有乱码。把char当作char[]用,汗!

--------------------
char buf[4] = {0};
buf[0] = ch;
::AfxMessageBox(buf,NULL,NULL);
------解决方案--------------------
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg-> message == WM_KEYDOWN)
{
BYTE ks[256];
GetKeyboardState(ks);
WORD w,ch;
UINT scan=0;
ToAscii(pMsg-> wParam,scan,ks,&w,0);
ch =char(w);

CString strTest;
strTest.Format( "%c ",ch);
TRACE( "\r\nInput=%s ",strTest);
}
return CDialog::PreTranslateMessage(pMsg);

}

上面测试代码,输入wust后运行结果:
Input=w
Input=u
Input=s
Input=t

正常。