個人的な好みから言えば、インストーラがなくて、ただフォルダにコピーするだけのアプリが好みなのです。
しかし、最近の殆どのアプリはインストーラがついていて、環境を勝手に判断してインストールがされるようです。自分で作った AutoHotKey や UWSC などの自動化ツールのスクリプトでそのアプリを起動させようとすると、そのアプリの実行ファイルのありかを調べて、パスを書かないとちゃんと起動させられません。
ところが、ときどき環境やバージョンによってインストール先が変わったりする場合があります。Windows7 と Windows10 を併用していると特に。
ということで、スタートメニューからアプリを起動させるように一般的なサブルーチンを作りました。
なるべく手間が少なくアプリを起動させたいという方には役に立つかもしれませんのでご紹介します。
■AutoHotKey でスタートメニューを操作する
以下がそのプログラム。
★〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;●スタートメニューからアプリを起動する
; すでに起動していればそのアプリに切り替える
; すでにそのアプリがアクティブなら、次のウインドウに切り替える
StartApplication(appn, cmd)
{
WaitConvKeys() ; Winキーを押す前にコンビネーションキーを離す
if !WinExist(appn) {
; アプリが起動していないときには新規起動
if InStr(cmd, "\") > 0 {
run %cmd% ; パスが書いてあれば run で起動する
} else {
BlockInput on
Send, {LWin}
Sleep, 200
Send, %cmd%
Sleep, 300
Send, {Enter}
BlockInput off
}
WinWait, %appn%,, 10 ; ウインドウ起動待ち
} else {
; すでに起動しているときには前面切り替え
; さらにすでに前面(アクティブ)であれば次のウインドウに切り替え
WinGetTitle, name, A ;
WinActivate, %appn% ; アクティブにして
WinGetTitle, name2, A
if (name eq name2) { ; 名前が同じなら
WinGetClass, name, A ; class名を取り込んで
WinActivateBottom, ahk_class %name% ; 次のウインドウに切り替える
}
}
BlockInput on
WinActivate, %appn% ; アクティブにして
Send, #+{up} ; 縦最大化
BlockInput off
}
;●修飾キーが離されるまで待つ
; 実用上問題は発見できていないが、これを実行するとキーが離されるまで
; フォーカスが AutoHotKey に移る(吹き出し)
WaitConvKeys()
{
Tooltip, "Wait convination key(ALT/CTRL/Shift/変換/無変換) Key OFF ..."
KeyWait, Alt
KeyWait, Ctrl
KeyWait, Shift
KeyWait, vk1Dsc07B
KeyWait, vk1Csc079
Tooltip
}
―――――――――――――――――――――★
◆このプログラムのポイント
このプログラムは、第1パラメータでそのアプリがすでに起動しているかどうかを確認する文字列、第2パラメータで起動するためのスタートメニューに入れる文字列を指定します。
すでに起動しているときには、そのアプリをアクティブにします。さらにすでにアクティブであれば、そのアプリの別のウインドウをアクティブにします。
まだ起動していないときには、スタートメニューに第2パラメータの文字列を突っ込んで、その検索結果の最初に表示されるアイテムを起動します。
ま、実際に [WINキー] を一度押して、そのあと起動したいアプリ名をタイプしてみてください。たとえば、[WIN] を一度押して、そのあと internet って入力すると、インターネットエクスプローラーがリストの先頭に表示されるはず。で、リターンキーを押せばインターネットエクスプローラーが立ち上がります。
このプログラムはそれをシミュレートしているだけ。
これを使えば、いちいちマウスに持ち替えて、スタートボタンを押してアプリを探さなくても、簡単にアプリ起動ができます。
同じことは、タスクバーにアプリを「常に表示する」にしていれば、WIN+数字 でできます(過去記事でも紹介しました)。
…が、最近、その固定しているアプリが増えて、7つになってしまったので、それ以外のアプリを操作するのに WIN+数字 が使えなくなった(10個以上は対応できない)ので、これを拡張して、AutoHotKeyでシミュレーションようとしたのが事の発端。
●よく使うアプリに番号を割り当てる
私は AutoHotKeyで [無変換]+[数字キー] にいろんなアプリを立ち上げるようにしています。
vk1Dsc07B & 1:: StartApplication("- Outlook", "outlook")
vk1Dsc07B & 2:: StartApplication("ahk_class CabinetWClass", "C:\_USR\JOB\Project")
vk1Dsc07B & 3:: StartApplication("- sakura", "サクラエディタ")
vk1Dsc07B & 4:: StartApplication("- Google Chrome", "Google Chrome")
vk1Dsc07B & 5:: StartApplication("- Internet Explorer", "Internet Explorer")
vk1Dsc07B & 6:: StartApplication("- OneNote", "onenote")
vk1Dsc07B & 7:: StartApplication("Google Keep", "Google Keep")
vk1Dsc07B & 8:: StartApplication("- Excel", "Excel")
vk1Dsc07B & 9:: StartApplication("NexusFile", "C:\_USR\Tools\Nexus\NexusFile.exe")
第2パラメータにパスを書いておけば、スタートメニューは使わずに直接起動します。
■プログラムの説明
ちょっと以下に使っている関数の説明など。
もし、修正したい方はご参考までにどうぞ。
●BlockInput
このコマンドは、ほかからの入力を受け付けなくするためのコマンドです。
ある程度遅延がある処理をする場合、その間にユーザがキーボードやマウスを操作してしまうと、こうしたオートパイロットシステムは正しく動きません。なので、こうしてユーザ入力を無視させるような処理が必要になります。
ちなみに、UWSC では LOCKHARD というコマンドで実行します。
●WinActivateBottom
これは、ウインドウクラスが同じもの(要は同じアプリの別のウインドウ)の順番を入れ替える処理です。
UWSCではこれを実装するのは難しいのですが、AutoHotKeyならこのコマンド一発。。
たとえば、エディタで、A.txt、B.txtを開いているときに、A.txt がアクティブであれば、B.txtに切り替えを行います。
ここの処理は、WIN+数字 とほぼ同じです。
●WaitConvKeys
基本的にAutoHotKeyでは、Send コマンドは現在の修飾キー(何かと同時に押すキー)は無視して、そのキーコードを発生させます。ただし、いくつかのアプリでは、あとで修飾キーの状態を見て動きを変える場合があるので、修飾キーが離されるまで、メッセージを出して待機するようにしています。
●Send, #+{up}
知っている人は多いと思いますが、WindowsではWIN+Shift+↑ キーで、ウインドウが縦最大になります。
マウスでやると、タイトルバーを掴んで画面の一番上に持っていくと同じ動作をしますね。
好みの問題なのですが、宙ぶらりんのウインドウ表示よりも私はこの表示のほうが好みなので。なんとなく画面が空いているともったいないような気がするので。
◆このテーマのおすすめ図書
疲れないパソコン仕事術多忙な毎日をちょっとラクにする90TIPS
仕事に役立つExcelビジネスデータ分析第4版
パソコン仕事最速時短術115そのやり方、9割がムダ!
星ダイアリー2018山羊座
テンプレート仕事術―日常業務の75%を自動化する
仕事に使えるExcel関数ブック2016/2013/2010/2007対応