Work The Dial - 511V41's diary

<–– Back

iohookがMacで使えない問題

Node.jsでkeyupやkeydownが取りたかったのでiohookというライブラリを使おうとしたが、バグがあった。

一回キー入力があるとそのあと動作しなくなるというもの。issueでは fires-once と呼ばれていた。

該当issue

コメントを参考にしつつ対処してみましょう。

あ、ちなみにNode.jsはiohookのリリースの関係で v12.13.1 じゃないとキツいです。

とりあえず特定行をコメントアウトすればいいらしい。

git clone git@github.com:wilix-team/iohook.git

して iohook/libuiohook/src/darwin/input_hook.c を編集、コメントアウト。

そして祈りつつコンパイル

# 入ってない人は
brew install automake libtool
# 祈り
npx cmake-js compile -r node -v 12.13.1

通った人はおめでとうございます。僕は通りませんでした。理由は objc_msgSendToo many arguments to function call です。

ということで今度は input_hook.c

typedef id (*send_type)();
send_type ugokimasuyouni = (send_type)objc_msgSend;

というのを追加して、ファイル内に存在する objc_msgSendugokimasuyouni で置換。名前はなんでもいいです。

更に nan.h が無いと言われたので

npm install nan
cp node_modules/nan/nan.h /usr/local/include/

で、コンパイル通りました。

そしたら build/Release/iohook.node を 自分がiohookを使いたいプロジェクトの node_modules/iohook/builds/node-v72-darwin-x64/build/Release/iohook.node と置き換えます。

これで動くはず。僕は動きました。動かない人は頑張ってください。