ま、これ↑がG700sなわけですが。
通常のマウス機能に加えて、割り当て可能なボタンが8個あるわけですな。
そして、左右クリック、中央クリック、中央左右で、5、全部で13クリックあるわけですな。
それとホイール操作。
スクリプトでホイール操作はできるようですが、ホイール操作の検知はできないようです。
その他のボタンの検知はできるので、私の場合は、スクリプト起動時からの時間というのを用いて、各ボタンにダブルクリックや、ドラッグを、配置しております。
私はゲームに使っているのではなく、音源制作における、RX5というソフトでの音声編集作業にこれを使っております。
今回ご紹介するスクリプトは、Luaという言語らしく(初耳です)、G-series独自の関数が用意されたものらしいです。インストール時に説明書PDFが着いてたと思います。
さて、何がしたいかというと、
・中央ボタンに「I」を設定し、かつ、ドラッグ時はIを起動させずShift+Gからドラッグしてドラッグ終了で都合上Rに戻すという設定
・ボタン5(横の下、前側)にAlt、ダブルクリックでCtrlにするという設定
ということです。
ドラッグやダブルクリックは、専用ソフトで設定できなさそうだったので、スクリプトを使用することにしました。
まず、設定可能な主な機能は、専用のソフトウェアで設定し、スクリプトを使用するボタンは、機能をはずしておきます。以下スクリプトです。↓
function OnEvent(event, arg, family)
--OutputLogMessage("event = %s, arg = %s, family = %s\n", event, arg, family);
if (event == "MOUSE_BUTTON_PRESSED" and arg == 3) then
new_time = GetRunningTime();
EnablePrimaryMouseButtonEvents(1);
PressKey("lshift");
PressAndReleaseKey("g");
ReleaseKey("lshift");
PressMouseButton(1);
end
if (event == "MOUSE_BUTTON_RELEASED" and arg == 3) then
old_time = GetRunningTime();
--OutputLogMessage("%s %s\n", new_time, old_time);
if ((old_time - new_time) < 200) then
PressAndReleaseKey("i");
end
PressAndReleaseKey("r");
ReleaseMouseButton(1);
EnablePrimaryMouseButtonEvents(0);
end
if (event == "MOUSE_BUTTON_PRESSED" and arg == 5) then
new_time = GetRunningTime();
--OutputLogMessage("%s %s\n", new_time, old_time);
if ((new_time - old_time) > 2000) then
key = 0;
end
if (key == 0) then
PressKey("lalt");
old_time = GetRunningTime();
else
PressKey("lctrl");
old_time = GetRunningTime();
end
key = math.abs(key - 1);
end
if (event == "MOUSE_BUTTON_RELEASED" and arg == 5) then
ReleaseKey("lalt");
ReleaseKey("lctrl");
end
end
こっから解説
(中央ボタンのスクリプトで、new_timeとold_timeの意味合いが逆になっていることを先に言っておきます。ボタン5で同じ変数を使ってしまったのでこうなってしまったのかも。別変数にわけたほうがよかったですね)
とりあえず変数設定、すべて0
key, new_time, old_time = 0,0,0;
イベント発生
function OnEvent(event, arg, family)
テスト用メッセージ
--OutputLogMessage("event = %s, arg = %s, family = %s\n", event, arg, family);
もし中央ボタン(3)が押されたならば
if (event == "MOUSE_BUTTON_PRESSED" and arg == 3) then
スクリプト起動からの時間をnew_timeとして記録(ミリ秒だったかと)
new_time = GetRunningTime();
左クリックの制御を有効にする
EnablePrimaryMouseButtonEvents(1);
左シフトキーを押さえっぱなしにする
PressKey("lshift");
キーボードのgを押して離す(要はタイプする。今回はShift+Gがドラッグする前のショートカットキーである)
PressAndReleaseKey("g");
左シフトキーを離す
ReleaseKey("lshift");
左クリックボタンを押しっぱなしにする(ドラッグ操作のため)
PressMouseButton(1);
end
もし中央ボタン(3)が離されたならば
if (event == "MOUSE_BUTTON_RELEASED" and arg == 3) then
離したときの時間をold_timeとして記録する
old_time = GetRunningTime();
メッセージ
--OutputLogMessage("%s %s\n", new_time, old_time);
もし、中央ボタンを離したときの時間が押したときから200ミリ秒未満なら
if ((old_time - new_time) < 200) then
通常のクリックとみなしてキーボードのiを押して離す
PressAndReleaseKey("i");
end
いずれにしても中央ボタンを離すまではドラッグ状態で、離したときキーボードのrを押して離す(これは操作するソフトの都合上、Gを解除するためにRを押しているだけである)
PressAndReleaseKey("r");
ドラッグ終了のため左ボタンを離す
ReleaseMouseButton(1);
念のため、左クリックボタンの制御を無効にする
EnablePrimaryMouseButtonEvents(0);
end
もし中央ボタン(5)が押されたならば
if (event == "MOUSE_BUTTON_PRESSED" and arg == 5) then
スクリプト起動からの時間をnew_timeとして記録
new_time = GetRunningTime();
メッセージ
--OutputLogMessage("%s %s\n", new_time, old_time);
もしボタン5を押したのが、前に押したときより2秒を超えていたら
if ((new_time - old_time) > 2000) then
通常クリックとみなしフラグkeyに0をセット
key = 0;
end
通常クリックならば
if (key == 0) then
左Altキーを押しっぱなしにする
PressKey("lalt");
スクリプト起動からの時間をold_timeとして記録
old_time = GetRunningTime();
もしボタン5を押したのが、前に押したときより2秒以下ならダブルクリックとみなす
else
左Ctrlキーを押しっぱなしにする
PressKey("lctrl");
スクリプト起動からの時間をold_timeとして記録(どうせ同じなんだからnew_timeと比較の後にまとめて書いてもよかったですね)
old_time = GetRunningTime();
end
フラグを0なら1、1なら0にする
key = math.abs(key - 1);
end
もし中央ボタン(5)が離されたならば
if (event == "MOUSE_BUTTON_RELEASED" and arg == 5) then
左Altボタンを離す
ReleaseKey("lalt");
左Ctrlボタンを離す
ReleaseKey("lctrl");
end
end
もっとよい書き方があるかもしれません。
たとえば、時間を取得せず、Sleepを使う方法もあるようです。
しかしSleepはその間操作が止まるらしいので、この場合まずいと思い今回は時間をはかる方にしました。
ちなみに今回の用途はブラウザ閲覧などではないので、中央クリック左にUndo、右にRedoを設定しております。こちらもとても便利で作業がはかどります。
お約束ながら、このスクリプトで誤動作を起こして、皆さんにダイソンガイを起こしても責任は取れませんのでご了承ください。自己責任でお願いします。
ではまたお会いしましょう。。。