「StrokesPlus 非アクティブウィンドウ」で検索している方が多くいらっしゃるようです。
なのでこの記事では、フリーソフト「StrokesPlus」で非アクティブウィンドウをマウスジェスチャーで操作する方法を紹介します。
そのままでは非アクティブウィンドウを操作できない
例として、マウスジェスチャーによって、Ctrl + w キーを押したようにウィンドウを閉じる操作を実現します。
ウィンドウへ Ctrl + w キーを送るスクリプトは↓になります。
1 |
acSendKeys("^w") |
しかしこの命令は、現在アクティブ(≒最前面)なウィンドウにキーが送られる仕様になっています。
マウスジェスチャーをした場所のウィンドウが非アクティブな場合、そのウィンドウではなく、他のアクティブなウィンドウへキーが送られてしまうことになり、意図した動作にならない場合があります。
では、非アクティブなウィンドウでも、そこへキーを送って操作するには、どうすればよいでしょうか?
※補足:
アプリを閉じる関数なら「acCloseApplication(hwndTarget, x, y)」がありますが、これだとそのプロセスで開いているウィンドウが全て閉じられてしまうところが Ctrl + w キーの動作と違います。
アクティブ化する
acSendKeysはアクティブウィンドウへキーが送られる仕様になっています。
であれば、まずマウスジェスチャーをした場所のウィンドウをアクティブ化し、その後に Ctrl + w キーを送るようにします。
ウィンドウをアクティブ化する関数は「acActivateWindow(nil, gsx, gsy, 0)」なので、↓のようなスクリプトにすればよいことになります。
1 2 |
acActivateWindow(nil, gsx, gsy, 0) acSendKeys("^w") |
これで、マウスジェスチャーをすると、非アクティブなウィンドウでもアクティブ化され、その直後に Ctrl + w キーが送られて閉じられる動作になります。
大域Luaの活用
上記の方法だと、キーを送るジェスチャーのスクリプトには全て、アクティブ化の関数「acActivateWindow(nil, gsx, gsy, 0)」を書く必要が生じます。
例えば、「Alt + F4 キーを送ってアプリを終了するアクション」や、
「Alt + ↑ キーを送って上の階層へ遷移するアクション」などでも
ウィンドウアクティブ化の関数が必要になります。
そこで、「大域Lua」を活用することで、この関数を省略できるようにします。
「大域Lua」タブの「function sp_before_action ~ end」の中に書くことで、全てのスクリプトの実行前に自動的に「acActivateWindow(nil, gsx, gsy, 0)」を実行させることができます。
1 2 3 |
function sp_before_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact, gbl, gbt, gbr, gbb) acActivateWindow(nil, gsx, gsy, 0) end |
こうすることで、全てのマウスジェスチャーで、必ずウィンドウをアクティブ化させてからスクリプトが実行されるようになり、各アクションで「acActivateWindow(nil, gsx, gsy, 0)」を書く必要がなくなります。
※ちなみに、上で例に挙げたスクリプトを紹介しておきます。
「Alt + F4 キーを送ってアプリを終了する」: acSendKeys("%{F_4}")
「Alt + ↑ キーを送って上の階層へ遷移する」: acSendKeys("%{UP}")
Excelがアクティブ化されない場合の対処
起動直後のExcelだと、「acActivateWindow(nil, gsx, gsy, 0)」でアクティブにならない場合があります。
その場合は、スクリプトの数字を0から2に変えるとアクティブ化できます。
1 |
acActivateWindow(nil, gsx, gsy, 2) |
ただし、2に変えることでExcel以外で動作に影響が出る可能性もあるので、Excelでアクティブ化できていれば、0のままにしておくのが良さそうです。
今回の紹介は以上です。
↓コメントはお気軽にどうぞ♪ ^^
StrokeItからの乗り換えでこの問題に悩んでおりましたが解決しました。ありがとうございます。
大域Luaの活用も盲点でした。非常に参考になりました。
コメントありがとうございます!m(_ _)m
お役に立てて嬉しく思います!
とても励みになります!
助かりました!!大域Luaはデフォでこの設定にして欲しいものです^_^