keyhac でプログラムを実行する
keyhac v1.08 には shellExecute() という関数があるが、API リファレンス を読むと「この関数をメインスレッドで呼び出すことは出来ません。代わりに Job 機能などを使って、サブスレッドで呼び出すようにしてください。」などと書かれていて、どーすりゃいいのかわからない。作者さんに問い合わせたところ、実際にはサブスレッドを作らなくても使えるそうだ。
keyhac でホットキーランチャを実現するには、次のように「『shellExecute() を実行する関数』を返す関数」を自分で定義して、それを指定する。
# config.py from keyhac import * import re def launch(path, param = u"", workdir = u""): if workdir == u"": workdir = re.sub(ur"\\[^\\]*$", ur"", path) def _launch(): if path != u"": shellExecute(None, None, path, param, workdir, SW_NORMAL) return _launch def configure(keymap): keymap_global = keymap.defineWindowKeymap() keymap_global["W-I"] = launch(ur"C:\Program Files\Internet Explorer\iexplore.exe")
この例では Win+[ I ] で IE が起動する。Win+[ E ] や Win+[ M ] もオーバーライドできる*1が、 Win+[ L ] だけはオーバーライドできないようだ*2。
ちなみに、同じことを窓使いの憂鬱でやるとこんな感じ。
key W-I = &ShellExecute("open", "C:\\Program Files\\Internet Explorer\\iexplore.exe",,, ShowNormal)
同じことを AutoHotkey でやるとこんな感じ。
#i:: launch("C:\Program Files\Internet Explorer\iexplore.exe") launch(cmdline, workdir = "") { run %cmdline%, %workdir%, , pid winwait ahk_pid %pid%, , 3 winactivate ahk_pid %pid% }