我的代码中的GetKeyState()没有正确评估..当我使用它:
bool ctrlDown = GetKeyState(VK_LCONTROL) != 0 || GetKeyState(VK_RCONTROL) != 0;
Run Code Online (Sandbox Code Playgroud)
在我的代码中,它没有返回正确的信息..它触发了所有关键事件,即使按下其他键也被评估为true ..任何人都可以看到我在这段代码中做错了吗?
我把它加载到这里:
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern short GetKeyState(int nVirtKey);
Run Code Online (Sandbox Code Playgroud)
然后我调用"VK_LCONTROL&VK_RCONTROL"var并填充它们:
public const int VK_LCONTROL = 0xA2;
public const int VK_RCONTROL = 0xA3;
Run Code Online (Sandbox Code Playgroud)
然后我在这个函数中调用它:
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);
}
Run Code Online (Sandbox Code Playgroud)
当我检查所以看看"GetKeyState(VK_LCONTROL)"正在返回...它在0和1之间来回交替,我知道MS应该这样做:"检索指定虚拟键的状态.状态指定键是上,下或切换(每次按下键时开启,关闭交替)."
为什么我要这个?...我可以让它准确评估上下键的位置吗?
| 归档时间: |
|
| 查看次数: |
6853 次 |
| 最近记录: |