2010年2月11日木曜日

keyhac 1.13 Altキー単体押し、など

keyhac 1.13 を公開した。

以前から、ユーザさんからレポートを受けたりして
気になっていた問題を修正した。

keyhac を使用すると、
Altキーを単体で押したときに、メニューバーにフォーカスが移動しなくなったり、
秀丸 や Apsaly といったテキストエディタの、ファンクションキーの表示が、
Shift や Ctrl を押したときに切り替わらなくなったり、、、
といった、問題だ。

しばらくは、まったく理由が分からなかったが、
結局、pyauto.Window.getFocus のなかで、win32の GetFocus() を呼ぶ前後で、
AttachThreadInput を呼び出して、スレッドのインプット状態を結び付ける処理を
行っているのが影響していることがわかった。

ややこしかった!

あと、WH_KEYBOARD_LL で設定するプロシージャが、フックDLLのなかにないといけないという
勘違いをしていて、プロセス間通信を行うような実装になっていたけど、
そんな必要はないことが分かった。

4 件のコメント:

  1. いつも便利に使わせていただいてます
    ファンクションキーの表示 対応ありがとうございます
    一つ質問いいでしょうか?
    キーの単純な置き換え で 半角/全角キーをESC にしたいのですが、
    keymap.replaceKey( 243, "Escape" )
    keymap.replaceKey( 244, "Escape" )
    とする(某掲示板の書込みからどちらかでは動作しないらしかったので・・・)と
    うまく機能しているようなのですが、一度でも押すと、それ以降
    ドラッグ&ドロップが出来なくなるようなのです(デスクトップのアイコンの移動など)
    キーボードとは関係ないかもしれないとは思いますし、私の環境だけで起こることかもしれませんが・・・
    もしおかしな設定をしているようならご教示いただけるとうれしいです

    返信削除
  2. こんにちは。

    keyhacの内部ログをONにして、半角/全角 を押してみていただくと
    様子が分かると思いますが、このキーは、特殊な動きをしています。

    キーを押すごとに、

    243のUp + 244のDown
    244のUp + 243のDown
    :
    :

    という入力が入ってきます。
    Upのあとに、Down が必ず入るようです。

    ですので、

    keymap.replaceKey( 243, "Escape" )
    keymap.replaceKey( 244, "Escape" )

    のようにすると、つねに、Escapeが押された状態になってしまい、

    > ドラッグ&ドロップが出来なくなるようなのです

    の挙動になってしまいます。

    keymap_global[ "U-(243)" ] = []
    keymap_global[ "U-(244)" ] = []
    keymap_global[ "D-(243)" ] = "Escape"
    keymap_global[ "D-(244)" ] = "Escape"

    このようにすれば、期待通りに動くかもしれません。

    返信削除
  3. こんな感じかなと。

    # Escと半/全の入れ替え
    keymap_global[ "D-(243)" ] = "Escape"
    keymap_global[ "D-(244)" ] = "Escape"
    keymap_global[ "U-(243)" ] = []
    keymap_global[ "U-(244)" ] = []
    keymap_global[ "D-Escape" ] = "(243)"
    keymap_global[ "U-Escape" ] = []

    普段 106 キーを使ってないので、
    何か気づいていない副作用が見つかるかもしれません。

    返信削除
  4. こんばんは
    >つねに、Escapeが押された状態になってしまい
    恐ろしいことしてしまっていたのですね・・・

    一日使ってみましたが、ESCを比較的多用する
    ATOK,Excel,TeraTerm(上のvi)では、全く問題は発生しませんでした
    お忙しいところご教示頂き大変感謝しております

    これからも開発がんばってください
    ありがとうございました

    返信削除