マウスマクロ

Logicoolマウスのマクロサンプル - ボタンの長押し(ドラッグ&ドロップ)後に処理させる

投稿日:2019年5月1日 更新日:

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ゲーミングマウスのマクロ(スクリプト)関連ページ一覧

おすすめのゲーミングマウス

超高速FPSゲーミングマウス(ボタン: 8 個)

Logicool ロジクール ゲーミング マウス G402

  • 500IPSを超えるトラッキング速度
  • 8個のプログラム可能なボタン
  • ボタンによるDPIの素早い切り替え
  • 1msのレポートレート
  • 高速なクリック(連打)を実現

高パフォーマンスのゲーミングマウス(ボタン: 11 個)

Logicool ロジクール ゲーミング マウス G502 HERO

  • 400IPSを超えるトラッキング速度
  • 11個のプログラム可能なボタン
  • 100~16,000の全DPIでゼロスムージング、ゼロフィルタリング、ゼロアクセラレーションを達成
  • 1msのレポートレート
  • マウスの重さを調整可能

15 個のプログラム可能なボタンを持つ高性能ワイヤレスマウス

Logicool G ゲーミングマウス ワイヤレス G604 ブラック

  • 400IPSを超えるトラッキング速度
  • 15個のプログラム可能なボタン
  • 100~16,000の全DPIでゼロスムージング、ゼロフィルタリング、ゼロアクセラレーションを達成
  • 1msのレポートレート
  • ワイヤレス

カスタマイズ可能な 20 個ものボタンを備える MMO 向けゲーミングマウス

Logicool ロジクール ゲーミング マウス G600t

  • MMO に最適な 20個のプログラム可能なボタン
  • 親指だけで 12個のボタンを瞬時に押せるサムパネル
  • 1msのレポートレート

スポンサーリンク

そういえば買いたい物があったんだった、日用品補充しなきゃ、などがあれば





おすすめ記事

1
Logicool(ロジクール)のゲーミングマウスではマクロを作って自動的な操作を実現することができます。 ボタン 1 つ押すだけで複雑な操作が自動で行えるようになり、定型的な操作を効率良く楽に行えるよ ...
2
バウヒュッテ(Bauhutte)のゲーミングチェア : RS-950RR の使用感などをレポートさせていただきたいと思います。一般的なオフィスチェアよりも断然座り心地が良く、私には合っていました。オス ...
3
キーボード・マウスでの操作に慣れているのに、PS4 や Xbox のコントローラで FPS/TPSゲームをプレイするとうまく操作できず、歯がゆい思いをされていないでしょうか。ゲームソフト側が対応してい ...

-マウスマクロ

Copyright© ArekoReport , 2020 All Rights Reserved.