見出し画像

自作キーボードとAutoHotKeyとPowerPointの最強タッグ

モチベーション

以前、多ボタンマウスとAutoHotKeyの連携を試してましたが、自キーでもできるなと…ようやく重い腰を上げて設定できたのでメモを残します。

どこをどう設定するか

(追記:Blindの使い方で指摘もらいました。自分でも再度理解しなおしたので文中に追記しておきます。)

下の写真の赤枠内を設定していきます。黄色で囲ったキーがレイヤーキーになっているため、ここを押しながら赤枠内キーを操作するとショートカット動作させるイメージです。
レイヤーキー押し込み状態じゃないデフォルト設定では普通のqwerty配列が割り当てられてます。

キー配置

今回は特にアプリごとの切替はAutoHotKeyを活用したい。そこで自キー(QMK)側ではF13~F24を設定、AutoHotKeyでキー割り当てを設定、これでキーを押せばパワポのめんどくさいショートカットが楽に行える!という魂胆です。

ちなみに環境としては
・BLE micro Pro
・Promicro
の両方

もともとはどう設定していた?

keymap.c側でマクロキーを設定していました。編集したいときに毎回makeしたりめんどくさいので、AutoHotKey側で設定できるなら楽になる。それにPowerPointショートカットに限定しなくともアプリごとに使える。

上がkeymap.c、下はKEYMAP.JSN

QMKの設定

設定したいキーの最上段をF15~F24、真ん中の段をAlt + F15~F24、再下段をShift + F15~F24に設定。これはQMKのデフォルトで効くので、keymap.cを改めて設定したりせずに済むのが嬉しい(BLE micro pro)。

KEYMAP.JSN
["KC_ESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F11","KC_F12","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_PAUS",
"KC_TAB","KC_F15","KC_F16","KC_F17","KC_F18","KC_F19","AT_MBTN1","AT_MBTN1","KC_F20","KC_F21","KC_F22","KC_F23","KC_F24","AT_PtEsc",
"KC_LALT","LCTL(KC_F15)","LCTL(KC_F16)","LCTL(KC_F17)","LCTL(KC_F18)","LCTL(KC_F19)","AT_MBTN1","AT_MBTN1","LCTL(KC_F20)","LCTL(KC_F21)","LCTL(KC_F22)","LCTL(KC_F23)","LCTL(KC_F24)","JP_SCLN",
"KC_LSFT","LSFT(KC_F15)","LSFT(KC_F16)","LSFT(KC_F17)","LSFT(KC_F18)","LSFT(KC_F19)","AT_MBTN1","AT_MBTN1","LSFT(KC_F20)","LSFT(KC_F21)","LSFT(KC_F22)","LSFT(KC_F23)","LSFT(KC_F24)","KC_RSFT",
"KC_LCTL","KC_LGUI","KC_LALT","KC_NO","KC_BSPC","KC_SPC","KC_NO","KC_NO","KC_ENT","KC_PMNS","KC_NO","KC_WH_R","JP_RBRC","JP_AT"]]}

qmk configuraterとかで確認してもちゃんと動作していることが確認できました。

確認

AutoHotKeyの設定

ここまで設定できればあとはAutoHotKeyで(例えば)PowerPointのショートカットを設定してやれば良いです。

装飾キーの組み合わせの部分で詰まりましたが、ありがたいことにTwitter上でBlind設定を教えてもらいました。

装飾キーがついていない場合は気にせず記載。
    F17::Send,!{h}{a}{c} ;文字左右中央揃え
装飾キーがついている場合は二行に分けてBlindも記載。
    ^F17::
        Send,{Blind}
        Send,!{n}{s}{h} ;図の挿入
    Return

このときに、 
     ^F17::Send,{Blind}!{n}{s}{h} ;
と書くとうまく動作しませんでした。
Blindに関する仕様をざっと見たけど…まぁ製品作ってるわけでもなければ自分向けのものなので動けばいいや精神で進めます。

追記
AutoHotKeyのWikiにBlindについて記載がありました。
Send / SendRaw / SendEvent / SendInput / SendPlay - AutoHotkey Wiki (ahkwiki.net)

Sendコマンドが始まるとき、仮想的に修飾キーを離した状態になる。
コマンド終了時に、再びもとの状態に戻される。
この動作は、Keysの最初に {Blind}をつけることで無効化できる。

Send / SendRaw / SendEvent / SendInput / SendPlay - AutoHotkey Wiki (ahkwiki.net)

実際の挙動見てみました。Shift + F15でShift + a,b,cの挙動を確認。

Blindなしの場合。Shiftが離れる。

Blindなしの場合

Blindありの場合。Shiftがはなれない。

Blindありの場合

やりたいことによってどっち使うかを決めた方がよさそう。
今回は主にPowerPointのショートカットを考えるのでAltは押しっぱなし状態になってほしい。つまり、Blindを使えばAltを押しつづけられながら(Altの開放がキャンセルされながら)複数入力が効く。

まぁQMK側ではShift + F15~F24、Ctrl + F15~F24を使っているので、Alt系のショートカットするにはBlind関係ないと気づきました。

AutoHotKey奥深いっすね。

PowerPointのショートカットキー

ここまできたら自分の好みです。ショートカットキーの配置は以下のように設定してます。特にAlt + j + s + o + wとか覚えていられない。設定しておけばPowerPoint作成が爆速になるので残業が減る。

キー設定

色がついているのは用途のグループピングイメージ。
結局AutoHotKey側はこんな感じになりました。もっと簡潔に書ける気がするけど動けばよし。
追記:Blindは特に不要だと分かったので下記コードを更新した。
追記:オブジェクトを揃えるやつとか、Alt + j + d + a + a系("図形の書式"から配置操作)を使っていたけど、これだとスクショ張り付けたような図があると動作しない。Alt + h+ g + a系("ホーム"からの配置操作)だと可能なので下のコードだけ書き換えました。線の色や太さなどもホームタブから操作できる系はもろもろ修正。

 ;===== PowerPoint =====
#IfWinActive,ahk_exe POWERPNT.EXE
    +WheelUp::
        ppobj:=ComObjCreate("PowerPoint.Application")
        ppobj.ActiveWindow.SmallScroll(0,0,0,2)
    Return

    +WheelDown::
        ppobj:=ComObjCreate("PowerPoint.Application")
        ppobj.ActiveWindow.SmallScroll(0,0,2,0)
    Return

    ; MooseChair左手
    F15::Send,!{j}{d}{e}{e} ;頂点の編集
    F16::Send,!{h}{a}{l} ;文字左揃え
    F17::Send,!{h}{a}{c} ;文字左右中央揃え
    F18::Send,!{h}{a}{r} ;文字右揃え
    F19::Send,!{h}{a}{t}{t} ;文字上揃え
    ^F15::Send,!{h}{e}{e} ;頂点の編集
    ^F16::Send,!{h}{s}{o}{s} ;線の種類
    ^F17::Send,!{n}{s}{h} ;図の挿入
    ^F18::Send,!{j}{d}{s}{f} ;図の色
    ^F19::Send,!{h}{a}{t}{m} ;文字上下中央揃え
    +F15::Send,!{h}{g}{o} ;オブジェクト回転
    +F16::Send,!{h}{s}{o}{w} ;線の太さ
    +F17::Send,!{h}{s}{o} ;線色
    +F18::Send,!{j}{d}{t}{i} ;文字色
    +F19::Send,!{h}{a}{t}{b} ;文字下揃え

    ; MooseChair右手
    F20::Send,!{h}{g}{a}{t} ;上揃え
    F21::Send,!{h}{g}{a}{l} ;左揃え
    F22::Send,!{h}{g}{a}{c} ;左右中央揃え
    F23::Send,!{h}{g}{a}{r} ;右揃え
    F24::Send,+^{.} ;文字大
    ^F20::Send,!{h}{g}{a}{m} ;上下中央揃え
    ^F21::Send,!{h}{g}{a}{v} ;上下均等
    ^F22::Send,!{h}{g}{a}{h} ;左右均等
    ^F23::Send,!{h}{g}{r} ;最前面移動
    ^F24::Send,{Blind}+^{vkBC} ;文字小
    +F20::Send,!{h}{g}{a}{b} ;下揃え
    +F21::Send,!{s}{c} ;そのスライドからスライドショー
    +F22::Send,^{F1} ;リボン開閉
    +F23::Send,!{h}{g}{k} ;最背面移動
    +F24::Send,!{w}{m} ;スライドマスター

#IfWinActive

最後に

Twitter上でも複数の方にアドバイスや情報いただきありがとうございました。また他の人が躓いたときの何かしらの参考になればよいのでまとめておきました。

あと、エクセル用の設定やVScode用の設定しなきゃいけないのは正直めんどくさいけど、一回設定できれば気になる点を部分修正で良いから連休中にざっとやってしまいたいですね。

小ネタ

AutoHotKey触るときのエディタ

AutoHotKeyはVScodeで拡張機能の"AutoHotKey Plus Plus"を入れて使っている。

AutoHotKeyの冒頭に書くおまじない

これを冒頭に書いておくと再度スクリプトをRunしたときのメッセージがでない。
#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%

うざいキーの固定

ナムロックキーとスクロールロックキーはうざいので固定。
SetNumLockState, AlwaysOn
SetScrollLockState, AlwaysOff

Shift + ホイール操作で横スクロール

どこかで見たものを使っている。思い出せない…。たぶんググれば出てくる。(PowerPoint)

    +WheelUp::
        ppobj:=ComObjCreate("PowerPoint.Application")
        ppobj.ActiveWindow.SmallScroll(0,0,0,2)
    Return

    +WheelDown::
        ppobj:=ComObjCreate("PowerPoint.Application")
        ppobj.ActiveWindow.SmallScroll(0,0,2,0)
    Return

装飾キーどれがどれか忘れる問題

あれ、Ctrlって!だっけ、#だっけ?となりたびたび調べていたけどめんどくさい。.ahkファイルにコメントアウトで書き込んでたけどそこを見に行くのもめんどくさい。

VScodeのユーザースニペット(.ahk)で解決。

{
	"Autohotkey_Shift": {
		"prefix": "shift",
		"body": "+"
	},
	"Autohotkey_Ctrl": {
		"prefix": "Ctrl",
		"body": "^"
	},
	"Autohotkey_Alt": {
		"prefix": "alt",
		"body": "!"
	},
	"Autohotkey_Win": {
		"prefix": "Win",
		"body": "#"
	},
}
ユーザースニペット

以上です。

この記事が気に入ったらサポートをしてみませんか?