相关疑难解决方法(0)

Windows keyboardhook报告所有内容两次

我正在使用Delphi并尝试通过USB读取条形码扫描器,因此它只是另一个人机接口设备.

我正确地得到了数字,但每次都得到两次.我想这是关键和关键.

我可以; 用旗帜扯掉它并忽略第二次阅读,但宁愿做它.

我的代码稍微适应了这个链接.

我可以指定在分配挂钩时只需要key_up事件吗?

KBHook := SetWindowsHookEx(WH_KEYBOARD,
                           @KeyboardHookProc,
                           HInstance,
                           GetCurrentThreadId()) ;
Run Code Online (Sandbox Code Playgroud)

或以某种方式检查钩子函数本身内的标志?


更新:我试图为它编码,但看起来我错了.这是我在钩子函数开始时尝试的内容

// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx
if Code < 0 then  
begin
   Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
   Exit;
end;

if (((LongParam and $80000000) <> $80000000)    (* key is not being released *)
and ((LongParam and $40000000) <>  $40000000))  (* key was not previously down *) then
begin
   Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
   Exit;
end;
Run Code Online (Sandbox Code Playgroud)

[进一步更新]五年后,这仍然没有帮助,但我发现我原来的后续问题(qv)确实如此.

delphi hook winapi

5
推荐指数
1
解决办法
1089
查看次数

VSTO Windows Hook keydown 事件被调用 10 次

所以,我一直在开发一个类来处理 VSTO 加载项中的 Kwyboard 输入,到目前为止,我一直在使用 Windows 钩子来做到这一点,并取得了相对的成功。

有这个代码:

    //.....
    private const int WH_KEYBOARD = 2;
    private const int WH_MOUSE = 7;

    private enum WM : uint {
        KEYDOWN = 0x0100,
        KEYFIRST = 0x0100,
        KEYLAST = 0x0108,
        KEYUP = 0x0101,
        MOUSELEFTDBLCLICK = 0x0203,
        MOUSELEFTBTNDOWN = 0x0201,
        MOUSELEFTBTNUP = 0x0202,
        MOUSEMIDDBLCLICK = 0x0209,
        MOUSEMIDBTNDOWN = 0x0207,
        MOUSEMIDBTNUP = 0x0208,
        MOUSERIGHTDBLCLK = 0x0206,
        MOUSERIGHTBTNDOWN = 0x0204,
        MOUSERIGHTBTNUP = 0x0205
    }

    private hookProcedure proc;

    private static IntPtr hookID = IntPtr.Zero;

    //Enganches

    [DllImport("user32.dll", CharSet = …
Run Code Online (Sandbox Code Playgroud)

c# windows hook vsto ms-word

3
推荐指数
1
解决办法
544
查看次数

标签 统计

hook ×2

c# ×1

delphi ×1

ms-word ×1

vsto ×1

winapi ×1

windows ×1