Seeker's Memo

個人的で技術的かもしれないメモがメインのブログです。http://seekers.hatenablog.jp/about

Windows上(Win10)でのキーバインド変更を実現する

「keyhac」というソフトを導入、設定すれば自由に設定できるらしい

ここでどうぞ。
Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware

ダウンロードしてとりあえず起動する。

ZIPファイルで、中に添付物一式が入ってるので展開して好きなところに配置。
exeで起動して、起動中はシステムトレイに常駐する感じ。
※トレイアイコン左クリックとかで、「keyhac」の起動ログや操作ログが出る。

設定ファイルを編集

設定ファイルは、Windows10なら「C:\Users\"ユーザ名"\AppData\Roaming\Keyhac\」にあるiniファイルとpyファイル辺りがそうらしいのだが、
説明によると、

また、最初の起動で、アプリケーションデータディレクトリに自動的に以下のファイルが作られます。 ( Vista/7/8/10 では c:/Users/(name)/AppData/Roaming/Keyhac、XP では c:/Documents and Settings/Application Data/Keyhac)

config.py 設定ファイル
keyhac.ini 状態保存ファイル

config.py と keyhac.ini は、keyhac.exe と同じディレクトリにおいておけば、 そちらが優先的に使われます。USBメモリなどで持ち歩く際に便利な方法です。

らしいので、展開したファイル群の中に両ファイルを設置でもOKみたい

一応トレイアイコン右クリックすると設定ファイル編集ってでるのでそれ選んでも良い。


ここではとりあえず試しに、Ctrl+kとCtrk+uにそれぞれ例の動作を設定したい。ただの例だが。

Python言語で記述する。※あんまり触ったことないけど、サンプルを利用して勘で書いてみた。
※シンプルにするため、余計と思われるところは全部削除してから書いたので、必要なら色々追記したり書き換えると良い。

import sys
import os
import datetime

import pyauto
from keyhac import *


def configure(keymap):

    # --------------------------------------------------------------------
    # Text editer setting for editting config.py file
    # キーバインド変更するためのエディタ。標準ではnotepad.exeだがここでは好きなエディタ(Mery)を指定
    # Setting with program file path (Simple usage)
    if 1:
        keymap.editor = "C:\\Program Files (x86)\\Mery\\Mery.exe"

    # Setting with callable object (Advanced usage)
    if 0:
        def editor(path):
            shellExecute( None, "C:\\Program Files (x86)\\Mery\\Mery.exe", '"%s"'% path, "" )
        keymap.editor = editor

    # --------------------------------------------------------------------
    # Customizing the display

    # Font
    # 好きなフォントを指定。うちは自作のRictyファミリで
    keymap.setFont( "Ricty alters", 14 )

    # Theme
    keymap.setTheme("black")

    # --------------------------------------------------------------------

    
    # これは、OS全体に関わる設定
    # Global keymap which affects any windows
    if 1:
        # Windows OSのデフォルトキーバインドをとりあえず設定
        keymap_global = keymap.defineWindowKeymap()
        # 現在位置から行先頭までを選択し、削除。[Ctrl-U]に割り当て
        keymap_global[ "Ctrl-U" ]   =   "Shift-Home", "Back"
        # 現在位置から行末までを選択し、削除.。[Ctrl-K]に割り当て
        keymap_global[ "Ctrl-K" ]   =   "Shift-End", "Delete"
    
    # 【個別ソフト】「Chrome」の設定
    if  1:
        keymap_chrome = keymap.defineWindowKeymap( exe_name="chrome.exe" )
        keymap_chrome[ "Ctrl-H" ]   = "Back" #Backspace


** とりあえず望みはかなったが、Chromeとかでは効かないのでどうにかしたい
※VisualStudioとかもそうだが、個別のキーバインドが優先されてしまうので上記のように個別に書き足すと良いらしい。
(配列名=個別のソフト名など適当、exe_name=個別のEXEファイル)
自動起動したければ適当に。解説は省く。