アクション・ホットキーのLuaスクリプトの記述の仕方
StrokesPlusでは、大きく2通りの呼出し方があります。この呼出し方によって、Luaスクリプトの記述場所が異なります。
①のLuaスクリプトの記入場所

大切だと思うこと
基本的には、ショートカットキーを使って、やりたい動作を実現させます。
例えば、デスクトップを表示したい場合は、Windowsキー + dキー を押します。この場合、Luaスクリプトには、 acSendKeys("@d") と記述します。
記述の仕方は、 acSendKeysの使い方: をご覧ください。
状況に応じて、StrokesPlusの有効な使い方は異なります。ご自身が繰返している手作業を見つけて、その一連の作業をスクリプトにまとめて記述するのが最も有効な使い方だと思います(PC上で行うおおよその手作業は、acSendKeysで対応できます)。
そうすれば、StrokesPlusから簡単に呼び出してあげることができます。
複雑な処理を記述していると、正しくスクリプトを記述しているのに、動作が失敗して、困ったり、悩むことがあります。
この場合は、処理が失敗する場所の前・後・前後に、acDelay(数値) と記述して処理を少し遅らせてあげると、動作が安定することが多いです。
私の環境では、次のスクリプトで動作が失敗することがありました。
処理 |
スクリプト |
備考 |
ショートカットキーCtrl+Vで張り付ける |
acSendKeys("^v") |
|
クリップボードに値をセットする |
acSetClipboardText("セットしたい値") |
前と後ろの両方に、acDelay(数値)と記述すると安定しました。私の環境では、後ろにも記述が必要でした。 |
アプリを起動する |
acRunProgram("ここにはEXEのフルパスを入力","",0, 1) |
アプリ起動後に続けて処理をしたい場合は、アプリが起動するまで待機してあげる必要があります。acRunProgramの後に、多めに待機させるとよいです。 |
ホットキーでスクリプトを実行する場合 |
例えば、ホットキーで「Ctrl」+「c」に対して、以下の小文字の「a」を1文字を入力させるスクリプトを1行を記述した場合
acSendKeys("{DELAY=10}a") |
ホットキーからスクリプトを実行する場合は、その前にacDelay(数値)をしっかり記述しないと、余分なショートカットキーが押されてしまい、その結果、想像がつかない動作をすることがあります。
左記の例では、「Ctrl」+「c」キーを押したとき、選択場所に「a」の1文字が入力されるのが正しい動作です(StrokesPlusのショートカットキーが優先され、Windows標準ショートカットキーであるコピーは実行されません)。
しかし、待機時間が足りないため、「Ctrl」+「c」+「a」が同時に押されてしまい、「Ctrl」+「a」キーのショートカットキーが実行されます。その結果、カーソル位置の文字が全選択されます(「a」は入力されません)。
もしも、acSendKeys("{DELAY=10}ax")と記述した場合、文字の全選択に加えて、「Ctrl」+「x」キーのショートカットキーも実行されます。その結果、文字が全て切り取られてなくなってしまい、非常に焦ります。
こうなると、どんな結果になるか分かりませんので、注意しましょう。 |
StrokesPlusが強制終了して画面が固まってしまったら、 「ESC」キーを5秒くらい押し続けてみましょう。
特に複雑な処理をしていると、ときどき、以下のような画面が表示されて、画面とマウスが固まることがあります。マウスもキーボードも操作ができません。

こうなると、なんとか、ショートカットキーを使って、タスクマネージャーの起動はできるのですが、StrokesPlusを選択できません。何回もこのような事態に遭遇し、非常に焦ってしまいました。
このような場合、私の環境では、「ESC」キーを押し続けると、StrokesPlusの強制終了が無事完了して、マウスもキーボードが使えるようになりました。もしも困ったときはお試しください。
上記のようなこともありますので、重要なスクリプトを記述したときは、「適用」ボタンではなくて、「OK」ボタンを押しましょう。
「適用」だと、StrokesPlusが強制終了した場合に、スクリプトが保存されません。
Luaスクリプトのサンプル
ソフトのインストール後、デフォルトでスクリプトが記述されていますので、実際にマウスジェスチャをしてみて、色々試してみると良いかと思います。
自分でスクリプトを記述してみたいという方は、必要に応じて、以下のサンプルスクリプトをコピペしてご利用ください。
繰り返しになりますが、ショートカットキーを使う動作だけで、多くのことができると思います。
例えば、デスクトップを表示したい場合は、Windowsキー + dキー を押します。この場合、Luaスクリプトには、 acSendKeys("@d") と記述します。
記述の仕方は、 acSendKeysの使い方: をご覧ください。
|
デスクトップ関連
操作 |
Luaスクリプト |
デスクトップを表示 |
●記述内容(以下をコピペして下さい)
acSendKeys("@d")
●説明
スクリプト |
説明 |
acSendKeys("@d") |
Windowsキーとdキーを押す |
|
エクスプローラー関連
操作 |
Luaスクリプト |
戻る |
エクスプローラーで戻りたい場合は、acSendKeys("%{LEFT}")と記述します。
ただし、これだけだと、エクスプローラー以外のソフトがアクティブの場合、エクスプローラーの上で、マウスジェスチャーをしても動作しません。そこで以下のような記述をしています。
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("%{LEFT}") |
|
●説明
スクリプト |
説明 |
acActivateWindow(nil,gex, gey) |
ジェスチャ終了位置の下にあるウインドウをアクティブにする |
acSendKeys("%{LEFT}") |
Alt+左 キーを押す |
※この後にご紹介するスクリプトで、上記パターンはたくさん出てきます。
<別の記述方法>
以下の記述でも、同じ動作になります。
acConsumePhysicalInput(1)
acMouseClick(gex, gey, 2, 1, 1)
acSendKeys("%{LEFT}")
acConsumePhysicalInput(0) |
|
スクリプト |
説明 |
acConsumePhysicalInput(1) |
2行目のacMouseClickで実際にクリックさせないために記述。
※これがないと、2行目の acMouseClick で、マウスの下にファイルがあると、実際にクリックしてファイルが開いてしまいます。
これを回避するために、ときどき使うのですが、少し注意が必要です。
例えば、acConsumePhysicalInput(1) ~ acConsumePhysicalInput(0) の間に、メッセージを表示するスクリプトを書くと、メッセージが表示された状態で、マウスとキーボードを使えないので、何も操作できなくなります。このようになったら、いろいろ試しましたが、PCの再起動や強制終了するしかないと思います。 |
acMouseClick(gex, gey, 2, 1, 1) |
別のアプリがアクティブだったり、右クリックメニューが表示されている場合にも対応できるように、左クリックして、マウスジェスチャーをした下にあるエクスプローラーをアクティブにする |
acSendKeys("%{LEFT}") |
Alt+左 キーを押す |
acConsumePhysicalInput(0) |
1行目を解除 |
|
進む |
上記と同じように記述します。2行目の acSendKeys("%{RIGHT}") だけが異なります。
●記述内容
acActivateWindow(nil,gex, gey)
acSendKeys("%{RIGHT}") |
|
|
アプリケーション関連
操作 |
Luaスクリプト |
アクティブなアプリケーションを閉じる、パソコンを終了するなど(Alt+F4を押す) |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("%{F_4}")
※私の環境では、なぜか上記スクリプトで、エクセル(Excel2013)だけ終了できません(Word2013は、終了できます)。 |
アクティブなアプリケーションを最小化する |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acMinimizeWindow(nil, gsx, gsy)
|
特定のアプリケーションを起動する。起動中の場合は、選択する |
●記述内容(以下をコピペして下さい)
acDelay(40)
acRunProgram("ここにはEXEのフルパスを入力","",0, 1)
acDelay(40)
●説明
スクリプト |
説明 |
acDelay(40) |
処理を待機させます。
私の環境では、この記述がないとアプリの起動が失敗することがあります。 |
acRunProgram("ここにはEXEのフルパスを入力","",0, 1) |
EXEのフルパスは、バックスラッシュはエスケープする必要あります。
例えば、「C:\windows\notepad.exe」は、「C:\\windows\\notepad.exe」と記述しなければなりません) |
acDelay(400) |
処理を待機させます。
アプリ起動後に続けて処理をしたい場合は、アプリが起動するまで待機してあげる必要があります。acRunProgramの後に、多めに待機させるとよいです。 |
|
選択した絶対パスのファイル、または、URLを直接開く。 |
例えば、ホットキーCtrl+eに対して、以下のLuaスクリプトを記述します (参考URL)。
●記述内容(以下をコピペして下さい)
acSendKeys("^c")
acDelay(40)
acSendKeys("{DELAY=1}@r")
acDelay(40)
acSendKeys("{DELAY=1}^v")
acDelay(400)
acSendKeys("~")
すると、「C:\test\note.txt」という文字列を選択して、Ctrl+eを押すだけで、note.txtファイルを直接開くことができます。
また、「C:\test」という文字列を選択して、Ctrl+eを押した場合は、testフォルダを開くことができます。URLも開けます。
エクスプローラーをわざわざ開かなくてファイルが開けるので、個人的には、非常に重宝しております。
このように一連の手作業をまとめてスクリプトに記述するのが、StrokesPlusの有効的な使い方だと思います。
|
インターネット関連
以下の記述で、基本的には、FireFox、chrome、インターネットエクスプローラーなど、どんなブラウザでも対応できます。
各ブラウザ専用のマウスジェスチャツールもありますが、複数のブラウザを利用する方は、StrokesPlusで一括して管理できるのが便利かもしれません。
特に、2017年11月 Firefox 57 ( Firefox Quantum ) への移行により、マウスジェスチャのFire Gesturesアドオン が動作しなくなってしまいました。その代替をお探しの方は、このStrokesPlusの利用を検討してみるのもよいかもしれません。
操作 |
Luaスクリプト |
戻る |
前述のエクスプローラーの戻ると同じ記述です。
(別の記述の仕方もありますが、「大域アクション」に以下の記述をしておけば、インターネットとエクスプローラー両方に対応できます)
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("%{LEFT}")
|
進む |
前述のエクスプローラーの進むと同じ記述です。
(別の記述の仕方もありますが、「大域アクション」に以下の記述をしておけば、インターネットとエクスプローラー両方に対応できます)
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("%{RIGHT}")
|
タブ切り替え(左のタブを選択) |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("^+{TAB}")
|
タブ切り替え(右のタブを選択) |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("^{TAB}")
|
ページを更新する |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("{F_5}") |
選択しているタブを閉じる |
●記述内容(以下をコピペして下さい)
acActivateWindow(nil,gex, gey)
acSendKeys("^w")
|
その他
※「マウス/キー修飾子」の「右ボタン」以外にチェックが入っていると、右クリックしながらでは動作しないと思います。 |
|
|
もっと高度な処理をしたい場合
StrokesPlusでは、次のような処理が可能です。これだけでも、いろいろな動作ができます。
・アプリごとのアクション・ホットキーの設定 |
・キーボード操作(上記サンプルacSendKeysで紹介したもの)、マウスクリック、、ウインドウ操作、クリップボード、メッセージやインプットボックスなど |
・ローカル変数の利用 |
・全てのアクション利用できる独自関数やグローバル変数を定義することができます(「大域lua」タブにスクリプトを記述します)。 |
・条件分岐(if)、goto topによる ::top:: へのジャンプ |
ただし、日本語の利用、文字列操作、ユーザーフォームの作成、ファイル操作などはできないと思います。
このような処理をしたい場合は、以下のような対応を検討するとよいと思います。
●外部のExeファイルとの連携
前述の通り、StrokesPlusのacRunProgramを使えば、外部アプリを起動することができます。
例えば、文字列操作、フォームの起動、ファイル操作などの処理などを記述した外部のExeファイルを作っておき、StrokesPlusからこのExeファイルを呼び出すことができます。
StrokesPlusと外部Exeファイルのデータの受け渡しが必要な場合は、クリップボードが使えます。
この場合、StrokesPlus側で、アクティブウインドウ、データ、マウス位置など必要な情報をカンマ区切りなどでまとめてクリップボードにコピーします。そして、外部のExe側でクリップボードの値を分解して、処理をするとご希望の処理が実現できると思います。
StrokesPlusでは、日本語のコメントを残せないなどのデメリットもありますので、複雑な処理は、外部のExeファイル側で実行したほうがよいと思います。
●StrokesPlusの全アクションの実行前・実行後などに共通の処理を記述できます(大域luaを使います)。
あまり利用する機会があるか分かりませんが、 これにより、複数のアクションをつなげていくことができます。
エラーメッセージ
最後に、私の経験しましたエラーメッセージをご紹介します。
RegisterHotKey error 1409 : そのホットキーは既に登録されています。
このエラーが発生した場合は、StrokesPlusで登録したホットキーと別のアプリで登録したホットキーが重複している可能性があります。
(StrokesPlusの中でホットキーが重複しているわけではありません。)
どちらか一方のアプリのホットキーを変更すれば、このメッセージは消えます。

ずっと悩まされたエラーなのですが、私の場合、StrokesPlusで登録したホットキーと「UWSC」(Windows自動化アプリ)というソフトに登録したホットキーが重複しているため発生していました。
会計ソフトランキングと選び方
関連ページ
「機能」「簡単操作」「サポート」「費用」を徹底比較!
※リンクのないソフトは、「会計ソフト比較解説」トップページにあるランキングでの紹介だけです。
|
|
|
|