マウスマクロ

Logicoolマウスのマクロサンプル - ランダムにキーを押す

投稿日:

Logicoolゲーミングマウスのマクロ(スクリプト)についてサンプルコードをご紹介する記事です。本記事では、ランダムにキーを押すサンプルをご紹介させていただきます。少し作り変えれば、キーではなくマウスのボタンをランダムに押したり、カーソルをランダムに移動させたりすることにも応用できると思います。

サンプルコード

以下は w, d, s, a キーをランダムに押すサンプルです。
キーの組み合わせとして w, wd, d, ds, s, sa, a, aw の 8 パターンが発生するようになっています。

-- 生成する乱数の最大値
MAX_RANDOM_NUMBER = 8

function OnEvent(event, arg)
	-- OutputLogMessage("event = %s, arg = %s\n", event, arg);

	-- イベントが発生したボタン番号をチェックする
	if arg == 4 and event == "MOUSE_BUTTON_PRESSED" then
		
		-- 日付をテーブルで取得し、秒に変換する
		local dateTable = GetDate( "*t" );
		local currentTime = dateTable.hour * 3600 + dateTable.min * 60 + dateTable.sec;
		-- 乱数を初期化し、一度だけ乱数を発生させる
		math.randomseed( currentTime );
		math.random( MAX_RANDOM_NUMBER );

		-- ctrl キーが押されるまで処理を続ける
		while not IsModifierPressed( "ctrl" ) do
			
			-- 押す対象のキーを格納する配列を初期化する
			local keyList = {};

			-- 1 ~ 8 までの乱数を発生させる
			local randomValue = math.random( MAX_RANDOM_NUMBER );
			-- 乱数の内容に応じて押すキーを決定する
			if randomValue == 1 then

				table.insert( keyList, "w" );

			elseif randomValue == 2 then

				table.insert( keyList, "w" );
				table.insert( keyList, "d" );

			elseif randomValue == 3 then

				table.insert( keyList, "d" );

			elseif randomValue == 4 then

				table.insert( keyList, "d" );
				table.insert( keyList, "s" );

			elseif randomValue == 5 then

				table.insert( keyList, "s" );

			elseif randomValue == 6 then

				table.insert( keyList, "s" );
				table.insert( keyList, "a" );

			elseif randomValue == 7 then

				table.insert( keyList, "a" );

			elseif randomValue == 8 then

				table.insert( keyList, "a" );
				table.insert( keyList, "w" );

			end
			
			-- 配列に格納されている対象のキーをすべて押す
			for i = 1, #keyList do

				PressKey( keyList[i] );

			end

			Sleep( 200 );	

			-- 配列に格納されている対象のキーをすべて離す
			for i = 1, #keyList do

				ReleaseKey( keyList[i] );

			end

			Sleep( 50 );

		end

	end

end

コード解説

発生させる乱数の最大値を定義する

対象行 : 1 ~ 2 行目
-- 生成する乱数の最大値
MAX_RANDOM_NUMBER = 8

このサンプルコードでは 1 ~ 8 までの乱数(ランダムな値)を発生させて、発生した乱数の値に応じて押すキーを使い分けています。
8 までの乱数を発生させたいため、生成する乱数の最大値を 8 として定義しています。

乱数を初期化する

対象行 : 4 ~ 10 行目
-- 日付をテーブルで取得し、秒に変換する
local dateTable = GetDate( "*t" );
local currentTime = dateTable.hour * 3600 + dateTable.min * 60 + dateTable.sec;
-- 乱数を初期化し、一度だけ乱数を発生させる
math.randomseed( currentTime );
math.random( MAX_RANDOM_NUMBER );

乱数には seed というパラメータがあり、seed によって発生する乱数が変わります。seed を設定するには math.randomseed という関数を使います。
実行のたびに乱数の発生パターンが変わるようにしたいので、実行時の時間を秒単位に変換し、math.randomseed 関数に seed として指定しています。
日時の取得については以下の記事でも解説していますので、ご参照ください。
Logicoolマウスのマクロ作成(日時取得編)

環境によるかもしれませんが、私の環境ではどんな seed を指定しても最初の 1 回は全く同じ乱数が発生してしまうため、math.random 関数を使って事前に 1 回だけ乱数を発生させています。

ctrl キーが押されるまで処理をループする

対象行 : 17 ~ 18 行目
-- ctrl キーが押されるまで処理を続ける
while not IsModifierPressed( "ctrl" ) do

IsModifierPressed 関数で ctrl キーが押されていないかどうかをチェックし、押されていなければ while と end で囲まれた部分の処理がループするようにしています。
つまり、 ctrl キーが押されていない間、ランダムにキーが押され続けます。
ループせずに 1 回だけランダムにキーを入力すればよいという場合は、「while not IsModifierPressed( "ctrl" ) do」と「end」の行を削除してください。

キー配列を初期化する

対象行 : 20 ~ 21 行目
-- 押す対象のキーを格納する配列を初期化する
local keyList = {};

今回のサンプルでは複数のキーを押すパターンがあるため、乱数に応じて 1 つまたは複数のキー名を配列に格納しておき、後でキーを押す処理を行っています。
押す対象のキー名を格納する配列 keyList を空の配列で初期化しています。

乱数を発生させ、乱数に応じて押す対象のキーを決定する

対象行 : 23 ~ 62 行目
-- 1 ~ 8 までの乱数を発生させる
local randomValue = math.random( MAX_RANDOM_NUMBER );
-- 乱数の内容に応じて押すキーを決定する
if randomValue == 1 then

	table.insert( keyList, "w" );

elseif randomValue == 2 then

	table.insert( keyList, "w" );
	table.insert( keyList, "d" );

elseif randomValue == 3 then

	table.insert( keyList, "d" );

elseif randomValue == 4 then

	table.insert( keyList, "d" );
	table.insert( keyList, "s" );

elseif randomValue == 5 then

	table.insert( keyList, "s" );

elseif randomValue == 6 then

	table.insert( keyList, "s" );
	table.insert( keyList, "a" );

elseif randomValue == 7 then

	table.insert( keyList, "a" );

elseif randomValue == 8 then

	table.insert( keyList, "a" );
	table.insert( keyList, "w" );

end

math.random 関数は 1 から指定した値までの乱数を発生させます。事前に定義しておいた MAX_RANDOM_NUMBER を指定し、1 ~ 8 までの乱数を発生させ、randomValue に格納しています。

次に発生した乱数の値に応じて 8 パターンの処理に分岐しています。各分岐では table.insert を使って keyList に押す対象のキー名を追加しています。

対象キーを押す

対象行 : 64 ~ 71 行目
-- 配列に格納されている対象のキーをすべて押す
for i = 1, #keyList do

	PressKey( keyList[i] );

end

Sleep( 200 );

keyList から順番にキー名を取り出し、PressKey 関数でキーを押しています。 キー操作については以下の記事でも解説していますので、ご参照ください。
Logicoolマウスのマクロ作成(キー操作編)

#keyList は keyList 配列に格納されているデータの個数を示しています。つまり、変数 i を 1 から keyList のデータ個数(最大 2 )までカウントアップし、for と end で囲まれた命令を順番に実行します。
例えば、keyList に w と d の 2 つの文字が格納されている場合、#keyList は 2 となります。変数 i が 1 の時、keyList[ i ] は w の文字列を示し、PressKey( "w" ) が実行されます。
次に変数 i が 2 にカウントアップされ、keyList[ i ] は d の文字列を示すため、PressKey( "d" ) が実行されます。

すべての対象キーを押した後、Sleep 関数で 200 ミリ秒待機しています。Sleep の時間は使用目的に応じて変えてください。

対象キーを離す

対象行 : 73 ~ 80 行目
-- 配列に格納されている対象のキーをすべて離す
for i = 1, #keyList do

	ReleaseKey( keyList[i] );

end

Sleep( 50 );

keyList から順番にキー名を取り出し、ReleaseKey 関数でキーを離しています。
内容は上記の「対象キーを押す」と同様のため、詳細は割愛させていただきます。

まとめ

今回のサンプルのポイントは以下の通りです。

  • math.randomseed 関数で現在時間を使って乱数を初期化する
  • math.random 関数で乱数を発生させ、発生した乱数に応じて処理を変える
その他のマクロ(スクリプト)関連ページはこちら

Logicoolゲーミングマウスのマクロ(スクリプト)関連ページ一覧

ディスプレイやキーボード・マウス 汚れていませんか?

皮脂や唾、手垢、汗などでディスプレイやキーボード・マウスが汚れていませんか? 衛生上の問題もありますし、気持ち良く使うためにも、こまめに拭きとってキレイにすることをオススメします。

エレコム クリーナー ウェットティッシュ 液晶用

  • 超極細分割繊維をメッシュ状に加工した不織布を採用し、やさしく拭くだけで汚れをしっかり落とす
  • 拭き跡が残りにくい
  • 帯電防止効果で拭いた後にホコリがつきにくい
  • ディスプレイの表面加工を傷めないノンアルコールタイプ

液晶用と書いてありますが、キーボード・マウスなどもキレイにできますし、タブレットやスマホなどにも使えます。
大容量なので 1つ置いておくだけでも、気付いた時にすぐ掃除ができて便利です。

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

超高速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.