虚拟组合键
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_SHIFT
是 0x10
并且 0x10 & 0x47
产生 0。因此您的外部 if 块永远不会执行。
我正在寻找有关虚拟组合键的 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_SHIFT
是 0x10
并且 0x10 & 0x47
产生 0。因此您的外部 if 块永远不会执行。