Electron利用ffi-napi屏蔽键盘消息

Electron自带的键盘屏蔽无法满足要求的时候:比如屏蔽Alt+F4 或者Alt+Tab的

我们可以考虑使用ffi-napi调用dll的方式。利用C++的钩子函数进行键盘或者鼠标事件的屏蔽。中途遇到了几个坑。记录一下

1.无法识别HWND的问题

var handle = win.getNativeWindowHandle()
获取到Electron的窗口句柄。但是在传参的时候发现无法识别HWND。
const dll = ffi.Library('GHookDll', {
    'SetHook': // 声明这个dll中的一个函数
        [
            'void', ['void*'], // 用json的格式罗列其返回类型和参数类型
        ]
});

利用void*的方式传参。在dll中的时候有C++去从void*转成hwnd来使用

2. 

'ClearHook': [
        'void',['void']
    ]


一般C++中参数如果为空的时候可以直接不传即可。但在在调用释放钩子函数的时候。发现如果不传参数的话直接报参数无法是被的错误。这个时候可以在dll的ClearHook函数中 ClearHook(void)这种方式。当然也可以直接写int型。这样在Electron使用的时候。直接传个0.

目前就做键盘屏蔽的时候遇到这两个坑。

后续开发过程中发现。可以使用addon的方式自己封装。更加方便管理

开发Electron注意各个模块的版本

// electron 版本

console.log('process.versions.electron', process.versions.electron)

// ABI版本

console.log('process.versions.modules', process.versions.modules)

// NODE版本
console.log('process.versions.node', process.versions.node)

// V8 引擎版本
console.log('process.versions.v8', process.versions.v8)

// chrome版本
console.log('process.versions.chrome', process.versions.chrome)

// 架构信息
console.log('process.env.PROCESSOR_ARCHITECTURE', process.env.PROCESSOR_ARCHITECTURE)

如发现不对。欢迎指正

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值