虚拟键组合

时间:2015-08-19 15:30:40

标签: c++ virtual virtual-keyboard

我正在寻找有关虚拟键组合的C ++帮助,我正在寻找一个简单的组合来执行操作。我正试图让Shift + G工作。我已经尝试了我所知道的,它给了我不同的结果,但没有什么我想做的。

if (VK_SHIFT & 0x47) // Shift+G test
{
    if(::GetKeyState(0x47)<0);      
    {
        CBaseItem* pItemInfo = g_pItemTableHash->GetData(
            g_pMainPlayer->m_pInv_Guardian[0].GetID());

        if (GUARDIAN_ITEM_TYPE_ADULT == pItemInfo->BaseItem_Guardian.bType)
        {
            if(CUserInterface::GetInstance()->m_bGuardian==FALSE)
            {               
                // ON //
                CTDS_DUNGEON_CALLGARDIAN CallGuardinan;
                CallGuardinan.bZipCode = 0;
                g_pNet->SendMsg( (char*)&CallGuardinan, CallGuardinan.GetPacketSize(),
                    SERVER_INDEX_ZONE);
            }
        }
    }
}

真正重要的是第一行,任何人都知道如何解决这个问题,所以SHIFT + G的关键组合有效吗?

1 个答案:

答案 0 :(得分:1)

代码中最大的问题是

末尾的;
 if(::GetKeyState(0x47)<0);      // !!!!! 

;导致在任何情况下执行以下缩进的内部if-block!

这是一个非常有效的类似简化代码:

    while(true) {
        if(::GetKeyState(VK_SHIFT) & 0x8000)  // is shift pressed ?  
        {
            if(::GetKeyState(0x47) & 0x8000)  // if G also pressed ?  
            {
                std::cout << "Shift G pressed" << std::endl;
                break;
            }
            else std::cout << "Shift..." << std::endl;
        }
    }
}

其他信息:

表达式(VK_SHIFT & 0x47)是一个完全独立于输入的常量。 VK_SHIFT0x100x10 & 0x47为0.因此,您的外部if-block永远不会被执行。