今回レビューするのはロジクールのゲーミングキーボード G510です。
※1から13はGamePanel(旧ソフトウェア)を使用、14からゲーム ソフトウェア
更新履歴
2012/02/26追記
新しいソフトウェア、Logicool ゲーム ソフトウェアになって使いやすくなりました。不具合が修正されたのも大きいです。
2012/03/07追記
マルチ キーとスクリプトをいろいろ書いて使ってみましたが、安定して動作するし、長いマクロでも問題ないようです。この手の機能を持った製品はこれまでいろいろ使ってきましたが、これが一番使いやすいです。
2012/05/18追記
使用開始から3ヶ月ほど経ちましたが問題はありません。飲み物を3回ほどこぼしたりして汚れてきましたが動作は問題ないようですw いろいろなゲームで使用してますが便利ですね。
2013/03/15追記
使用開始から1年以上経ちましたが問題はありません。安いキーボードだとキートップが削れたり、文字が消えたりしてきますが、強度が違うのか削れてる感じがしないし、文字も印刷ではないようなのでまったく消えていません。
2014/02/12追記
使用開始から2年ほど経ちました。現在メインパソコンはROCCAT(TM) Ryos MK Proを使用しているので外してあります。ROCCAT(TM) Ryos MK Proはキータッチやハードウェア自体はとても良い感じですが、サポートソフトの機能や完成度、全体的な使い勝手はこちらの方がいい感じがします。
2014/04/16追記
メインパソコンのキーボードをからROCCAT(TM) Ryos MK Proこちらに戻しました。
2015/12/19追記
新エディタの仕様にあわせて、レビューを修正しました。
1. パッケージの確認
今回レビューするのはロジクールのゲーミングキーボード G510です。
まずはパッケージを確認します。
2. インストール
使用するPCはPASSANT i72600KZN/DVRです。ソフトウェアCDをドライブに入れて、インストーラーを起動します。
ここから製品の登録、いくつかのソフトウェアのインストールが行えますがすべてWebへのリンクです。ソフトウェアを選択するとダウンロードサイトに繋がります。完了を押すと次の画面に進みます。
項目を選択すると解説や設定画面にジャンプします。
3. とりあえず使ってみた
インストールを終えてとりあえず使ってみました。多機能すぎてどこから手をつければいいのか困惑します。キーボードでサウンドデバイスが増える(ヘッドフォンまたはマイク端子を使用すると増えます)のはどうなんですかね。軽く試してみて一番気になったのはデバイスや常駐ソフトが多いことです。多機能なだけなら必要のない機能は使わなければいいだけですが、デバイスやプロセスはメモリ消費やCPU負荷が少なからずありますので、シビアなゲームをプレイする時や安定性を考えた場合デメリットになりえます。軽く調べた感じだとLCD関係が多いようです。LCD関係は設定で無効にできるようですが、とりあえずデフォルトに近い感じでいろいろと試していこうと思います。
4. インテグレートUSBオーディオ
あえて一番いらないと思ってる機能から試してみました。この製品はUSBのサウンドデバイスが内蔵されています。キーボードのヘッドフォンジャック、マイクジャックにヘッドフォン(スピーカー)、マイクを接続するとサウンドデバイスが増えます。それぞれにミュートボタンがついてるので何かと便利そうです。音質もなかなかよさそうです。しかし、ゲーマーはそれなりに性能がいいサウンドカードを使ってる事が多いだろうし、今回のレビューではサラウンドサウンドヘッドセットG35ともろにかぶっていますw 機能的に悪いところはないと思いますが、個人的にはガチなメインPCやゲーム用PCより、サブPCやリビングで使うPCなどに欲しい機能です。ちなみに今回のレビューでサウンドデバイスが2つ追加されたので、マザーボード、サウンドカード、ビデオカード、ヘッドセット、キーボードと5つのサウンドデバイスが使えるようになりました。
5. バックライトカラー
次は無駄に高性能なバックライトです。このキーボードはバックライトでキーが光ります。しかも色も自由に選べます。無駄に高性能な感じですが、こういうのは嫌いじゃないですw
6. ゲームモードスイッチ
ゲームプレイ中にWindowsキーを押して操作不能で死亡なんてのはよくある話ですが、このスイッチをオンにするとWindowsキーを無効化できます。マニュアルではコンテキストメニューキーも同時に無効化すると書いてありますが、こちらは無効化されていないようです。左側のWindowsキーが無効化されていればほぼ問題はなくなると思いますがマニュアルと違うのは気になりますね。
7. GamePanel LCD 2012/02/24修正
ソフトウェアをインストールするとキーボード上のLCDにRSS、メール、システムリソース、メディアプレイヤー、クロックタイマーなどの情報を表示するアプリケーションがインストールされます。さらにGamePanel対応のゲームやアプリケーションの情報も表示できます。面白いんですが、常駐ソフトなのが気になります。ゲームはアドオンで表示させる感じのものが多いのかな? 自作ソフトを表示させたら面白そうです。
カウントダウンタイマーはループとサウンドを再生する機能があります。MMORPGでよくあるRespawnの時間を計ったり、一定時間毎に大技を使ったり、変化のある敵で時間を計るのに使うとよさそうです。
8. マルチメディアボタン
安いキーボードでも付いてる事があるし、メーカー製パソコンのキーボードによく付いていますね。便利なのかもしれませんが、私はあまり使いません。このキーボードには再生/一時停止、停止、前のトラック/巻き戻し、次のトラック/早送り、ボリュームローラー、ミュートが付いています。ボリュームローラーがわりといい感じです。
9. キー プロファイラ 2012/02/24修正
このキーボードの最も重要な機能Gキーとプロファイルの設定を行うソフトです。バックライトカラーの設定もこれで行います。このキーボードは18個のGキーと3個のモード切替キーで54の割り当てを行う事ができます。さらにゲーム別、ソフト別にプロファイルを作成する事でゲーム(ソフト)にあわせて設定を切り替えて使う事ができます。また内蔵メモリーにプロファイルを保存することで別のPCで同じ設定を容易に使う事ができます。
Gキーに割り当てられる動作は
キーストロークを割り当てる
単一のキー入力または装飾キー(Ctrl、Alt、Shift)と組み合わせたキー入力を割り当てます。
マクロを割り当てる
マクロマネージャで作成したマクロ(連続したキーストローク)を割り当てます。
機能を割り当てる
メール、Web、メディア プレーヤー、電卓、マイコンピュータ、M1、M2、M3を割り当てます。
ショートカットを割り当てる
ローカルまたはネットワーク プログラム、ファイル、フォルダ、コンピュータ、インターネット アドレスへのショートカットを割り当てます。
テキストブロックを割り当てる
テキストブロックを割り当てます。マクロに近い感じですが、文字入力を考慮した機能のようです。
スクリプトの割り当て
スクリプトで使用するキーとして割り当てます。スクリプトはスクリプト エディタを使用してLuaプログラミング言語で書きます。G-series Lua APIにはキーボードとマウスの制御、マクロやLCDを制御等を行う関数があります。
マクロやスクリプトを使う事で複雑な操作を自動化できるのがこのキーボードの一番大きな特長ですね。
10. ゲームの操作をマクロで簡略化させる 2012/02/23修正
※日本語の使用に問題がありました。マクロ名に日本語を使っても問題はないようですが、スクリプトから使う事ができなくなります。詳細は「12. 日本語の使用について」に書きました。
今回はWizardry Onlineというネットワークゲームを使ってみます。自○狩り的なのをやるとなにかとあれなので、今回はパーティメンバーを1キーで回復させる簡単なマクロを作ってみます。通常は2キー必要なので簡略化という事になります。このゲームはスキルやパーティメンバーをターゲットするのにもショートカット登録が必要なのでまずはF1からF4のショートカットに「パーティメンバー1をサブターゲットにする」「パーティメンバー2をサブターゲットにする」「パーティメンバー3をサブターゲットにする」「ヒール」を設定します。
次は本題のマクロ作成です。マクロマネージャで新規作成を押して新規マクロを3つ作ります。名前は「ヒール1」「ヒール2」「ヒール3」としてみました。
ヒール1から順番に作っていきます。「記録を開始」を押して開始、「F1」「F4」を押してから「記録を中止」を押して終了します。
これでパーティメンバー1をサブターゲットしてヒールをするというマクロができました。しかし、このままだと動きません。なぜならこの手のゲームは待ち時間なしの操作を受け付けないように作ってあるからです。そこでキーストロークに遅延を挟みます。※「記録を開始」の前に「イベント間の遅延を記録」をチェックしておけば自動で遅延が入るのでそのままでも動きます。キーストロークの遅延を入れたい場所を右クリックして「遅延を挿入」を選択して挿入していきます。デフォルトの500ミリ秒だ長すぎるので今回は50ミリ秒にしました。
同じようにヒール2、ヒール3も作っていきます。次はGキーにマクロを割り当てていきます。キー プロファイラの「G1」をクリックしてメニューを開いてマクロを割り当てる>ヒール1で「G1」にヒール1を割り当てます。
同じように「G2」「G3」にも割り当てます。
これでGキーを使う事でパーティメンバーを1キーでヒールできるようになりました。
11. スクリプトを使ってみる 2012/02/23修正
※日本語の使用に問題がありました。スクリプトに日本語を使用すると問題が発生します。詳細は「12. 日本語の使用について」に書きました。
まずはお約束のHello worldをGamePanel LCDに表示させてみます。
Gキーを「スクリプトの割り当て」にしてスクリプト エディタで以下のように書きます。
function OnEvent(event, arg)
ClearLCD ()
OutputLCDMessage("Hello world")
end
スクリプト割り当てにしたGキーを押すとLCDにHello worldと表示されます。
※表示されない場合はLCD Managerで設定を変更してください。
スクリプトはfunction OnEvent(event, arg)から始まります。OnEventはPROFILEがACTIVATEDまたはDEACTIVATEDした時、GキーまたはMキーのPressまたはReleaseされた時に呼ばれます。
今回はClearLCD ()で消してから、OutputLCDMessage("Hello world")でHello worldと表示させています。
次は「10. ゲームの操作をマクロで簡略化させる」で作った3つのマクロをスクリプトから実行してみます。Gキーは前回と同じG1からG3を使います。
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 1) then
ClearLCD ()
OutputLCDMessage("メンバー1をヒール!")
PlayMacro("ヒール1")
end
if (event == "G_PRESSED" and arg == 2) then
ClearLCD ()
OutputLCDMessage("メンバー2をヒール!")
PlayMacro("ヒール2")
end
if (event == "G_PRESSED" and arg == 3) then
ClearLCD ()
OutputLCDMessage("メンバー3をヒール")
PlayMacro("ヒール3")
end
end
G1からG3キーのPressでLCDにテキストが表示され、パーティメンバーをヒールします。
12. 日本語の使用について 2012/02/23追記
スクリプトに日本語を使うとキー プロファイラ(LGDCore.exe)の起動時またはインポート等でプロファイル(通常のインストールだと<ユーザー名>\AppData\Local\Logitech\G-series Software\Keyboard\Profilesに置かれるようです)のスクリプト部分を読み込む時に中断、停止するようです。文字によっては問題なく動く場合もあるかもしれませんが、普通に使うのは難しいようです。また「11. スクリプトを使ってみる」で問題が発生してない事からわかるように、読み込み後に日本語を使った場合は問題なく動き続けるようです。
日本語が問題でキー プロファイラ(LGDCore.exe)が起動しなくなった場合の対処法
プロファイルの日本語が問題なのでこれをメモ帳などで消すか、問題のプロファイルを削除、移動(プロファイルがない場合はデフォルトになります)で起動するようになるようです。デフォルトのプロファイルは<ユーザー名>\AppData\Local\Logitech\G-series Software\Keyboard\Profilesに置かれるようです。拡張子は.lgp
13. 新規プロファイルを作成する 2012/02/24追記
新規プロファイルを作成します。今回はWizardry Online専用のプロファイルを作成してみます。キー プロファイラで新規を選択します。
次は名前と説明を入力して参照(関連付ける実行可能ファイル)を開きます。
これでWizardryOnline.exeに関連付けができました。「10. ゲームの操作をマクロで簡略化させる」(※日本語だと何かと問題が起きるようなので名前を変更しました)で作成したマクロを割り当てればWizardry Online起動時に専用のプロファイルが適応されてマクロが使えるようになります。
14. ゲーム ソフトウェアのインストール 2012/02/26追記
ロジクールの公式サイトに新しいソフトウェアがあったのでダウンロードしてインストールしました。今回はまず旧ソフトウェアをアンインストールしてから行いました。
15. 対応製品と旧ソフトウェアとの比較 2012/03/01修正
Logicool ゲーム ソフトウェアは多くのロジクール製品のソフトウェアが統合されたもので、G510もその中に入っています。
Logicool ゲーム ソフトウェアが対応してる製品
G11 Gaming Keyboard(日本未発売)
G13 Advanced Gameboard
G15 Gaming Keyboard
G19 Keyboard for Gaming(日本未発売)
G35 Surround Sound Headset
Gaming Keyboard G105: Made for Call of Duty(日本未発売)
Gaming Keyboard G110(日本未発売)
Gaming Mouse G300
Performance Optical mouse G400
Gaming Keyboard G510
Wireless Gaming Headset G930
旧ソフトウェアとの比較
まず見た目が大きく変更されて使いやすくなった印象です。マクロはマルチ キーという名称に変更されました。G510の場合は機能的にはほぼ同じですが、多くの不具合が修正されたようです。スクリプトでの日本語の使用はスクリプト エディタでの表示は可能になり、エラーで落ちる事もなくなったようですが、LCDやログには表示できないので未対応のようです。またゲーム ソフトウェア(LCore.exe)になってキー プロファイラとLCD Managerが統合、スクリプトからLCDの制御を行うプロセスなど分かれていたものも統合されたみたいでプロセスが大幅に減って(4つとかあったものが1つになったようです)すっきりしました。ゲーム ソフトウェアに対応した他の製品を同時に使った場合にプロセスの増加がなくなり、インストールの手間もなくなりました。また同時に使っている他の製品(サラウンドサウンドヘッドセットG35の操作をG510のGキーで行えました)の操作もG510から行えるようです。旧ソフトウェアは更新が止まっていましたがこちらのソフトウェアは更新してるので最近発売されたゲームのプロファイルが追加されています。
スクリプトの割り当てが必要なくなり、何を割り当てられていてもGキー等が押された時に実行されるようです。無駄な負荷が増えそうなので旧仕様の方がいいと思うのですがなぜそうなったのか、回避方法等はわかりません。複雑なスクリプトを使用してる場合、Gキー等を連打した場合に負荷が気になりますが、試していないのでどれくらいの状態になるのかはわかりません。
16. スクリプトでお絵かき(マウスの移動) 2012/02/28追記
マクロ、スクリプト等を使えるキーボード、マウスなどの入力機器はいろいろありますが、マウスの移動に対応した製品は少ないので、この製品を選ぶ理由の1つになっていると思います。今回はマウスの移動を使って簡単なお絵かきを行います。
まず準備としてお絵かき用のプロファイルを作成します。今回はWindowsについているペイントを使います。
最初は直線を描いてみましょう。
--ここからスクリプト
function OnEvent(event, arg)
PressMouseButton(1)
MoveMouseRelative(0, -5)
ReleaseMouseButton(1)
end
--ここまでスクリプト
まずはPressMouseButton(button)、マウスのプレスを行う関数です。PressMouseButton(1)で左プレスになります。ペイントソフトの多くはマウスの左をプレスして動かすと描けるので、それをスクリプトの操作で行います。
次はマウスを動かす関数です。MoveMouseRelative(x, y)、これはカーソルをその位置から指定した数値動かす関数です。今回はMoveMouseRelative(0, -5)で画面上方向に5動かします。※1辺りの動く距離は環境依存のようです。普通のプログラムでは1辺りの移動距離を計算したりできますが、必要最小限の関数しか使えないためプログラム内で行うのは無理なようです。基本的にマウス設定で速度が速ければ速いほど多く動くようです。
最後にReleaseMouseButton(button)、マウスをリリースする関数です。ReleaseMouseButton(1)で左のプレス状態を解除します。
このままだとプロファイルがアクティブになった時やGキーのプレス、リリースで線を2回描いてしまうので余計なところで描かないようにG2キーのプレスだけで描くようにします。
--ここからスクリプト
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
PressMouseButton(1)
MoveMouseRelative(0, -5)
ReleaseMouseButton(1)
end
end
--ここまでスクリプト
if (event == "G_PRESSED" and arg == 2) then
eventがG_PRESSED(Gキーのプレス)でargが2(G2)の場合だけ中に入ります。
次は下と左右にも描けるようにしてみましょう。
--ここからスクリプト
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
PressMouseButton(1)
MoveMouseRelative(0, -5)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 4) then
PressMouseButton(1)
MoveMouseRelative(-5, 0)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 5) then
PressMouseButton(1)
MoveMouseRelative(0, 5)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 6) then
PressMouseButton(1)
MoveMouseRelative(5, 0)
ReleaseMouseButton(1)
end
end
--ここまでスクリプト
これでG2、G4、G5、G6を使用して上下左右の線が描けるようになりました。
移動距離がはっきりしないのは何かと使いづらそうなので次は画面の座標を指定する移動で移動距離をはっきりさせます。
前回書いたのをそのまま置き換えていきます。
--ここからスクリプト
w = 1920
h = 1080
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y - (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 4) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x - (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 5) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y + (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 6) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (10 * (65535 / w)), y)
ReleaseMouseButton(1)
end
end
--ここまでスクリプト
w = 1920
h = 1080
画面の解像度を取得する事ができないようなので使用する環境に合わせて書きます。私は1920x1080なのでwに1920、hに1080を入れます
x, y = GetMousePosition()
マウスカーソルの座標を取得します。取得した座標は0から65535に正規化されています。
Sleep(10)
10ミリ秒遅延させます。遅延させないと処理がうまくいかないようなので入れます。環境によっては前回も入れないとうまくいかなかったのかもしれません。
MoveMouseTo(x, y - (10 * (65535 / h)))
マウスカーソルを上に10pixel移動させて長さ11pixelの縦線を描きます。正規化した座標を入れないといけないので10pixelを正規化させます。
次は図形を描いてみます。マウスカーソルの周りを囲むように正方形を描きます。マウスカーソルが四方に移動して正方形を描いて元の位置に戻ってきます。
前回書いたものは残してG7キーに追加します。
--ここからスクリプト
w = 1920
h = 1080
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y - (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 4) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x - (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 5) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y + (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 6) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 7) then
x, y = GetMousePosition()
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
ReleaseMouseButton(1)
Sleep(10)
MoveMouseTo(x, y)
end
end
--ここまでスクリプト
新しい関数はありません。今回はMoveMouseToを5回行って正方形を描いてMoveMouseToで元の位置に戻ってきます。マウスカーソルの位置を中心に20pixelで四方に移動してるのでマウスカーソルを中心に辺の長さが41pixelの正方形が完成します。
次はスタンプ、dot絵といった感じの絵を描きます。
前回書いたものは残してG13キーに追加しました。
--ここからスクリプト
w = 1920
h = 1080
stamp1 = [=[
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111101111111111111111111111111111111111111111111001111111111111
1111111111111010111111111111111111111111111111111111111101101111111111111
1111111111111010101111111111111111111111111111111111111101010111111111111
1111111111111001011111111111111111111111111111111111110101010111111111111
1111111111110100000111111111111111111111111111111111101010101111111111111
1111111111110101010011111111111111111111111111111111010101010011111111111
1111111111110010000001111111111111111111111111111110101010101111111111111
1111111111101000100000111111111111111111111111111101010101010011111111111
1111111111101010000000011111111111111111111111111101010101011011111111111
1111111111101001000000010111111111111111111111111010101010101101111111111
1111111111100100000000001111111111111111111111110101010101110111111111111
1111111111010001001000000111111111111111111111101010101010101010111111111
1111111111010100000000000011111111111111111111101010101101111101111111111
1111111111010010101000000011111111111111111111010101010110101111111111111
1111111111001000000100100001111111111111111111011011011011111010111111111
1111111111010010101000000000111111111111111110101010110110111111111111111
1111111110100000101010000000111111111111111111011101101111101101111111111
1111111111001010101010100000011111111111111101101011011010111110111111111
1111111110100001011010010000011111111111111110110110111111111111111111111
1111111110010101101101000000001111111111111101011011110110111110111111111
1111111111000001110110110100001110110111011111111110111111111111111111111
1111111110101010111011001000010001000000100010101011101011111110111111111
1111111110010011011101100001000100001000001001111110111111011111111111111
1111111110100001110110010000000000000000000001110111111101111110111111111
1111111110010101111000000100000000000010000001111110101111111111111111111
1111111110100011010000000000001000000101010011111111111011011110111111111
1111111110010010000000100000000000000111100001111111111101111111111111111
1111111110100000000000000000000000001111110111111111111111111111111111111
1111111110001000000000000000000000001011111111111111101010101011011111111
1111111110100000110100000000000000001111011111111110101001011111111111111
1111111110000011111111000000000000000101111111101111011110000110111111111
1111111111000111111111010000000000000000010111111101111011110011111111111
1111111110000111111101100000000000000000001111011011110111111001111111111
1111111100001111111111111000000000000000011111111111110101111111011111111
1111111100000111111111101000000000000000111101101011110011111010111111111
1111111000000111101111010100000000000000110111110111101001011111111111111
1111111000000111111111001000000000000001111111011111110001111010101111111
1111110000000011111111001010000000000011111111011111110000110111011111111
1111111000000001111110100100000000010011011011011111110010111010110111111
1111110000000001111111000010000000000111111110101111111001011111101111111
1111110000000000111111100010000000001111101110011111111101110100111111111
1111100000000000011111010101000001000010111110111111011111011101011111111
1111110000000000000111111110000000000000101011011101111111110100101011111
1111110000000000000001010000000000000000000000111111111010111010101111111
1111100000000000000000000000000000000000000000011111111111101001010011111
1111110000000000000000000000000011111100000000111101010110111010010111111
1111110000000000000000000000000011110110000011111100011111110101010111111
1111111000000000000000000000000000110010000011101100000110110000101111111
1111110000000000000000000000000000010000000011111100000011111010100111111
1111111000000000000000000000000000000000000001111100000010100100011111111
1111111100000000000000000000000000100000000000101000000000101001010111111
1111111100000010000000000000000000010000000000000001010101000101011111111
1111111110010100000000000000000001010100000000000000000010110101011111111
1111111111000000000000000000000010000000000000000000101000000001111111111
1111111111100010100000000000000000000000000000000000010010001001111111111
1111111111101010000000000000000000000000000000000000000001010011111111111
1111111111111000000000000000000000000000010000000000000000010111111111111
1111111111111000000000000000000000000000000000000000000000001111111111111
1111111111111110000000000000000000000000000000000000000010111111111111111
1111111111111111100000001000000000000000000000000000001001111111111111111
1111111111111111111000000000000000000000000000000100000111111111111111111
1111111111111111111110000000000000000000000000000000111111111111111111111
1111111111111111111111110000000000000000000000000101111111111111111111111
1111111111111111111111111110000000000000000010111111111111111111111111111
1111111111111111111111111111000000000000001001111111111111111111111111111
1111111111111111111111111111000100000000100011111111111111111111111111111
1111111111111111111111111111000000010110000001111111111111111111111111111
1111111111111111111111111110000000101001010011111111111111111111111111111
1111111111111111111111111110000000101001010011111111111111111111111111111
1111111111111111111111111111010100111100101001111111111111111111111111111
]=]
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y - (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 4) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x - (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 5) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y + (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 6) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 7) then
x, y = GetMousePosition()
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
ReleaseMouseButton(1)
Sleep(10)
MoveMouseTo(x, y)
elseif (event == "G_PRESSED" and arg == 13) then
x, y = GetMousePosition()
dw = 65535 / w
dh = 65535 / h
dx = 0
dy = 0
for i = 1, string.len(stamp1) do
if (string.byte(stamp1, i) == 48) then
MoveMouseTo(x + (dx * dw), y + (dy * dh))
PressMouseButton(1)
ReleaseMouseButton(1)
Sleep(10)
dx = dx + 1
elseif (string.byte(stamp1, i) == 49) then
dx = dx + 1
elseif (string.byte(stamp1, i) == 10) then
dy = dy + 1
dx = 0
end
end
end
end
--ここまでスクリプト
stamp1 = [=[
1111111...
...1111111
]=]
このキーボードで使えるLuaはファイル入出力ができないようなので、まずはモノクロのbitmapを0と1のテキストにしてコピー&ペーストしました。
このキーボード独自の関数は増えませんが文字列処理の関数をいくつか使いました。
string.len(stamp1)
stamp1の文字数を返します。
string.byte(stamp1, i)
stamp1のi文字目の文字を返します。
デジタルだけどアナログな感じで動かすので、うまく動かない事があるので今回もSleep(10)を入れました。Sleepなしだと数秒で描き終わりますがよく失敗しますw※Sleep(10)だけだとうまく動かない場合は、数値を増やすかSleepの数を増やしてみてください。
2012/02/28追記
もう終りにしようと思ってましたが、文字列処理が重くなってる原因な気がして気になるので少し修正してみました。
--ここからスクリプト
w = 1920
h = 1080
stamp1 = [=[
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111101111111111111111111111111111111111111111111001111111111111
1111111111111010111111111111111111111111111111111111111101101111111111111
1111111111111010101111111111111111111111111111111111111101010111111111111
1111111111111001011111111111111111111111111111111111110101010111111111111
1111111111110100000111111111111111111111111111111111101010101111111111111
1111111111110101010011111111111111111111111111111111010101010011111111111
1111111111110010000001111111111111111111111111111110101010101111111111111
1111111111101000100000111111111111111111111111111101010101010011111111111
1111111111101010000000011111111111111111111111111101010101011011111111111
1111111111101001000000010111111111111111111111111010101010101101111111111
1111111111100100000000001111111111111111111111110101010101110111111111111
1111111111010001001000000111111111111111111111101010101010101010111111111
1111111111010100000000000011111111111111111111101010101101111101111111111
1111111111010010101000000011111111111111111111010101010110101111111111111
1111111111001000000100100001111111111111111111011011011011111010111111111
1111111111010010101000000000111111111111111110101010110110111111111111111
1111111110100000101010000000111111111111111111011101101111101101111111111
1111111111001010101010100000011111111111111101101011011010111110111111111
1111111110100001011010010000011111111111111110110110111111111111111111111
1111111110010101101101000000001111111111111101011011110110111110111111111
1111111111000001110110110100001110110111011111111110111111111111111111111
1111111110101010111011001000010001000000100010101011101011111110111111111
1111111110010011011101100001000100001000001001111110111111011111111111111
1111111110100001110110010000000000000000000001110111111101111110111111111
1111111110010101111000000100000000000010000001111110101111111111111111111
1111111110100011010000000000001000000101010011111111111011011110111111111
1111111110010010000000100000000000000111100001111111111101111111111111111
1111111110100000000000000000000000001111110111111111111111111111111111111
1111111110001000000000000000000000001011111111111111101010101011011111111
1111111110100000110100000000000000001111011111111110101001011111111111111
1111111110000011111111000000000000000101111111101111011110000110111111111
1111111111000111111111010000000000000000010111111101111011110011111111111
1111111110000111111101100000000000000000001111011011110111111001111111111
1111111100001111111111111000000000000000011111111111110101111111011111111
1111111100000111111111101000000000000000111101101011110011111010111111111
1111111000000111101111010100000000000000110111110111101001011111111111111
1111111000000111111111001000000000000001111111011111110001111010101111111
1111110000000011111111001010000000000011111111011111110000110111011111111
1111111000000001111110100100000000010011011011011111110010111010110111111
1111110000000001111111000010000000000111111110101111111001011111101111111
1111110000000000111111100010000000001111101110011111111101110100111111111
1111100000000000011111010101000001000010111110111111011111011101011111111
1111110000000000000111111110000000000000101011011101111111110100101011111
1111110000000000000001010000000000000000000000111111111010111010101111111
1111100000000000000000000000000000000000000000011111111111101001010011111
1111110000000000000000000000000011111100000000111101010110111010010111111
1111110000000000000000000000000011110110000011111100011111110101010111111
1111111000000000000000000000000000110010000011101100000110110000101111111
1111110000000000000000000000000000010000000011111100000011111010100111111
1111111000000000000000000000000000000000000001111100000010100100011111111
1111111100000000000000000000000000100000000000101000000000101001010111111
1111111100000010000000000000000000010000000000000001010101000101011111111
1111111110010100000000000000000001010100000000000000000010110101011111111
1111111111000000000000000000000010000000000000000000101000000001111111111
1111111111100010100000000000000000000000000000000000010010001001111111111
1111111111101010000000000000000000000000000000000000000001010011111111111
1111111111111000000000000000000000000000010000000000000000010111111111111
1111111111111000000000000000000000000000000000000000000000001111111111111
1111111111111110000000000000000000000000000000000000000010111111111111111
1111111111111111100000001000000000000000000000000000001001111111111111111
1111111111111111111000000000000000000000000000000100000111111111111111111
1111111111111111111110000000000000000000000000000000111111111111111111111
1111111111111111111111110000000000000000000000000101111111111111111111111
1111111111111111111111111110000000000000000010111111111111111111111111111
1111111111111111111111111111000000000000001001111111111111111111111111111
1111111111111111111111111111000100000000100011111111111111111111111111111
1111111111111111111111111111000000010110000001111111111111111111111111111
1111111111111111111111111110000000101001010011111111111111111111111111111
1111111111111111111111111110000000101001010011111111111111111111111111111
1111111111111111111111111111010100111100101001111111111111111111111111111
]=]
bmp = {}
for i = 1, string.len(stamp1) do
if (string.byte(stamp1, i) == 48) then
bmp[i] = 0
elseif (string.byte(stamp1, i) == 49) then
bmp[i] = 1
elseif (string.byte(stamp1, i) == 10) then
bmp[i] = 2
end
end
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 2) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y - (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 4) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x - (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 5) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x, y + (10 * (65535 / h)))
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 6) then
x, y = GetMousePosition()
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (10 * (65535 / w)), y)
ReleaseMouseButton(1)
elseif (event == "G_PRESSED" and arg == 7) then
x, y = GetMousePosition()
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
PressMouseButton(1)
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x + (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y + (20 * (65535 / h)))
Sleep(10)
MoveMouseTo(x - (20 * (65535 / w)), y - (20 * (65535 / h)))
Sleep(10)
ReleaseMouseButton(1)
Sleep(10)
MoveMouseTo(x, y)
elseif (event == "G_PRESSED" and arg == 13) then
x, y = GetMousePosition()
dw = 65535 / w
dh = 65535 / h
dx = 0
dy = 0
j = table.maxn(bmp)
for i = 1, j do
if (bmp[i] == 0) then
MoveMouseTo(x + (dx * dw), y + (dy * dh))
PressMouseButton(1)
ReleaseMouseButton(1)
Sleep(1)
dx = dx + 1
elseif (bmp[i] == 1) then
dx = dx + 1
elseif (bmp[i] == 2) then
dy = dy + 1
dx = 0
end
end
end
end
--ここまでスクリプト
bmp = {}
for i = 1, string.len(stamp1) do
if (string.byte(stamp1, i) == 48) then
bmp[i] = 0
elseif (string.byte(stamp1, i) == 49) then
bmp[i] = 1
elseif (string.byte(stamp1, i) == 10) then
bmp[i] = 2
end
end
スクリプトが読み込まれた時に文字列をテーブルに置き換えることで、文字列処理をはじめに終わらせました。はじめから文字列じゃなくてテーブルに入れられるように変換しておけばよかった感じです。
予想通り軽くなりました。今回のレビューではじめてLuaを使ったのでまだ書き方がよくわからないし、何かと手間取ります。
17. マルチ キーをメモ帳で編集する 2012/03/05修正
簡単なマルチ キーならゲーム ソフトウェアのコマンド エディタで編集すればいいとは思いますが、長いもの、複雑なものを編集する時は編集機能的なものがほとんど付いていないコマンド エディタでは時間がかかるし、わかりにくいので、今回はテキスト エディタ(メモ帳)で編集してみます。
※通常のやり方ではなく、問題が起きる場合があると思うので、自己責任で行ってください。
何も無い状態からマルチ キー(マクロ)を追加する事もできますが、登録済みのマルチ キー(マクロ)を編集した方がわかりやすく簡単なので今回はデフォルト プロファイルにtestというマルチ キーを追加してそれを編集します。
まず新規コマンドを作成またはGキーにマルチ キーを設定してtestというマルチ キーを作成します。次にコピー&ペーストするのに都合がいいので使うキー、ボタン、遅延などを入力しておきます。
次はプロファイルのデータを開きます。プロファイルのデータはデフォルトだとC:\Users\<ユーザー名>\AppData\Local\Logitech\Logitech Gaming Software\profilesに置かれます。ちなみにゲーム ソフトウェアの設定は1つ上のC:\Users\<ユーザー名>\AppData\Local\Logitech\Logitech Gaming Software\settings.jsonに書かれるようです。プロファイルのファイル名はidになっています。デフォルト プロファイルはsettings.jsonでidを調べる事もできますが、今回は開いて目的のファイルを探します。
profilesフォルダに置かれたプロファイルのファイル(拡張子XML)をメモ帳で開くと3行目(違う場合もあるかもしれません)に
<profile guid="{00000000-0000-0000-0000-000000000000}" lock="0" name="デフォルト プロファイル">
のようにプロファイルのid、固定設定、名前が書かれていますので目的のプロファイルを探すことができます。
※問題が起きた時に戻せるように編集前にプロファイルのファイルをコピーしてバックアップをとっておくといいかもしれません。
目的のプロファイルを開いたら次はマルチ キー(マクロ)の書かれてるところを探します。name="test"となってるところが今回作ったマクロなので探します。プロファイルのデータが多い時は検索でマルチ キーの名前(test)を打てば簡単に探す事ができます。
青い部分を編集します。
ちなみに繰り返しオプションを指定してる場合は
<macro repeatdelay="1000" guid="{00000000-0000-0000-0000-000000000000}" hidden="false" name="test" repeatmode="toggle">
のようにrepeatdelayとrepeatmodeが追加されます。
マウスボタン
<mousebutton button="left" direction="down"/>
マウスの左ボタンを押す
<mousebutton button="left" direction="up"/>
マウスの左ボタンを離す
buttonにボタンの位置"left"、"right"、"middle"、"extra1"が入ります。
directionに"down"と"up"でマウスボタンの状態を入れます。
ホイール回転
<mousewheel delta="-1"/>
ホイールを後方回転
<mousewheel delta="1"/>
ホイールを前方回転
deltaに後方回転は"-1"、前方回転は"1"を入れます
キー
<key direction="down" value="1"/>
1キーを押す
<key direction="up" value="1"/>
1キーを離す
directionに"down"と"up"でキーの状態を入れます。
valueにキーの名前が入ります。
修飾キーなどのvalue
シフト "LSHIFT" "RSHIFT"
コントロール "LCTRL" "RCTRL"
オルト "LALT" "RALT"
エンター "ENTER"
スペース "SPACEBAR"
バックスペース "BACKSPACE"
矢印 "UP" "DOWN" "LEFT" "RIGHT"
エスケープ "ESCAPE"
タブ "TAB"
キャプスロック "CAPSLOCK"
ファンクション1 "F1"
Windows "LGUI" "RGUI"
アプリケーション "APPKEY"
挿入 "INSERT"
削除 "DELETE"
ホーム "HOME"
エンド "END"
ページアップ "PAGEUP"
ページダウン "PAGEDOWN"
プリントスクリーン "PRINTSCREEN"
スクロールロック "SCROLLLOCK"
ポーズ ブレイク "PAUSE"
テンキーのvalue
ニューメリックロック "NUMLOCK"
スラッシュ "NUMSLASH"
アスタリスク "NUMSTAR"
マイナス "NUMMINUS"
プラス "NUMPLUS"
エンター "NUMENTER"
ピリオド "NUMPERIOD"
0 "NUM0"
編集後はファイルを保存して、ゲーム ソフトウェアの再起動などを行ってプロファイルを再読み込みさせます。
400行ほどの繰り返しオプションが切り替えのマルチ キーを書いたので、30分ほど動かし続けましたが問題なく動き続けました。上限的なものがありそうなので気になっていましたが、とりあえずかなり長いものでも問題はないようです。
今回これを書いていて気になる仕様が1つありましたので書きます。
マルチ キーの最後に遅延を入れても無視されるようです。最後に遅延を入れても繰り返し以外では無意味なのと、繰り返しには繰り返しオプションに遅延設定があるので、この事を知っていればまったく問題はありませんが、最後に入れた遅延を計算に入れていると思ったように動かないので注意が必要です。
18. マルチ キーとスクリプトを停止させる 2013/11/27追記
長いマルチ キーや長いスクリプト、ループするスクリプトを書いた時に途中で停止できないのは何かと不便です。そこで途中で停止させる方法がないか調べてみました。スマートに止める方法はないようですが止める方法を書きます。※スマートな方法、もっと簡単な方法があったらコメントをお願いします。
まずはマルチ キーです。繰り返しオプション的な機能で「押しながら」でキーを放したり、「切り替え」でキーを押すと止まる製品もありますが、このキーボードは途中で停止しないようです。そこで止める方法を書きます。マルチ キーはMRキー(クイック マクロのキー)を押してクイックマクロ記録を開始する事で停止させる事ができるようです。今のところエラーなど問題は起きていません。
次はスクリプトです。スクリプトも途中で停止させるようなコマンドはないようです。スクリプトを途中で停止させる方法は大きく分けて2つあると思います。一つ目は他のプロファイルを読み込ませたり、Logicool ゲームソフトウェアを終了(停止)させる方法です。どちらもスマートには程遠い感じですし、他のスクリプトを読み込ませる方法も状況によってはエラーでLogicool ゲームソフトウェアが終了するようです。二つ目は普通の方法といった感じですが、キーやマウスの入力(状態)でスクリプトが終了するようにスクリプトを書くことです。今回はその例を4つ書きます。
--ここからスクリプト
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 1) then
while (GetMKeyState() == 1) do
PressAndReleaseKey("1")
Sleep(1000)
end
elseif (event == "G_PRESSED" and arg == 2) then
x1, y1 = GetMousePosition()
x2, y2 = GetMousePosition()
while (x1 == x2 and y1 == y2) do
PressAndReleaseKey("2")
Sleep(1000)
x2, y2 = GetMousePosition()
end
elseif (event == "G_PRESSED" and arg == 3) then
while (not IsModifierPressed("ctrl")) do
PressAndReleaseKey("3")
Sleep(1000)
end
elseif (event == "G_PRESSED" and arg == 4) then
while (not IsKeyLockOn("scrolllock")) do
PressAndReleaseKey("4")
Sleep(1000)
end
end
end
--ここまでスクリプト
このスクリプトは1から4のGキーを押すとGキーの番号にあわせて1から4の数字を1秒毎に1回押し続けます。また操作によってそれを抜けて終了します。
G1はMキーを使って終了させます。
while (GetMKeyState() == 1) do
PressAndReleaseKey("1")
Sleep(1000)
end
GetMKeyStateはMキーの状態を返す関数です。この場合はMキーの状態が1で押し続け、M2キーまたはM3キーが押されて1以外になっていたらwhileから抜けてスクリプトが終了します。whileなので開始から1以外の場合は一度も1が押されずに終了します。
G2はマウスの移動で終了させます。
x1, y1 = GetMousePosition()
x2, y2 = GetMousePosition()
while (x1 == x2 and y1 == y2) do
PressAndReleaseKey("2")
Sleep(1000)
x2, y2 = GetMousePosition()
end
最初にGetMousePositionでマウスの座標をx1とy1、x2とy2に入れます。次にwhileの中でマウスの座標を取得させて最初に取得させた座標と違っていた場合はwhileを抜けてスクリプトが終了します。※whileで戻り値の2つある関数を使って比較する書き方があるのか、ないのかわかりませんが、うまくいかなかったので少し長くなりました。
G3は修飾キーの状態で終了させます。
while (not IsModifierPressed("ctrl")) do
PressAndReleaseKey("3")
Sleep(1000)
end
IsModifierPressedは修飾キーの状態を返す関数です。この場合はCTRLキーが押されるまで3を押し続け、押されていたらwhileを抜けて終了します。
G4はトグルキーの状態で終了させます。
while (not IsKeyLockOn("scrolllock")) do
PressAndReleaseKey("4")
Sleep(1000)
end
IsKeyLockOnはトグルキーの状態を返す関数です。この場合はスクロールロックがオフで4を押し続け、オンになっていたらwhileを抜けて終了します。
他にも方法はありますが、こんな感じで事足りると思います。
スクロールロックを使った例
最初にスクロールロックを解除する処理を入れたり、スクリプトが長い時は停止させるための処理を所々に挿入すると使いやすくなります。
--ここからスクリプト
function OnEvent(event, arg)
if (event == "G_PRESSED" and arg == 1) then
if (IsKeyLockOn("scrolllock")) then
PressKey("scrolllock")
Sleep(100)
ReleaseKey("scrolllock")
Sleep(100)
end
while (not IsKeyLockOn("scrolllock")) do
if (IsKeyLockOn("scrolllock")) then break end
end
end
end
--ここまでスクリプト
総評
多機能なところが目立ちますが、基本性能も高いようです。ソフトウェアをインストールするとデバイスやプロセスが増えますが必要なければ外せるようなのでこれも問題にはならなそうです。マクロとスクリプト機能が一番の特長だと思うのでこれを活かせるかどうかで満足度が決まりそうです。
りっちさん
2012/02/23
今のキーボードは、本当に多機能でビックリしました!!
使いこなせるまで慣れろ!!ってかんじですかねw
n-eさん
2012/02/23
ゲームスイッチとかGキー、マクロ、スクリプト辺りの機能はキーボードに付くべき機能だと思いますが
「インテグレートUSBオーディオ」と「バックライトカラー」はがんばりすぎな感じがしますw
zookeeさん
2012/02/23
このキーボード本当に多機能ですね。普通のキーボードを使っている人だと慣れるまでに時間がかかりそうな気がしますが、慣れてしまえばすごく便利に感じるものだと思います。
私はこれを使ってBF3やってみたいです。
n-eさん
2012/02/23
必要な機能だけ使っていけば便利に使えそうです。
しかしいろいろと難しいですね。トラブルが発生しましたw
PCを起動したらキープロファイラが起動しなくなりました。
プロファイルの読み込みで落ちてるようです。マクロ名、スクリプトに日本語を使ったのがまずかったんだろうか、これから検証しないといけなくなりました。とりあえずプロファイルを退避させたらデフォルトを読み込んで起動に成功しましたので、どこに問題があるのかこれから調べます。
n-eさん
2012/02/23
eulerさん
2012/02/23
このような多機能なキーボードは使ったことも購入候補にもなったことなかったので、参考になりました。
こんなキーボード使ってみたいですが、きっと使いこなせないなとか思ってしまいます・・・
n-eさん
2012/02/23
使いたい機能だけ使っていけばいいとは思いますが、キーボードは安いものなら500円くらいからあるわけで、機能を活かせないとコストパフォーマンスが悪い感じになってしまいますね。
n-eさん
2012/02/25
n-eさん
2012/02/25
n-eさん
2012/02/26
この製品のソフトウェアのダウンロードはバージョンは同じですが
日本語
Logicool ゲーミングソフトウェア
GamePanel対応ソフトウェア
英語
Logitech Gaming Software(Current)
GamePanel Software(Legacy)
重要な部分が抜けています。
What's Newなどの更新情報もまったく違うものです。日本語の方は昔の情報がずっとそのままになってるようです。
n-eさん
2012/02/26
きっちょむさん
2012/02/27
なんかキーボードがむしろ"オマケ"に見えてきました^^汗
n-eさん
2012/02/27
機能だけ欲しい人のためにG13 Advanced Gameboardなんてのもありますね。
jirさん
2012/07/03
キーボード入力でマクロを書き込むマクロで同じマクロ書けちゃう?
n-eさん
2012/07/03
書けそうですね。
書いたマクロを実行するようにしておけば連鎖しそうですが、実際にキーを押す以外では実行できない仕様になってるようなのでややこしい事になりそうです。SetMKeyStateでOnEventが実行されるようならゲーミングソフトウェアの仕様によってはそれなりの感じのが書けるかもしれませんが試してみないとわかりませんね。