相关疑难解决方法(0)

SetWindowsHookEx创建一个本地钩子.如何使其全球化?

在Delphi XE应用程序中,我正在尝试设置一个全局挂钩来监视焦点更改.钩子是在一个DLL中创建的:

focusHook := SetWindowsHookEx( WH_CBT, @FocusHookProc, HInstance, 0 );
// dwThreadId (the last argument) set to 0 should create a global hook
Run Code Online (Sandbox Code Playgroud)

在同一个DLL中,我有一个将消息发布到主机应用程序窗口的钩子过程:

function FocusHookProc( code : integer; wParam: WPARAM; lParam: LPARAM ) : LResult; stdcall;
begin
  if ( code < 0 ) then
  begin
    result := CallNextHookEx( focusHook, code, wParam, lParam );
    exit;
  end;

  result := 0;

  if ( code = HCBT_SETFOCUS ) then
  begin
    if ( hostHWND <> INVALID_HANDLE_VALUE ) then
      PostMessage( hostHWND, cFOCUSMSGID, wParam, lParam ); …
Run Code Online (Sandbox Code Playgroud)

delphi hook winapi setwindowshookex

9
推荐指数
1
解决办法
7142
查看次数

使用Python和SetWindowsHookExA应用低级键盘钩子

所以我试图弄清楚如何使用Python注册全局键盘钩子.从我所读到的,似乎没有在DLL中没有回调.如果您使用WH_KEYBOARD_LL.我无法确认这一点,但我觉得令人鼓舞的是,如果我试图说出来,我就不会像我那样得到1428错误WH_CBT.

我得到一个钩子手柄,但是当我按下键盘上的按钮时,没有任何东西出现,正如我所料.

有什么想法为什么我的回调没有被调用?或者这甚至可能吗?

相关代码:

import time
import string
import ctypes
import functools
import atexit
import pythoncom
from ctypes import windll

hookID = 0

class Keyboard(object):

    KEY_EVENT_DOWN = 0
    KEY_EVENT_UP = 2

    KEY_ENTER = 2
    KEY_SHIFT = 16
    KEY_SPACE = 32

    HOOK_ACTION = 13
    HOOK_KEYBOARD = 13
    HOOK_KEYDOWN = 0x100
    HOOK_KEYUP = 0x101

    class Hook:
        '''Holds general hook information'''
        def __init__(self):
            self.hook = 0
            self.struct = None            

    class HookStruct(ctypes.Structure):
        '''Structure that windows returns for keyboard events'''
        __fields__ = [ …
Run Code Online (Sandbox Code Playgroud)

python winapi

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

winapi ×2

delphi ×1

hook ×1

python ×1

setwindowshookex ×1