虚拟组合键

Virtual Key combination

我正在寻找有关虚拟组合键的 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 起作用?

您的代码中最大的问题是

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

; 导致在任何情况下都会执行以下缩进的内部 if 块!

这里有一个类似的简化代码,效果很好:

    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_SHIFT0x10 并且 0x10 & 0x47 产生 0。因此您的外部 if 块永远不会执行。