keyhac
Changes

Changes

1.81

  • Use DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 for better DPI scaling.
  • For high DPI case, use round function to calculate the font size instead of floor function.
  • Made trackpad scroll smoother in the console window.

1.80

  • Fixed an issue where Keymap.popBalloon() always fails.

1.79

  • Supported high DPI monitors

1.78

  • Moved from Python36 to Python38.
  • Removed older Windows versions (XP,Vista,7,8) from the supported list. (May work, but not supported)

1.77

  • Moved to Python36 from Python35.
  • The command which is returned from ActivateWindowCommand now returns found Window object or None.
  • Added applying_func property in WindowKeymap class. This is a callback function which is called just before applying the keymap.

1.76

  • Fixed an issue that Keyhac cannot exit correctly when ListWindow is opened.
  • Fixed an issue that the task tray icon disappears after explorer crashes and reboots.

1.75

  • Added "LButton" / "RButton" / "MButton" mouse buttons as key expression strings.
  • Added keymap.updateKeymap() method. By this method you can apply the changes of WindowKeymap object contents immediately.
  • Changed clipboard monitoring method internally. (SetClipboardViewer -> AddClipboardFormatListener)
  • Stopped XP support.

1.74

  • Added keymap.clipboard_history.enableHook() method to enable/disable clipboard monitoring hook.
  • Fixed Japanese string resources for task tray menu.

1.73

  • Don't cancel oneshot modifier key when Key-Up event comes.
  • Cancel oneshot modifier key when mouse buttons / wheel are used.
  • Fixed an issue that application cannot be started when working directory is different from exe directory.

1.72

  • Handle key events injected by other programs.

1.71

  • Allow multiple pyauto.Hook instances, so that Keyhac can co-exist with applications which use pyauto.Hook.
  • Fixed the error which happens when a clipboard history item is removed in a state that the clipboard contains non-text object.
  • Moved to Python35 from Python34.
  • Stopped using cx_Freeze, and started to use own freezing system.

1.70

  • Added english support.
  • Changed the name of application from "keyhac" to "Keyhac".
  • Changed the naming convention for Keymap methods which generate command. (command_MoveWindow -> MoveWindowCommand, etc)

1.64

  • ビルドに Visual Studio 2015 を使うようにした。
  • Python33 から Python34 に移行
  • ckit.Window の代わりに ckit.TextWindow を使うようにした。(ckitの設計変更に追従)
  • デフォルト設定ファイルに、クリップボードのテキストの全角/半角を変換して貼りつける機能の例を追加。(To Half-Width, To Full-Width)

1.62

  • デフォルト設定ファイルのクリップボード履歴の最大数が 1000 ではなく 10000 になっていたのを修正。

  • ドキュメントをリファレンスのツリー形式に統合。

  • マウスの水平ホイールの擬似的な操作をするためのコマンドを追加

    • command_MouseHorizontalWheel

1.61

  • クリップボード履歴として保存するデータの最大合計サイズを keymap.clipboard_history.quota で設定できるようにした。
  • デフォルト設定ファイルに、クリップボードのテキストを変換して貼りつける機能の例を追加。(Quote,Indent,Unindent)
  • デフォルト設定ファイルに、クリップボードのテキストをデスクトップにファイルとして保存するコマンドの例を追加。
  • フックのなかで与えられた関数を実行するメソッド、Keymap.hookCall() を追加。
  • クリップボード履歴リストからの貼り付け処理に Keymap.hookCall() を使うようにして、キーが押しっぱなしになってしまう可能性があったのを修正。
  • テキストファイルを編集するメソッド、Keymap.editTextFile() を追加。
  • OS 起動直後など Keymap.getTopLevelWindow() が None を返すことがあり、command_MoveWindow_MonitorEdge でエラーが発生することがあったのを修正。

1.60

  • Python27 から Python33 に移行。
  • Firefox 22.0 から、クリップボード履歴へのコピーが失敗するようになってしまっていた問題を回避。OpenClipboard()を、WM_DRAWCLIPBOARD の中ではなく、delayedCall() で呼ぶようにした。

1.52

  • shellExecute() を ckit ではなく pyauto のものを使うようにした。これに伴って、第一引数の hwnd が廃止された。
  • command_ShellExecute() の hwnd 引数を廃止した。
  • Keymap.popListWindow(), Keymap.cancelListWindow(), Keymap.isListWindowOpened() を追加し、クリップボード履歴以外の目的にもリストウインドウを利用できるようにした。
  • Window.setDelayedCall() を Window.delayedCall() に変名。
  • Balloon のフォントがおかしくなっていたのを修正。
  • モディファイアを押している間にマウスのボタンを押したら、ワンショットモディファイアが発動しないようにした。

1.51

  • ini ファイルに [DEBUG] send_input_on_tru = 1 が設定されているときだけ、TRU で Input.send() するようにした。 (常に Input.send() してしまうと、Win8 で Alt-TAB などが使えなくなっていたため。)
  • Keymap.callHotKey を廃止。クリップボード履歴リストは Window.setDelayedCall を使って呼び出すようにした。
  • ini ファイルの不要なセクションを削除 ( [FONT], [COLOR] )
  • APIリファレンスを整備した。

1.50

  • getAsyncKeyState()をつかって、キーが押されていない場合に、KeyUp を省略する処理を廃止。 (VAIO Z の Fn + F3, Fn + F4 によるボリューム調節操作が、押しっぱなしになってしまう問題を修正。)
  • 定期的なサブスレッド処理を行うための Cron 機能を追加。
  • Keymap.setFont()、Keymap.setTheme() を追加。

1.48

  • モディファイアが押されっぱなしになってしまう問題を修正。 (TRUのときも、Input.send() を使ってキー入力生成処理を行うようにした。)

1.47

  • keyhac.shellExecute が ckit 版ではなく、pyauto 版になっていたのを修正。

1.46

  • 1.45で、ckit 側の整理の影響で、起動しない状態になっていたのを修正。

1.45

  • クリップボード履歴で、Migemo を使ったインクリメンタルサーチが、エラーになってしまうのを修正。

1.44

  • Keymap.editor に呼び出し可能オブジェクトを設定したとき、config.py の編集がエラーになっていたのを修正。
  • ドキュメントを整備 (Pythonのコードブロックに色をつけるなど)
  • getTopLevelWindow() がエラーになるケースがあったのを修正。
  • keymap.clipboard_history.maxnum の設定が、履歴の読み込み時に効いていなかったのを修正。
  • インストール場所やデータ置き場に、日本語文字が含まれているときに、エラーになっていたのを修正。

1.43

  • D-, U-, O- がエラーになってしまっていたのを修正。

1.42

  • キーボードのタイプによって、キーコードが異なる記号系のキーに関しても、 名前でキー入力条件を指定できるようにした。(Semicolonなど)
  • xml.etree など、標準ライブラリの一部が含まれてなかったのを修正。
  • デスクトップにキーボードフォーカスがある間、デフォルトキーマップが効かない問題を修正。
  • キーボードマクロの記録開始や停止のときに、バルーンヘルプを表示するようにした。

1.41

  • タスクトレイのアイコンから、キーボードマクロの記録の開始と終了ができるようにした。

1.40

  • ver 1.38 と 1.39 の Win Alt 単体押しキャンセル処理が不完全だったのを修正。

1.39

  • ver 1.38 の Win Alt 単体押しキャンセル処理が不完全だったのを修正。
  • モディファイアキーを押しなおす必要があるようなマルチストロークのキーが うまく入力できず、途中でキャンセルされてしまっていたのを修正。

1.38

  • Pythonの標準ライブラリを含めるようにした。
  • クリップボード履歴のカスタマイズ方法をドキュメントに追記。
  • デフォルト設定ファイルに、クリップボード履歴の最大個数のカスタマイズ方法を追加。
  • Window.maximize(), Window.minimize(), Window.restore() に、SetWindowPlacement() ではなく、WM_SYSCOMMAND を使うようにした。 これにより、最大化したまま最小化したウインドウを restore() するときに、通常サイズに戻ることなく、最大化状態で復帰するようにした。
  • Win や Alt をモディファイアとして使ったキー入力に割り当てたアクションの実行後に Win や Alt の短押し相当の 動作が発動してしまう場合があったのを修正。

1.37

  • 1.36 の修正で、ユーザ定義モディファイアのワンショットモディファイアの 動作がエラーになってしまっていたのを修正。

1.36

  • 1.35 のワンショットモディファイア関係の修正で、全てのキー入力が、 内部的に replaceKey 扱いになってしまっていたのを修正。

1.35

  • Shift や Ctrl などの標準のモディファイアキーにワンショットモディファイアの 割り当てを行うと、別のウインドウで押しっぱなしになってしまう問題を修正。 ( Up の 処理のあとに、ワンショットの処理を実行するようにした。 )
  • キーフックをOFFにしたときに、キーフックの強制解除が検出されてしまっていたのを修正。

1.34

  • ウインドウ切り替え直後のモディファイアキーが無視されてしまう問題を修正。 1.33 に入れた実験的なコードが影響してしまっていた。
  • comtypes を同梱するようにした。
  • ビルド方法の整理。C++部分は Visual C++ 2008 (Express)を使うようにした。
  • ドキュメント生成に使用している Doxygen のバージョンアップ

1.33

  • クリップボードのリストウインドウが、Escで閉じなくなってしまうことがあるのを修正。
  • タスクトレイのメニューに、フックのON/OFFの項目を追加。

1.32

  • 1.31 の変更により、keymap.popBalloon で出したバルーンを消すための タイマーが解除されなくなってしまっていたのを修正。
  • command_ActivateWindow に force 引数を追加。これまで True が与えられたときと 同じ挙動になっていたが、現在は デフォルト False な点に注意が必要。
  • デフォルト設定ファイルに、ActivateOrExecute のサンプルを追加。 ウインドウをアクティブ化するか、まだであれば起動する、というサンプル。
  • command_InputText() で、キー上げイベントを送り忘れていたために、 同じ文字が連続した入力が正しく行われなかったり、IMEがOnになってしまったり する問題があったのを修正。

1.31

  • keymap.popBalloon に timeout を与えたときに、 closeBalloonの呼び出しがエラーになってしまうのを修正
  • keyhac を複数起動したときに、エラーをログファイルに書くのではなく、 メッセージボックスで教えるようにした。

1.30

  • クリップボード履歴ウインドウを Esc でキャンセルするときに、 無関係なウインドウがアクティブになってしまうケースがあったのを修正。
  • クリップボードビューアの再インストール処理をするときに、警告ダイアログや 警告ログを出さないようにした。(ただし内部ログONにしているときは、警告ログは出力される)
  • キーフックが強制解除されたことを検出し、フックを再設定するようにした。
  • 内部ログ OFF のときも、フック再設定のメニューを表示するようにした。

1.29

  • クリップボードチェインの後続へのメッセージの転送をやっていなかったのを修正。
  • クリップボードのチェイン切れ監視処理を軽量化。
  • そのほかクリップボード周りの処理を一部見直し。
  • クリップボード履歴ウインドウを表示するときに、フォーカスウインドウが見つからない場合 があるのに対応

1.28

  • Migemo の辞書が配置されてない場合に、アルファベットの大文字を含む文字で インクリメンタルサーチをしようとすると、エラーが表示されていたのを修正。
  • クリップボード履歴の不整合チェックで、3回連続で失敗した場合だけ、 失敗とみなすようにした。(タイミングで失敗するケースがあるかもしれないため)
  • IMEのOn/Offを取得/設定するための API pyauto.Window.getImeStatus(), pyauto.Window.setImeStatus() を追加

1.27

  • python27を使うようにした。
  • migemo のバージョン 1.3c を使うようにした。
  • シャットダウンやログオフ時に、クリップボード履歴が保存されていなかったのを修正。
  • クリップボードの更新が行われない状態になったことを検出して、フックの再設定を 行うようにした。また、この問題の解析のためのメッセージ表示を行うようにした。

1.26

  • ユーザモディファイアの単体キー入力をカスタマイズできるようにした。 これまでは、ワンショットモディファイアのみ検出することができたが、 UpとDownも検出できるようにした。
  • タスクトレイのアイコンから設定ファイルの編集を実行したときに、 無条件に keyhac.exe と同じディレクトリの config.py を開こうと していたのを修正。
  • エラーメッセージが出力されたときに、コンソールウインドウを表示するようにした。
  • デフォルト設定ファイルに、Window.sendMessage() の使用例を追加。
  • Keymap.synccall を追加。サブスレッドからメインスレッドに同期しながら関数呼び出しできるようにした。

1.25

  • 設定ファイルの置き場所を keyhac.exe の隣ではなく、アプリケーションデータ ディレクトリに変更した。 ( XP では c:/Documents and Settings/Application Data/keyhac、 Vista/7 では c:/Users/tom/AppData/Roaming/keyhac)

    ただし config.py と keyhac.ini を、keyhac.exe と同じディレクトリにおいておけば、 そちらを優先的に使用する。

  • ウインドウをアクティブ化するコマンド command_ActivateWindowを追加

  • ソースコードの一部を CraftLaunch などと共有するために整理。

1.24

  • Winキーを使ったキーのカスタマイズ時、スタートメニューが開いてしまうのを修正。
  • 1.22で行ったAltキーの対応が十分でなかったのを修正。 (キーではなく、コマンドやマルチストロークを割り当てていた場合の対策がされていなかった。)

1.23

  • モディファイアのおかしな状態を修正する処理を追加 たとえば Win-L を押して ロック画面に行ったときに、Winキーが押されっぱなしになってしまうような現象を回避するため。

1.22

  • Altキーを使ったキーのカスタマイズ時、メニューバーにフォーカスが奪われて 期待通りの動作にならない場合があるのを修正。
  • マルチストロークキーマップのとき、カーソル位置にヘルプを表示するようにした。
  • サンプル設定ファイルに、メモ帳を Emacs 風にする設定を追加。

1.21

  • クリップボード履歴リストを左右で切り替えたときに、 ウインドウ位置がおかしくなってしまっていたのを修正。
  • pyautoのドキュメントをkeyhacのドキュメントの一部として 含めるようにした。

1.20

  • キーボードマクロ機能を追加。

1.19

  • クリップボード履歴リストを、できるだけキャレット位置に出すようにした。
  • クリップボードビューアの処理が怪しかったのを修正。 (ペースト時に、いったんクリップボードビューアを解除し忘れていた)

1.18

  • マルチストロークなキー割り当てに対応。
  • 1.13 の変更で 64bitのアプリケーションにフォーカスがあることを検出できなくなっていたのを修正。

1.17

  • ワンショットモディファイアをほかのキー入力に置き換えたとき、モディファイアが押された扱いになっていたのを修正。
  • Window.defineWindowKeymap の path 引数を廃止した。( 64bitOSで使えないので廃止予定だった)

1.16

  • クリップボード履歴を、Shiftを押しながら決定したときは、クリップボードの内容を更新した後の貼り付けを行わないようにした。

1.15

  • テキストエディタの呼び出し時に、引数のファイル名が引用符で括られていなかった のを修正。
  • キーが仮想的に押されていないことになっている場合に、キーのリリースのイベントを送らないようにした。

1.14

  • クリップボード履歴のウインドウが、アクティブにならない場合があったのを修正。
  • クリップボード履歴が更新されなくなってしまう場合があったのを修正。

1.13

  • keyhacを使うと、本来は機能するはずの一部のキー操作が出来なくなってしまうのを修正。

    • Altキーを短押ししてメニューバーにフォーカスを移動させる動作
    • 秀丸 や Apsaly の ファンクションキー表示が、Shift や Ctrl を押したときに切り替わる動作。
  • keymap.editor に呼び出し可能オブジェクトを設定したときに、エラーになっていたのを修正。

1.12

  • クリップボード履歴リストの内容をカスタマイズして、定型文やPythonの呼び出し可能オブジェクトを含めることが出来るようにした。
  • クリップボード履歴がDeleteキーで削除できなかったのを修正。
  • デフォルト設定ファイルで、Ctrl-Shift-X を クリップボード履歴の回転に割り当てる。
  • クリップボード履歴を回転させたり削除させたりしたときに、カーソル位置がウインドウの可視範囲外に行ってしまうことがあるのを修正。

1.11

  • クリップボード履歴からの引用貼り付け機能を追加

1.10

  • クリップボード履歴機能を追加

  • マウスの擬似的な操作をするためのコマンドを追加

    • command_MouseMove
    • command_MouseButtonDown
    • command_MouseButtonUp
    • command_MouseButtonClick
    • command_MouseWheel

1.09

  • python26を使うようにした。
  • コマンドプロンプトのウインドウで、キーカスタマイズされなかったのを修正。
  • アプリケーションの起動を行うコマンド command_ShellExecute を追加。
  • デフォルト設定ファイルに、Jobの使い方のサンプルを追加。

1.08

  • モディファイアが意図せず離されてしまうことがあったのを修正。

1.07

  • モディファイアが押されっぱなしになってしまうことがあったのを修正。

1.06

  • ワンショットモディファイアの機能を追加。

1.05

  • コンソールウインドウのマウスでの操作性を少し改善。
  • タスクトレイアイコンのメニューに、[ 端末のクリア ] コマンドを追加。
  • 起動オプションにプロファイラを有効にする -p を追加。
  • Window.getFocus()がエラーになる可能性があるのに対処した。
  • 64bit OS に対応。そして 64bit での動作テスト用のAPI enable64bitTest() を削除。
  • キー入力を行うコマンド command_InputKey を追加

1.04

  • 64bit対応テストのとき、getFocus()がNoneを返すことがあり、 そのときエラーになってしまう問題を修正。
  • 内部ログONのときのログの出し方を整理し、入力と出力が区別しやすいようにした。

1.03

  • 設定の再読み込みや、keyhacの終了をするときに、モディファイアキーを全て リリースする処理を追加。
  • 内部ログONのときに、入力されたキーのログ表示で、モディファイアキーが 表示されないのを修正。
  • コンソールウインドウのスクロールバーが、最初、下にはみ出ているのを修正。
  • 64bitモードで動作するアプリのカスタマイズに対応するため、 Keymap.enable64bitTest() を追加。テストするには、configure() の中で、 このメソッドを呼び出す必要がある。
  • Window.defineWindowKeymap() に、exe_name 引数を追加。引数 path を廃止予定 とした。path は、64bitモードで動作するアプリに対して使用することが出来ない ため、代わりに exe_name を使用することにした。exe_name には、フルパスではなく、 実行ファイル名の本体部分のみを指定する。

1.02

  • ini ファイル中のバージョン番号が更新されない問題を修正。
  • defineWindowKeymap() に check_func を渡したときに、 フォーカス切り替えイベント処理中にエラーになってしまうのを修正。
  • デフォルト設定ファイルに、Editボックスのカスタマイズ例を追加

1.01

  • フォーカス切り替えフックの中で、メモリ不足エラーが発生することがあるのを修正。

1.00

  • 最初のバージョン