读书人

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

发布时间: 2012-01-21 21:31:43 作者: rapoo

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

获得键盘状态

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

正常。

读书人网 >VC/MFC

热点推荐