自由にファンクション・キーをカスタマイズするには

ファンクション・キーをショートカット・キーに割り当てられない不便さ

Vectorworks は、F1~F4(他も?)が予約キーとなっており、F5~F12は、ツール・ボタンを割りつけることはできますが、どういうわけかメニュー・コマンドのショートカット・キーにすることはできません。どちらかというと、ファンクションキーにメニュー・コマンドをショートカット・キーとして割り付けたいものです。

それを最も自由に実現するツールとして、AutoHotkey をご紹介します。

自由にファンクション・キーをカスタマイズする方法

キーボード・ユーティリティはVector等で様々なフリーウェアが入手可能です。いろいろと試してみたのですが、結論として、AutoHotkey が細かな設定が可能で一番使いやすいです。英語のフリーウェアですが、素晴らしい日本語マニュアルもありますので言語の障壁はほとんどありません。
日本語マニュアル> AutoHotkeyを流行らせるページ

それではAutoHotkeyをインストールしたら、ファンクション・キー等にVectorworksのコマンドを割り当ててみましょう。

下記は、拙作のプラグインを割り当てる例です。テキストファイルで次のように記述して、拡張子をahkとして保存して、ahkファイルをダブルクリックするとAutoHotkeyが有効になります。くわしくは、上記日本語マニュアルの「イントロダクション」~「キーリスト」くらいまで読むとだいたい使えるようになると思います。

F1::^!+t		;i方向移動
F2::^!+u		;j方向移動
F3::!+4			;オフセット移動ツール
F4::^!+@		;基準線角度の取得

"F1" はファンクション"F1"キーを表します。F1~F24まで指定することができます。
"::" は、ホットキーとして、以後に記述するのキーの組み合わせを割り当てます。
"^" は、Ctrlキー、"!"は、Altキー、"+"はShiftキーを表します。
"t", "u", "4", "@" は、アルファベットや数字キー等を表します。
";" は、以後の記述がコメントとして扱われます。

ようするに、"Fxx::"以後に、Vectorworks の作業画面の設計で割り当てたショートカット・キーを記述すればいいわけです。

Ctrlキーとファンクション・キーを組み合わせるには次のように記述します。

^F1::Send,^!+t		;i方向複製
^F2::Send,^!+u		;j方向複製
^F3::Send,!+5		;オフセット複製ツール
^F4::Send,^!+d		;オフセット回転移動ツール

"Send," は、キーストロークを発生させるAHKコマンドです。ファンクション・キーにCtrlキーやAltキーを割り当てるときには、このコマンドの記述が必要です。

ファンクション・キーの設定の他に、テンキーの近くに"="やTABキーを配置する次のような割り当ても便利です。

PgUp::Tab		;PageUpにTabを割り当て
PgDn::Send,+{tab}	;PageDownにShift+Tabを割り当て
NumLock::=		;NumLockに=を割り当て
LWIN::Del		;左WINキーにDeleteを割り当て

上の記述のままだと、Vectorworks以外のアプリケーションでも、割り当てたキーにキーストロークが発生してしまい、思わぬ動作が発生することがあります。そこで次のように記述して、Vectorworks のみでキーストロークが発生するようにします。

#IfWinActive VectorWorks 12.5	;VectorWorksメインウィンドウ

PgUp::Tab		;PageUpにTabを割り当て
PgDn::Send,+{tab}	;PageDownにShift+Tabを割り当て
NumLock::=		;NumLockに=を割り当て
LWIN::Del		;左WINキーにDeleteを割り当て

F1::^!+t		;i方向移動
F2::^!+u		;j方向移動
F3::!+4			;オフセット移動ツール
F4::^!+@		;基準線角度の取得

^F1::Send,^!+t		;i方向複製
^F2::Send,^!+u		;j方向複製
^F3::Send,!+5		;オフセット複製ツール
^F4::Send,^!+d		;オフセット回転移動ツール

"#IfWinActive" は、ホットキーを特定のウィンドウがアクティブ/存在時のみ有効になるようにするAHK関数です。Vectorwork はちょっと特殊なので、ahk_class というウィンドウクラスを特定するAHK 関数では拾うことができません。素直にタイトルバーに表示される文字を記述し、アクティブウィンドウを指定します。上記はVectorworks 12.5の場合なので、11.5 や 2010 の方は、ウィンドウバーのタイトル表示に応じて記述してください。

更に、移動コマンドや配列複製のウィンドウでも、PageUp等に割り当てたキーが動作するようにしてみましょう。以下を追記します。

#IfWinActive ahk_class #32770	;移動コマンドや配列複製のウィンドウ

PgUp::Tab			;PageUpにTabを割り当て
PgDn::Send,+{tab}		;PageDownにShift;Tabを割り当て
F12::Send,{right}*(-1)		;数値を±反転

移動コマンドや配列複製のウィンドウは、ahk_class で拾えるのでそのようにしています。"#32770"がウィンドウクラスを表しているのですが、Vectorworks のバージョンによって異なると思いますので、12.5以外の方は AutoHotkey に付属している "Window Spy" というツールで調べてみてください。

最終的に、AutoHotkeyのスクリプトは次のようなものになります。後は自分の設定に合わせてカスタマイズしてみてください。データパレットに特定の文字を書き込みたいときの例も付加してありますので参考にしてください。

;■■■■■■■■■VectorWorksメインウィンドウ■■■■■■■■■
#IfWinActive VectorWorks 12.5

Home::^Tab			;図面ファイルの切り替え
End::^+Tab			;図面ファイルの切り替え

PgUp::Tab			;PageUpにTabを割り当て
PgDn::Send,+{tab}		;PageDownにShift;Tabを割り当て
NumLock::=			;NumLockに=を割り当て
LWIN::Del			;左WINキーにDeleteを割り当て

F1::^!+t			;i方向移動
F2::^!+u			;j方向移動
F3::!+4				;オフセット移動ツール
F4::^!+@			;基準線角度の取得

^F1::Send,^!+t			;i方向複製
^F2::Send,^!+u			;j方向複製
^F3::Send,!+5			;オフセット複製ツール
^F4::Send,^!+d			;オフセット回転移動ツール

!F1::Send,!+2			;i方向頂点移動ツール。
!F2::Send,!+3			;j方向頂点移動ツール。
!F3::Send,!+7			;オフセット頂点移動ツール。
!F4::Send,!+1			;平行線ツール


;◆◆◆◆◆移動コマンドポップアップウィンドウ◆◆◆◆◆
#IfWinActive ahk_class #32770

PgUp::Tab			;PageUpにTabを割り当て
PgDn::Send,+{tab}		;PageDownにShift;Tabを割り当て
F12::Send,{right}*(-1)		;数値を±反転


;◆◆◆◆◆データパレットウィンドウ◆◆◆◆◆
#IfWinActive データパレット
F5::Send,{vk1d}1/2{tab}		;"1/2"と文字を入力


;■■■■■■■■■ウィンドウの限定を解除■■■■■■■■■
#IfWinActive

2011年4月より、Vectorworks 2011 にバージョンアップしました。現在は下記のようなAHKスクリプトを使っています。


;■■■■■■■■■共通項目&割り当てキー■■■■■■■■■
SetTitleMatchMode,2	;VectorWorksとSketchUpのために、WinTitleの一致条件を中間一致にする
SetKeyDelay, 100	;キーの入力を0.100秒毎に設定
NumLock::=			;NumLockに=を割り当て
XButton2::Ctrl		;拡張ボタン(上)
#Include dcli.ahk	;出典:http://1st.geocities.jp/ahkahk111/page1.html

;■■■■■■■■■VectorWorksメインウィンドウ■■■■■■■■■
#IfWinActive Vectorworks 2011

XButton1::Alt		;拡張ボタン(下)
Home::^Tab
End::^+Tab

PgUp::Tab			;PageUpにTabを割り当て
PgDn::Send,+{tab}	;PageDownにShift;Tabを割り当て
LWIN::Send,^!+h		;補助グリッドの表示・非表示
RWIN::Send,{right}*(-1)	;右WINキーに±反転

RButton::Send,^+d!+\	;右マウスボタンにMoveCurrentLayer&Classを割り当てSend,{vk1d}{ESC}
^WheelUp::Send,{left}		;Ctrl+ホイールでカレントクラスの切り替え
^WheelDown::Send,{right}
+WheelUp::Send,{up}			;Shift+ホイールでカレントレイヤの切り替え
+WheelDown::Send,{down}

F1::^!+t		;i方向移動
F2::^!+u		;j方向移動
F3::!+4			;オフセット移動ツール
F4::^!+@		;基準線角度の取得

F5::^!+f		;クラスの前後関係をリストの順番と同じにする
F7::!+e			;テキスト編集
F8::^!+r		;プラグインコマンド編集

F9::Send,^!+3		;用紙全体
F10::Send,!+t		;拡張ミラー移動
F11::Send,^!+1		;直前の画面
F12::Send,^!+2		;次の画面

^F1::Send,^!+y		;i方向コピー。
^F2::Send,^!+i		;j方向コピー。
^F3::Send,!+5		;オフセット基準点コピーコマンド。
^F4::Send,^!+j		;基準線角度に回転

^F5::Send,^!+o		;snapQWEF
^F6::Send,!+u		;オフセット測距後移動
^F8::Send,^!+k		;取り込む > イメージファイル

^F9::Send,^!+5		;図形全体
^F10::Send,^d!+t	;拡張ミラーコピー
^F12::Send,^!+4		;画面登録

!F1::Send,!+2		;i方向頂点移動。
!F2::Send,!+3		;j方向頂点移動。
!F3::Send,!+7		;オフセット基準点頂点移動コマンド。
!F4::Send,!+1		;DrawParallelLine 平行線描画

!F6::Send,!+y		;第二寸法
!F7::Send,!+r		;AuxText


;◆◆◆◆◆データパレットウィンドウ◆◆◆◆◆
#IfWinActive ahk_class BCGMiniWrame:400000:808:10003:10

PgUp::Tab				;PageUpにTabを割り当て
PgDn::Send,+{tab}		;PageDownにShift;Tabを割り当て

F1::Send,{vk1d}CH={space}{tab}
F2::Send,{vk1d}SH={space}{tab}
F3::Send,{vk1d}横架材間距離{space}{tab}
F4::Send,{vk1d}階高{space}{tab}

F5::Send,{vk1d}1/2{tab}		;1/2を入力
F6::Send,{right}*(-1)		;数値を±反転

;■■■■■■■■■ウィンドウの限定を解除■■■■■■■■■
#IfWinActive