GetKeyState () в моем коде не оценивается правильно .. когда я использую это:
bool ctrlDown = GetKeyState(VK_LCONTROL) != 0 || GetKeyState(VK_RCONTROL) != 0;
в моем коде не возвращается с правильной информацией .. он срабатывает на все ключевые события иего оценивают как истинное, даже когда нажимаются другие клавиши. Кто-нибудь может увидеть, что я делаю что-то не так в этом коде?
Я загружаю это здесь:
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern short GetKeyState(int nVirtKey);
Тогда я вызываю "VK_LCONTROL & VK_RCONTROL "var и заполните их:
public const int VK_LCONTROL = 0xA2;
public const int VK_RCONTROL = 0xA3;
, а затем я вызываю его в этой функции:
private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct));
bool ctrlDown = GetKeyState(VK_LCONTROL) != 0 || GetKeyState(VK_RCONTROL) != 0;
if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP && hookStruct.vkCode == 0x56 && ctrlDown == true)
{
MessageBox.Show("Message : KEY UP");
ComboHit = false;
}
// Pass to other keyboard handlers. Makes the Ctrl+V pass through.
return CallNextHookEx(_hookHandle, nCode, wParam, lParam);
}
, когда я проверяю, чтобы увидеть, что такое" GetKeyState (VK_LCONTROL) "возвращая .. его чередование назад и вперед между 0 и 1, я знал, что MS говорит, что должен сделать это: «Получает состояние указанного виртуального ключа. Статус указывает, является ли ключ вверх, вниз или переключен (вкл, выкл)- чередование при каждом нажатии клавиши). "
с чего бы мне это хотеть? .. и могу ли я заставить его точно оценивать положение клавиш вверх или вниз?