Logicoolゲーミングマウスのマクロ(スクリプト)についてサンプルコードをご紹介する記事です。本記事では、特定のボタンを一定時間押しっぱなしにして離した(またはドラッグ&ドロップした)後に処理を行うサンプルをご紹介させていただきます。
目次
サンプルコード
左ボタンや右ボタンなどを長押し(またはドラッグ&ドロップ)した後に、何らかの自動的な操作を行いたい場合のサンプルを以下にご紹介させていただきます。
-- ボタンの長押しと判断する時間(ミリ秒)
BUTTON_HOLD_TIME = 1000;
-- ボタンの押下状態をチェックする間隔(ミリ秒)
CHECK_INTERVAL = 100;
-- ボタンの長押し後に自動操作を行うモードかどうか
longPressMode = false;
-- 左ボタンのクリックによるイベントの発生を有効化する
EnablePrimaryMouseButtonEvents( 1 );
function OnEvent(event, arg)
-- OutputLogMessage("event = %s, arg = %s\n", event, arg);
-- イベントが発生したボタン番号をチェックする
if arg == 4 and event == "MOUSE_BUTTON_PRESSED" then
-- 現在の状態がボタン長押し後に自動動作を行うモードかチェックする
if longPressMode then
-- ON の場合
-- 自動操作を OFF にする
longPressMode = false;
OutputLogMessage("longPressMode : OFF\n" );
else
-- OFF の場合
-- 自動操作を ON にする
longPressMode = true;
OutputLogMessage("longPressMode : ON\n" );
end
elseif arg == 1 and event == "MOUSE_BUTTON_PRESSED" then
-- 番号 1 のマウスボタン(左ボタン)でイベントが発生した場合
-- ボタン長押し後に処理を行いモードかチェックする
if longPressMode then
-- ボタンの長押しと判断するチェック回数のしきい値の計算する
thresholdCheckCnt = BUTTON_HOLD_TIME / CHECK_INTERVAL;
-- ボタンの押下状態をチェックした回数
currentCheckCnt = 0;
-- 左ボタンが押されている間、待機する
while IsMouseButtonPressed( 1 ) do
-- チェック回数をカウントアップする
currentCheckCnt = currentCheckCnt + 1
-- 次のチェックタイミングまで待機する
Sleep( CHECK_INTERVAL );
end
-- 左ボタンが押された状態がチェック最大回数まで維持されていたかチェックする
if thresholdCheckCnt <= currentCheckCnt then
OutputLogMessage( "後処理を実行する\n" );
end
end
end
end
コード解説
ボタンの長押しをチェックする時間や間隔を定義する
対象行 : 1 ~ 4 行目
-- ボタンの長押しと判断する時間(ミリ秒)
BUTTON_HOLD_TIME = 1000
-- ボタンの押下状態をチェックする間隔(ミリ秒)
CHECK_INTERVAL = 100
何秒の間ボタンが押されていたら長押し(ドラッグ&ドロップ)と判断するかを定義しているのが BUTTON_HOLD_TIME です。
また、ボタンが継続して押されているかどうかをチェックする間隔を CHECK_INTERVAL で定義しています。
ボタンの長押し後に自動操作を行うかどうかを表すフラグを定義する
対象行 : 6 ~ 4 行目
-- ボタンの長押し後に自動操作を行うモードかどうか
longPressMode = false;
左ボタンの長押し(ドラッグ&ドロップ)を毎回行うごとに自動操作が処理されてしまうと邪魔になる場合がありますので、特定のボタンで機能の ON/OFF を切り替えられるようにしたいと思います。
そのため、ここではボタンの長押し後に自動操作を行うかどうかを表すフラグを定義しています。
左ボタンのイベント発生を有効化する
対象行 : 9 ~ 10 行目
-- 左ボタンのクリックによるイベントの発生を有効化する
EnablePrimaryMouseButtonEvents( 1 );
普通に PC を使っていると左クリックは頻繁に発生するため、性能面を考慮して通常は左ボタンのクリックでイベントが発生しないようになっています。
そのため、EnablePrimaryMouseButtonEvents(1) で左クリックでもイベントが発生するようにしています。
中央(マウスホイール)と右ボタンのクリックでは何もしなくてもイベントが発生しますので、左クリックの長押し(ドラッグ&ドロップ)をチェックする必要がなければ EnablePrimaryMouseButtonEvents は実行しなくても構いません。
発生したイベントがモード切替用ボタンの押下かどうかをチェックする
対象行 : 15 ~ 16 行目
-- イベントが発生したボタン番号をチェックする
f arg == 4 and event == "MOUSE_BUTTON_PRESSED" then
ボタン長押し後の自動操作の ON/OFF を切り替えるためのボタンが押されているかどうかをチェックしています。
このサンプルではボタン 4 を機能の ON/OFF に使用しています。
モードを切り替える
対象行 : 18 ~ 33 行目
-- 現在の状態がボタン長押し後に自動動作を行うモードかチェックする
if longPressMode then
-- ON の場合
-- 自動操作を OFF にする
longPressMode = false;
OutputLogMessage("longPressMode : OFF\n" );
else
-- OFF の場合
-- 自動操作を ON にする
longPressMode = true;
OutputLogMessage("longPressMode : ON\n" );
end
現在のモードをチェックし、すでに ON であれば OFF に、OFF であれば ON にフラグを設定しています。
また、現在どちらの処理モードなのかをコンソールに出力しています。
発生したイベントが左ボタンの押下かどうかをチェックする
対象行 : 35 行目elseif arg == 1 and event == "MOUSE_BUTTON_PRESSED" then
発生したイベントが左ボタンを押したことにより発生したものかどうかをチェックしています。
自動操作が ON になっているかチェックする
対象行 : 38 ~ 39 行目
-- ボタン長押し後に処理を行いモードかチェックする
if longPressMode then
ボタン長押し後に自動操作を行うモードになっているかチェックしています。
モードが ON(longPressMode が true)の場合にのみ以降の処理を行います。
左ボタンが押されている間待機する
対象行 : 41 ~ 53 行目
-- ボタンの長押しと判断するチェック回数のしきい値の計算する
thresholdCheckCnt = BUTTON_HOLD_TIME / CHECK_INTERVAL;
-- ボタンの押下状態をチェックした回数
currentCheckCnt = 0;
-- 左ボタンが押されている間、待機する
while IsMouseButtonPressed( 1 ) do
-- チェック回数をカウントアップする
currentCheckCnt = currentCheckCnt + 1
-- 次のチェックタイミングまで待機する
Sleep( CHECK_INTERVAL );
end
「thresholdCheckCnt = BUTTON_HOLD_TIME / CHECK_INTERVAL;」で左ボタンが何回連続で押下状態となっていれば長押し(ドラッグ&ドロップ)と判断するかを計算しています。
今回のサンプルでは 2000 ミリ秒(2 秒)の間、左ボタンが継続して押されていれば長押し(ドラッグ&ドロップ)とみなしますので、チェック間隔の 100 ミリ秒で割ると 20 回連続で押下状態が続けば長押し(ドラッグ&ドロップ)と判断します。
「currentCheckCnt = 0;」では左ボタンの押下状態をチェックした回数を初期化しています。
「while IsMouseButtonPressed( 1 ) do」~「end」の部分では、左ボタンが押されている間、処理がループするようになっています。
中央ボタンや右ボタンの押下状態をチェックしたい場合はパラメータに 1 ではなく、2 や 3 を指定してください。
IsMouseButtonPressed 関数については以下の記事でも解説しています。
Logicoolマウスのマクロ作成(ボタン操作編)
ループの中ではチェックした回数(currentCheckCnt)をカウントアップし、Sleep で一定時間(CHECK_INTERVAL の間隔で)待機するようにしています。
つまり、左ボタンを離してループを抜けた時、それまでに左ボタンを押していた時間が長いほどチェック回数(currentCheckCnt)の値が大きくなります。
ボタンが押されていた時間をチェックする
対象行 : 54 ~ 59 行目
-- 左ボタンが押された状態がチェック最大回数まで維持されていたかチェックする
if thresholdCheckCnt <= currentCheckCnt then
OutputLogMessage( "後処理を実行する\n" );
end
左ボタンの押下状態のチェック回数(currentCheckCnt)がしきい値(thresholdCheckCnt)以上かどうかをチェックしています。
このサンプルでは 20 回以上のチェックが行われている場合、2 秒以上左ボタンの押下状態が続いていたとみなすことができますので、コンソールにメッセージを出力しています。
実際に皆さんが使われる際には、コンソールにメッセージを出力する代わりに、行いたい操作(キーの入力、マウスカーソルの移動 など)を記述してください。
例:
・キーをクリックしたい → PressAndReleaseKey( "a" )
・マウスカーソルを移動したい → MoveMouseRelative( 100, 0 ) など
自動操作の記述方法については以下の記事もご参照ください。
Logicoolマウスのマクロ作成(ボタン操作編)
Logicoolマウスのマクロ作成(キー操作編)
Logicoolマウスのマクロ作成(マウスカーソル操作編)
まとめ
今回のサンプルのポイントは以下の通りです。
- 長押し(ドラッグ&ドロップ)するボタンとは別のボタンで機能の ON/OFF を切り替える
- ボタンが押されている間は処理をループさせ、どれだけの時間の間、継続してボタンが押されているかを記憶しておく
- ボタンが離された後、押していた時間が事前に決めたしきい値以上であれば、長押し(ドラッグ&ドロップ)が行われたと判断し、目的の操作を行う
Logicoolゲーミングマウスのマクロ(スクリプト)関連ページ一覧
皮脂や唾、手垢、汗などで表面は見えない雑菌だらけです。 衛生上も問題ですし、気持ち良く使うためにも、こまめに拭きとってキレイにしましょう。