ある忘れっぽいプログラマの覚書

忘れっぽい自分のためのプログラム作成に関連したアイデアなどの備忘録

2006年8月28日(月)

CEでのキーフックについて

WindowsCEではSetWindowsHookExが公式にはサポートされていないが(標準ヘッダにない)適当なプロトタイプ宣言があれば使える、いわゆる隠しAPI(?)である。

ただ以下のような制約がある。
1.有効なフック種別はWH_KEYBOARD_LLのみ
2.フックはグローバルに一つのみ有効
貧弱なんだけど代わりがないのでキー入れ替えユーティリティのほとんどが使ってたりする。

ここで問題になるのが2の制約でSetWindowsHookExを使えるソフトは同時に一個に限定されてしまう。
隠しAPIに文句をつけても仕方がないので、何とかならないか試してみた。
結果何とかなったようなので、とりあえず人柱を求めて晒してみる

http://www.geocities.jp/hou_ming_2/beta/multikeyhook.zip
[追記8/31]
うまく実機で動作しないようですので消しました。

・人柱版なのでそれなりの覚悟で使用すること
・当然のように説明書はない。ファイル見てもインストール手順が分からないような人にはおすすめしない。
・こいつの設定を変更すると、それまでのキーフックはすべて解除される。
・キーフックはSetWindowsHookExを実行した順に行われる。
・多分ほとんどのキーユーティリティが多重フックを想定して作られていないので、キーユーティリティを複数動かすとどういう事体がおきるかわからない、無保証である
[追記8/30]
・リセット時に設定は保存されない(通常の状態になる)
・例によってエミュレータでの確認しかしてないので実機での動作は不明
[/追記8/30]

動作(or不動作)報告はウェルカムである。ただし使用ソフトや発生する事象などは整理しておいてほしい。間違っても、こちらには何の報告もせずに自分のブログや他所の掲示板などに「うまく動かないんだけど」とか書かないように!

作成者 ホーミン : 2006年8月31日(木) 03:16 [ コメント : 14]

コメント

はじめまして!以前から覗いてたんですが初コメントです。
これ、非常に興味深いソフトですね、喜んでβテスター(α?)やらせていただきます。何かありましたらご報告いたします。

投稿者 DOR [URL]  : 2006年8月29日(火) 01:47

esにて試してみました。
まず単体で動かしてみましたが、動かないものは
MULTIKEYHOOKが行ってるKEYHOOK自体を検出してしまって動かない模様。
ある意味ちゃんとチェックしてるということですね(^ー^;

1.PQzII:通常どおり動く
2.PQz_CHECK:メッセージ無し、動作しない。
3.W-ZERO3 UtilityPLUS:メッセージ後、動作しない。
4.ctrlswapmini:メッセージ後、動作しない。

成功例が一つなので、複数起動出来なくて残念。

投稿者 kagura-y [URL]  : 2006年8月29日(火) 10:10

esにてテストしました

当初チェックボックスにチェックを入れて
再起動しないと有効にならないかと思い試しましたが
既にhookするアプリがスタートアップにある場合
再起動後チェックボックスのチェックが外れていました。
スタートアップからHOOK系のアプリをすべてはずし再起動した後、MULTIKEYHOOKを有効にして再起動
W-ZERO3 UtilityPLUSとctrlswapminiの2重起動成功しました。
その後の状況は、追って報告します

投稿者 puritin  : 2006年8月29日(火) 17:18

↑間違いです。W-ZERO3 UtilityPLUSに蹴られました
すみません

投稿者 puritin  : 2006年8月29日(火) 17:20

DORさん
面倒だとは思いますが人柱よろしくお願いします。

kagura-yさん、puritinさん
うまく動作していればSetWindowsHookEx自体の挙動が変わるので、各アプリがエラーを出してしまうと言うことはうまく動作していないようです。
以下手順を試していただけないでしょうか?

・キーフックアプリケーションすべて終了
・multikeyhookを実行、チェックをつける
・キーフックアプリケーションを複数起動する

投稿者 ホーミン  : 2006年8月30日(水) 01:09

私も試させていただきました。

【キーフックアプリ複数起動成功例】
・multikeyhookでチェックが付いてない状態でWUP起動
・multikeyhookでチェックを付けた後にPQzII起動
ただ、最後にキーフックしたアプリの設定が有効になっているような感じでした。
この場合、WUPで割り当てたキーがデフォルトの動作になってしまいます。

・multikeyhookでチェックが付いてない状態でctrlswapmini起動
・multikeyhookでチェックを付けた後にPQzII起動

投稿者 星羽  : 2006年8月30日(水) 04:31

【キーフックアプリ複数起動失敗例】
・multikeyhookでチェックが付いてない状態でPQz起動
・multikeyhookでチェックを付けた後にPQzII又はctrlswapmini起動

・multikeyhookでチェックが付いてる状態でWUP起動

・multikeyhookでチェックが付いてる状態でctrlswapmini起動

投稿者 星羽  : 2006年8月30日(水) 04:31

何かのご参考になればと思い、書かせていただきましたm(__)m

投稿者 星羽  : 2006年8月30日(水) 04:39

>・すべて終了・チェックをつける・複数起動

最初からそのようにやってましたが、今もやっぱり動作は変わらないようです。
念のためスタートアップからショートカット全削除&再起動してから動かしてみても変わりません。
MULTIKEYHOOKを有効にしてから動くのはPQzIIのみでした。

投稿者 kagura-y [URL]  : 2006年8月30日(水) 09:39

お世話さまです

W-ZERO3 UtilityPLUS(W03UP7と略)PQzIIの組み合わせで複数起動成功しました
順番は、PQzIIが先です
W03UP7は起動時エラーメッセージを出しますが
アプリ自体は起動します
重複していないキーバインドはどちらのアプリでも有効でした。
ctrlswapminiはエラーを検知するとアプリ起動を取りやめるみたいで、起動できません。

投稿者 puritin  : 2006年8月30日(水) 16:39

↑すべて終了・チェックをつける・複数起動
で、試しました

投稿者 puritin  : 2006年8月30日(水) 16:41

訂正:W03UPのキーバインドは無効でした
PQZは有効です。

投稿者 puritin  : 2006年8月30日(水) 16:57

星羽さん、kagura-yさん、puritinさん

検証ありがとうございます。
どうもうまくSetWindowsHookExのすり替え出来てないみたいですね、エミュレータと実機だと挙動が違うところがあるのかも知れません。
まずはエラー処理が甘いところを中心にソースを見直して見ます。
ご協力ありがとうございました。

投稿者 ホーミン  : 2006年8月31日(木) 03:11

こちらこそ、多重フックが出来るかもしれないという可能性を見出して下さってありがとうございました。
また実機での検証が必要な時には参加させていただきたいと思っておりますm(__)m

投稿者 星羽  : 2006年9月1日(金) 02:08

コメントを書く

名前(全角20文字まで) *必須:
URL(例:http://www.yahoo.co.jp):
コメント(全角400文字まで) *必須: