WM_SYSKEYUP 的lParam,我做实验的结果为什么和msdn上讲的不一样?
BeRoy 2005-01-02 06:24:12 lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following list of values.
30
Specifies the previous key state. The value is always 1 for a WM_SYSKEYUP message.
31
Specifies the transition state. The value is always 1 for a WM_SYSKEYUP message.
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//重载 WndProc
void __fastcall TRecvForm::WndProc(TMessage &Msg)
{
//对alt+a测试
/* 如果alt +a被注册为热键
if(Msg.Msg==WM_HOTKEY){
if(LOWORD(Msg.LParam)==MOD_ALT && HIWORD(Msg.LParam)==0x41)
{
RecvForm->Label1->Caption="U Pressed 'ALT+A'(热键) ["+AnsiString(flag)+"]";
flag++;
}
}
*/
if(Msg.Msg==WM_SYSKEYUP){
WORD wModifier = LOWORD(Msg.LParam);
if(Msg.WParam==0x41)
{
if(wModifier==3){
RecvForm->Label2->Caption="'ALT+A'(因为没有键盘焦点WM_SYSKEYDOWN\n被发送到当前活动窗口) ["+AnsiString(flag2)+"]";
flag2++;
}
if(wModifier==7){
RecvForm->Label3->Caption="'ALT+A' (松开a时alt未松开)["+AnsiString(flag3)+"]";
flag3++;
}
if(wModifier==1){
RecvForm->Label4->Caption="'ALT+A' (lParam低16位值居然为1!不是\nMSND上说的最小也是3!)["+AnsiString(flag4)+"]";
flag4++;
}
}
}
RecvForm->Dispatch(&Msg);
}
//----------------------------------------------------
我在调试的时候,为什么每次我按alt+a都是进入if(wModifier==1)里面?msdn上说对于WM_SYSKEYUP的lparam最后2位都应该是1。那就应该是进入if(wModifier==3)里才对啊。