- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我从 http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx 复制了以下代码,
public int hookProc(int code, int wParam, ref keyboardHookStruct lParam)
{
if (code >= 0)
{
Keys key = (Keys)lParam.vkCode;
if (HookedKeys.Contains(key))
{
KeyEventArgs kea = new KeyEventArgs(key);
if((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
{KeyDown(this, kea) ;}
else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
{KeyUp(this, kea); }
if (kea.Handled)
{return 1;}
}
}
lParam.vkCode ++;
lParam.scanCode ++;
return CallNextHookEx(hhook, code, wParam, ref lParam);
}
它工作正常,但是当我做一点改变时:
lParam.vkCode ++;
or
lParam.scanCode ++;
就在返回 CallNextHookEx(...) 之前,原始键仍然出现在记事本中。前任。如果我按“a”,我预计记事本中的字母将是“b”,但它仍然是“a”。似乎“lParam”没有改变。不明白为什么?
最佳答案
值 lParam.vkCode 不是简单的 int 类型,所以我认为您不能以这种方式递增它。
一旦你有了你的关键对象......
Keys key = (Keys)lParam.vkCode;
你应该能够做一些事情,比如获取字节值并增加它。
int keyVal = Encoding.ASCII.GetByte(key.KeyCode);
keyVal++;
我认为 vkCode 不是实际的键代码,而可能是一个指针或其他东西,通过将它分配给变量 Key .Net 提取该值并通过您的转换将其转换为托管键类型。
当然我可能是错的......
关于C# keyhook 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2613125/
我从 http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx 复制了以下代码, public int hookProc(int code, int
进程文件: keyhook or keyhook.exe 进程名称: KeyHook 进程类别:存在安全风险的进程 英文描述: keyhook.exe a process which bel
我正在寻找使用 JNA 的 keyhook 库,并在他们的 github 上找到了一个演示 public final class Test { private static volatile bool
我真的无法解决这个问题,甚至不知道是否可能。 我想使用 CTRL+C 和 CTRL+V 快捷键。 示例:有 2 个应用程序。 1. App 是用 C# 编写的, 2. App 是一个 Java-App
我正在制作一个自动答题器,它使用 jna Hook 来自键盘和鼠标的全局输入。对于键盘 Hook ,我使用 http://code.google.com/p/goldriver/source/brow
我是一名优秀的程序员,十分优秀!