2016年1月31日日曜日

Keyhac for Windows ver 1.72

https://sites.google.com/site/craftware/keyhac-en

1.72
  • Handle key events injected by other programs.

22 件のコメント:

  1. Keyhacの利用からは外れた質問なので、もしお時間がありましたら返答いただければと
    思います。

    実は、外部のpython3.5からKeyhac のライブラリを読み込んで、importしたpyauto を
    使ったプログラムを動かしたいと思っています。

    Keyhac ver 1.70 まではこれができたのが、Keyhac ver 1.71以降ではimport pyautoを
    実行するとエラーとなるようになりました。libディレクトリにあるpyautocore.pydの
    プレフィックス(pyauto.)がなくなったのが関係しているのかと思ったりしているですが、
    Keyhacのconfig.pyでimport pyautoとしてもエラーとならないことから、これが原因とも
    言えないのかなぁと思ったりもしています。

    この辺りの救済策がもし分かりましたら、ご助言いただけないでしょうか。
    的外れな質問で申し訳ありません。よろしくお願いします。

    import os.path

    sys.path.append(r"C:/keyhac_172/library.zip")
    sys.path.append(r"C:/keyhac_172/lib")

    import pyauto

    ...

    返信削除
    返信
    1. Keyhac 1.72 からは、cx_Freezeというプログラムではなく、独自の方法で配布パッケージを生成しています。pyd のimportのためには、sys.meta_path を使っています。これと同じ方法でロードできます。

      https://github.com/crftwr/keyhac/blob/master/keyhac_main.py#L7-L21

      また、pyautoは、githubにソースがありますので、keyhacとは独立してcheck-outして、buildして使うこともできます。

      https://github.com/crftwr/pyauto

      削除
    2. 仕組みの理解はこれからですが、無事スクリプトを動かすことができました。
      回答いただき、ありがとうございました。

      削除
  2. いつもよく使わせてもらってます.

    ふと思ったのですが寄付などは受け付けていないのでしょうか.
    プログラムが出来ない私としてはモチベーション上がるのであれば、そういう形で支援させて頂けると良いのですが

    返信削除
    返信
    1. 寄付は受け付けてません。お気持ちで十分でございます。

      要望などありましたら、Githubかメールなどでお願いします。

      削除
  3. ・AHKからの乗り換え検討
    個人的な事情に基づく質問ですので,差し支え有れば返事は頂かなくても結構です.

    現状autohotkeyというツールでキーボードの配置を変更しているのですが,CAPSLOCKや無変換などの特殊キーや修飾キー周りに不具合があり,キーのすり抜けや押しっぱなし現象がよく発生します.
    そういった現象やkeyhacを作者が実際使っていて,使用周りで予想されない挙動が起こることがあればどういったものか教えて頂きたいのです.

    返信削除
    返信
    1. モディファイアキーが押されっぱなしになってしまう問題は、過去に起きていましたが、対応を入れてからは、起きなくなったんじゃないかと思います。

      CapsLockをそれ以外のキーに割り当てるのは、Keyhacではおそらく出来なくて、他の非常駐タイプのキー置き換えソフト(レジストリを書き換えるやつ)と併用していただくのが良いと思います。無変換キーなどはKeyhacだけでカスタマイズできます。

      削除
  4. いつも便利に使わせて頂いております。

    一つお教えください。

    複数のkeymapを定義して、ウィンドウを切り替えずに手動でkeymapの切り替えを行いたと
    考えております。

    これを実現するやり方についてアドバイスいただけないでしょうか?

    よろしくお願いします。

    返信削除
    返信
    1. keymap._updateKeymap 関数でできることが分かりました。
      でも、アンダーバーで始まるのでクラス外での利用は推奨されないものと
      思います。

      もし、他に方法がありましたらお教えください。

      削除
    2. 返信が遅くなって申し訳ありません。

      ウインドウの切り替え以外のタイミングでキーマップの変更を行う手段は、_updateKeymapのような内部用のMethodを呼び出すか、current_map を書き換えることになりますが、どちらも通常の使い方ではありません。

      あるいは、configure() を呼び出せば、キーマップをリセットしたうえで、もう一度 config.py を実行します。

      削除
    3. 返信ありがとうございます。

      今後、keyhacのバージョンアップをされる際に、public的関数の提供も検討いただければ幸いです。

      よろしくお願いします。

      削除
  5. 教えて下さい。

    以前に、このblogでIMEを使って入力中であるかどうかは取得できないか調査して
    いただいたことがあると思います。

    この調査結果がどうだったか教えていただけますでしょうか?
    また、もし方法があるようであれば、その方法をお教えください。

    よろしくお願いします。

    返信削除
    返信
    1. 返信が遅くなって申し訳ありません。

      以前調査していたのですが、その時は、Keyhac以外の他のアプリケーションがIME入力中(未確定のテキストがある状態)であるか、判定が出来ずに断念しました。IMEがONになっているかどうかは、判定できるのですが、入力中かどうかが取れませんでした。

      削除
    2. やはり判定できないのですね。
      ご回答いただき、ありがとうございました。

      削除
  6. KeyhacのトップページにあるVisual Studio 2015 Update 1 ランタイムパッケージへのリンクが切れておりますので、お知らせします。

    現在はこちらのページでしょうか。
    https://www.microsoft.com/ja-jp/download/details.aspx?id=48145

    返信削除
    返信
    1. ご指摘ありがとうございます。

      リンク先がなくなっていたので、下のURLに変更しておきました。
      (Update 2 用のランタイムパッケージなので、動くか自信がありませんけども)

      https://www.microsoft.com/ja-jp/download/details.aspx?id=51682

      削除
  7. xkeymacs, autohotkey から乗り換えで愛用させていただいています。

    ひとつ質問があります。(Windows版の 1.7.2)
    クリップボードについて、
    クリップボードの監視を止める設定等はないでしょうか?

    keyhac に限らないのですが、
    クリップボード監視機能のあるユーティリティを使うと
    Excel 2013/2016 で、
    『クリップボードを空にできません。
    別のアプリケーションがクリップボードを使用している可能性があります。』
    というダイアログが頻発するので、
    仕方なくフックOFFに切り替えて使っています。


    keymap.clipboard_history.maxnum = 0
    を設定してみたのですが、効果ないようです…

    返信削除
    返信
    1. 試してないのでうまくいくかわからないのですが、
      keymap.clipboard_history.destroy()
      でどうでしょうか?

      削除
  8. 早速のご回答ありがとうございます。

    まず、以下を試してみたのですが、解消に至りませんでした。
    keymap.clipboard_history.destroy()

    configure 関数の中身を1行だけにしてもExcelと競合してしまうようで、
    ダイアログが出てきます。

    def configure(keymap):
    keymap.clipboard_history.destroy()



    その他、以下をいろいろ組み合わせてみましたが、
    うまくいかないようです…。

    keymap.clipboard_history.maxnum = 0
    keymap.clipboard_history.quota = 0
    keymap.clipboard_history.destroy()


    何か、他にできることがあれば試してみますので、
    お知恵を拝借できると助かります。
    (本来、Microsoft 側の問題なので、心苦しいのですが…)

    返信削除
  9. _onTimerCheckSanity() 内部の
    self.clipboard_history.checkSanity() が定期的に呼ばれている為、
    クリップボードをつかんでしまうように見えましたので、
    以下のようにしてみたところ、
    問題の現象が起きなくなったようです。(場当たり的ですが…)
    ひとまずこれで様子を見ることにします。

    keymap.clipboard_history.destroy()
    keymap._onTimerCheckSanity = keymap.checkSanity


    [keyhac_keymap.py]
    def _onTimerCheckSanity(self):
    self.checkSanity()
    self.clipboard_history.checkSanity()

    返信削除
    返信
    1. 上記でも10回に1回ほど発生してしまうようでしたので、
      結局、以下の設定に落ち着きました。今のところ、大丈夫そうです。

      keymap.clipboard_history.maxnum = 0
      keymap.clipboard_history.quota = 0
      keymap.clipboard_history.destroy()
      keymap.clipboard_history.checkSanity = lambda : None

      削除
    2. 横から失礼します。

      同様の現象で悩んでいましたので上の設定を拝借させて頂きました。
      代替のキーすり抜けが無い良いソフトが無いので非常に助かります。

      削除