ぬるぽを見かけたら 全力でぶっ叩くのみ


by Denullpo Smasher Hammerson
カレンダー
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

ヴァージョンアップマダー?

[ロジクール ロジクール G13 アドバンス ゲームボード G-13]
どんなに優れたハードも、ソフトがなければただの箱
…とはよくいったものである。
とりあえず、アナログスティックと見せかけて4方向ディジタルとしてでしか
反応しないのは一体なんなんだと。

んで、キーアサインユーティリティの使い勝手もアレなので全Gキーでスクリプト
呼び出して、スクリプト側でキーアサインするようにしてみた。
なお、G23~25はマウスボタンに固定し、アナログスティックでマウスカーソルを
それなりに動かせるようにしてみた。でもpress/releaseしか補足できないので、
押した方向に矯めてって離したときに移動するような形で。
これでも、ピクセル単位の細かい操作ぐらいには使えるです。

なお、日本の最新版ドライバではGキー操作でOnEvent()が呼ばれない
バグがあるので、このスクリプトは動作しませんです。
アメリカ版サイトから最新版ドライバ持ってきてちょ。





-- init --------------------
key={}
key[1]={};
key[2]={};
key[3]={};
for i=1,22 do
    key[1][i]=-1;
    key[2][i]=-1;
    key[3][i]=-1;
end

-- time of stick input -----
pt_u=0;
pt_r=0;
pt_d=0;
pt_l=0;

-- key definition ----------
-- ここで、 key[M番号][G番号]=キーコード という具合に設定 --

function PressG(arg)
    if arg==23 then
        PressMouseButton(1);
    elseif arg==24 then
        PressMouseButton(3);
    elseif arg==25 then
        PressMouseButton(2);
    elseif arg==26 then
        pt_u=GetRunningTime();
    elseif arg==27 then
        pt_r=GetRunningTime();
    elseif arg==28 then
        pt_d=GetRunningTime();
    elseif arg==29 then
        pt_l=GetRunningTime();
    else
        m=GetMKeyState();
        k=key[m][arg];
        if k>=0 then
            PressKey(k);
        end
    end
end

function ReleaseG(arg)
    if arg==23 then
        ReleaseMouseButton(1);
    elseif arg==24 then
        ReleaseMouseButton(3);
    elseif arg==25 then
        ReleaseMouseButton(2);
    elseif arg==26 then
        n=GetRunningTime()-pt_u;
        n=(n+9)/10;
        MoveMouseRelative(0,-n);
    elseif arg==27 then
        n=GetRunningTime()-pt_r;
        n=(n+9)/10;
        MoveMouseRelative(n,0);
    elseif arg==28 then
        n=GetRunningTime()-pt_d;
        n=(n+9)/10;
        MoveMouseRelative(0,n);
    elseif arg==29 then
        n=GetRunningTime()-pt_l;
        n=(n+9)/10;
        MoveMouseRelative(-n,0);
    else
        m=GetMKeyState();
        k=key[m][arg];
        if k>=0 then
            ReleaseKey(k);
        end
    end
end

function OnEvent(event, arg)
    if event=="G_PRESSED" then
        PressG(arg);
    elseif event=="G_RELEASED" then
        ReleaseG(arg);
    else
        OutputLogMessage("event = %s, arg = %s\n", event, arg);
    end
end

行末に余計なセミコロン付いてんのは御愛嬌
[PR]
by denullpo | 2009-08-07 23:59 | こっち関係