我正在寻找有关虚拟键组合的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的关键组合有效吗?
答案 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_SHIFT
为0x10
,0x10 & 0x47
为0.因此,您的外部if-block永远不会被执行。