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ゲーミングマウスのマクロ(スクリプト)関連ページ一覧
皮脂や唾、手垢、汗などで表面は見えない雑菌だらけです。 衛生上も問題ですし、気持ち良く使うためにも、こまめに拭きとってキレイにしましょう。