2015-08-19 2 views
0

Я ищу помощь на 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

Почему здесь находится тег C#? –

+2

разве вы не сравниваете 'VK_SHIFT & 0x47' с чем-то? – NathanOliver

+0

Не должно быть 'GetKeyState (0x47)! = 0'? или, скорее, 'GetKeyState (0x47) & 0x8000', чтобы сохранить только старший байт? – Christophe

ответ

1

Самая большая проблема в вашем коде является ; в конце

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-блок никогда не выполняется.

Смежные вопросы