KeyToKey開発ブログ

KeyToKeyはゲームなどで使うことを目的として開発されたユーティリティツールです。 キーボード、マウス、コントローラーにキーやマウスのボタン、マクロを割り当てることができます。最新のゲームなどでも動作可能です。

  • ダウンロード
  • 使用方法
  • 質問
  • 要望
  • 不具合報告
  • 寄付のお願い
  • プレビュー版

プレビュー版

2023年02月20日

  • コメント
    13 件
  • by key0x2key

 コメント一覧 (13)

    • 1. 名無しさん
    • 2023年03月08日 21:11
    • >環境設定に「プロファイルの有効/無効が切り替わったことを音で通知する」を追加しました。
      >「アプリケーションの設定」での設定を上書きすることができます。
      動作確認しました。
      (
      新機能と無関係ですが、
      「アプリケーションの設定」と「環境設定」は、表題からは各々の立ち位置をイメージしにくい気がしました。
      「設定」と「プロファイル(毎)の設定」、
      「アプリケーションの設定」と「プロファイルの設定」、
      などの方がわかり易いかも知れません。
      それと、(他の項目に入っているときはアイコンへのマウスオーバーで表題がわかるのですが)中に入ると表題を示すものが無くなるのも、不慣れな内はわかり辛いような気がします。
      chromeの「設定」に入ると、タブにも、スクロールしない上部固定表示にも「設定」と表記されていて(クドく感じる面もありますが)とてもわかり易いです。
      )

      続きはまたのちほど。
    • 0
      key0x2key

      key0x2key

      がlikedしました

      liked
    • 2. 名無しさん
    • 2023年03月08日 23:53
    • >コンソールウィンドウの位置とサイズが記憶されるようになりました。
      動作確認しました。プレビュー版/公開版の交互起動で、プレビュー版のコンソールウインドウが小さくなる事がありましたが、完全移行すれば大丈夫と思います。
    • 0
      key0x2key

      key0x2key

      がlikedしました

      liked
    • 3. 名無しさん
    • 2023年03月08日 23:59
    • >新しい仮想 XInput コントローラーのドライバとして ViGEm が使用できるようになりました。

      ViGEmBus(1.21.442)が上手く動かなかったので、とりあえず同じテストをScpVBusでも行おうとしたところやはり上手く動きませんでした。KeyToKeyの設定はきちんと切り替えているはずです。
      何か変更点を見落としているのかも知れませんが、またのちほどテストしてみます。

      System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
      場所 KeyToKey.Macro.Actions.BaseXInputMappingState.SetMappingState(MacroRepository repository, MacroStorage root, Int32 userIndex, IEnumerable`1 sources, Boolean state) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Actions\Controller.cs:行 263
      場所 KeyToKey.Macro.Scripts.Features.InternalVirtualXInput.SetMappingState(Int32 userIndex, IEnumerable`1 sources, Boolean state) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Scripts\Features\VirtualXInput.cs:行 70
      場所 Submission#0.<<Initialize>>b__0_0(Object sender, DisposingEventArgs e) 場所 :行 24
      場所 KeyToKey.Macro.Scripts.Features.Globals.OnDisposing(DisposingEventArgs e) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Scripts\Features\Globals.cs:行 533
      場所 KeyToKey.Macro.Scripts.Features.Globals.Dispose(DisposingEventArgs e) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Scripts\Features\Globals.cs:行 224
    • 0
      key0x2key

      key0x2key

      がlikedしました

      liked
      • 4. 名無しさん
      • 2023年03月08日 23:59
      • >>3
        [エラー]
        トリガー : F7
        マクロ名 : C#/sUp.csx
        行数 : 1行目
        発生源 : sUp.csx
        メッセージ :
        System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
        場所 KeyToKey.Macro.Actions.BaseXInputMappingState.SetMappingState(MacroRepository repository, MacroStorage root, Int32 userIndex, IEnumerable`1 sources, Boolean state) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Actions\Controller.cs:行 267
        場所 KeyToKey.Macro.Scripts.Features.InternalVirtualXInput.SetMappingState(Int32 userIndex, IEnumerable`1 sources, Boolean state) 場所 C:\Users\root\Source\Repos\KeyToKey\KeyToKey\Macro\Scripts\Features\VirtualXInput.cs:行 70
        場所 Submission#0.<<Initialize>>d__0.MoveNext() 場所 :行 31
        --- 直前に例外がスローされた場所からのスタック トレースの終わり ---
        場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
        場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        場所 Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.<RunSubmissionsAsync>d__9`1.MoveNext()
        --- 直前に例外がスローされた場所からのスタック トレースの終わり ---
        場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
        場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        場所 Microsoft.CodeAnalysis.Scripting.Script`1.<RunSubmissionsAsync>d__21.MoveNext()
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 5.  key0x2key 開発者
      • 2023年03月09日 17:16
      • >>4
        マッピングを無効にすると例外を再現することができたので、マッピングが有効になっているかどうか確認してみてください。
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 6. 名無しさん
      • 2023年03月10日 00:02
      • >>5
        フォローありがとうございます。新規にプロファイルを作って設定が中途半端でした。

        ViGEmBusとViGEmBusで概ね似たような動作をする事を確認しました。ドライバがインストールされていなければKeyToKey起動時にエラーが出るので移行も比較的スムーズに行きそうですね。

        コントロールパネル、プロパティから両者の違いも確認できました。
        コントロールパネル→デバイスとプリンター→XBOX360~プロパティ→ハードウェア→XBOX 360 Controller for Windows→
        ViGEmBus の場合
         場所: 1 (Virtual Gamepad Emulation Bus)
        ScpVBus の場合
         場所: SCP Virtual X360 Bus : #01

        以前からの不具合ですが、「入力の可視化(DS4)でアナログスティックの値を0.0にしたときに0.0にならず、その直前の値を反映したスティックが表示される」というものがあります。「左stickのY軸」以外の3軸で確認しています。原因が、XInputのドライバにあるのか、ViGEmBusやScpVBusにあるのか、KeyToKeyの可視化にあるのか不明ですが、何等か対策が出来ると良いのですが。
        問題になったときは4.0E-5 などの値をsetして回避しています。
        こちら検証動画になります。
        https://i.imgur.com/tfviMDc.mp4
        スティックが中央にも停止するはずが、3軸では両端にしか停止しません。
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 7. 名無しさん
      • 2023年03月10日 00:03
      • >>6

        var mapping=new[]{
        MappingSources.LeftStickX,
        MappingSources.LeftStickY,
        MappingSources.RightStickX,
        MappingSources.RightStickY,
        };
        Disposing+=(sender,e)=>{
        VirtualXInput.SetMappingState(0,mapping,true);
        };
        VirtualXInput.SetMappingState(0,mapping,false);

        TestVirtualStick(0,isLeft:false);
        TestVirtualStick(0,isLeft:true);

        void TestVirtualStick(int userIndex,bool isLeft){
        var c=VirtualXInput.GetController(userIndex);
        var s = isLeft ? c.LeftStick : c.RightStick;
        var w=500;//[ms]
        var tick=5;//[ms]
        var z=1.0d/32760;
        var l=new(double,double)[]{
        ( 0,+1),
        ( 0, 0),
        ( 0,-1),
        ( 0, 0),
        ( 0,+1),
        ( 0, 0),
        ( 0,-1),
        ( 0, 0),
        (+1, 0),
        ( 0, 0),
        (-1, 0),
        ( 0, 0),
        (+1, 0),
        ( 0, 0),
        (-1, 0),
        ( 0, 0),
        };
        foreach(var(目標X,目標Y) in l){
        s.SetValue(目標X,-目標Y);// Y座標をどこかでマイナスしないとsetとgetが一致しない
        Wait(tick);
        var 結果=XInput.GetState(userIndex);
        var 結果Stick = isLeft ? 結果.NormalizedLeftStick : 結果.NormalizedRightStick;
        var 結果X = 結果Stick.Horizontal;
        var 結果Y = 結果Stick.Vertical;
        var 正誤 = Distance(目標X,目標Y,結果X,結果Y)>z ? "誤" : "";
        Console.WriteLine($"{目標X,4:f1} {目標Y,4:f1} {結果X,4:f1} {結果Y,4:f1} {正誤}");
        Wait(w);
        }
        }
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
    • 8. 名無しさん
    • 2023年03月16日 22:19
    • >入力の可視化(DS4)のスティックの挙動を調整しました。
      ViGEmBus利用でもScpVBus利用でも改善された事を確認しました。
      ありがとうございます。

      >短く押したとき
      以下の2つにチェックが入っているときに、
      ・「重量じゃない設定→トリガーを押している間はマクロの終了を待機する」
      ・「マクロが停止した時→実行を制限する」
      以下で指定したマクロが、「短く押したら」のマクロとして機能する事を確認しました。
      ・「マクロが停止した時」

      「トリガーを押したとき」で指定したマクロの実行時間が長い場合は、
      「トリガーを離したときに実行中のマクロを終了させる」
      などでマクロを強制停止させないと「短く押したら」が発動しない仕組みですね(恐らく)。

      (長押しと違い)短押しはややトリッキーな検出なので注意が必要そうです。

      ver.2023/03/05では長押しで両方のマクロが走ってしまい、
      ver.2023/03/13では長押しで目的のマクロのみが走る事を確認しました。
    • 0
      key0x2key

      key0x2key

      がlikedしました

      liked
    • 9. 名無しさん
    • 2023年03月16日 22:22
    • >ViGEm の DualShock4(PS4 コントローラー) を新しく使えるようにしました。
      >「アプリケーションの設定」に「仮想 DualShock4 コントロラーを有効にする」を追加しました。
      windowsのコントロールパネルから、Wireless Conttrollerとして見える事を確認しました。

      >「割り当て設定(コントローラー)」に「コントローラーの入力を仮想 DualShock4 コントローラーにマッピングする」を追加しました。
      マッピングによって、上記Wireless Conttrollerにマッピングされる事、物理ゲームパッドから操作できる事を確認しました。

      ただ、IGlobals.DualShock4の使い方がまだ良くわかりません。
      マッピングしていない状態で、以下のスクリプトでボタン操作できるのかと思ったのですが上手く行きませんでした。

      var d=DualShock4;
      if(d.HasConnected){
      Console.WriteLine("ds4 has connected.");//これは実行される
      d.Triangle.Tap(1000);//これの実行が確認できない
      }
    • 0
      key0x2key

      key0x2key

      がlikedしました

      liked
      • 10.  key0x2key 開発者
      • 2023年03月18日 02:45
      • >>9
        スクリプトのTapメソッドについては、こちらでは正常に実行できていることを確認しました。

        入力の可視化に「入力の可視化(DualShock4)」を使用されていませんか?
        もし使用されている場合は、まずDualShock4の設定を割り当て設定(コントローラー)から行う必要があります。
        下記のzipファイル内にあるControllersフォルダをKeyToKeyに上書きしてもOKです。

        ■設定
        https://keytokey-dev.net/KeyToKey/DS4設定.zip
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 11. 名無しさん
      • 2023年03月18日 20:03
      • >>10
        再度やり直してwindowsのコントロールパネルでの可視化で動作確認できました。
        また、いただいたファイルを使い、KeyToKeyの入力の可視化→DualShock4→DirectInput→Wireless Controller による可視化でも動作確認できました。

        sony色が強くなったので、
        d.LeftStickPush
        d.RightStickPush
        はそれぞれL3とR3にした方がすっきりするかなと思いました。すっきりさせるのも、これまでとの統一性を優先するのも、ありだと思います。

        また、
        d.DpadLeftなどで "DPad"から"Dpad"への変更は少々戸惑いました。慣れる気もしますし、3日経てば忘れてしまう気もします。

        細かいところで、アナログスティックSetメソッドのタプル対応ありがとうございます。たまに使うので用意されていると助かります。

        本題と少し離れますが、Dpadで左右同時押しや上下同時押しに対応する余地はありますか?
        これまではキーボードを叩くか、ScpVBus/vXboxを直接叩いていましたが、KeyToKeyと仮想ゲームパッドだけで操作できると楽ができそうです。
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 12. 名無しさん
      • 2023年03月18日 20:03
      • >>11

        var d=DualShock4;
        var w=500;//[ms]

        if(d.HasConnected){
        Console.WriteLine("ds4 has connected.");
        }else{
        Console.WriteLine("ds4 has not connected.");
        Abort();
        }

        d.DpadLeft.Tap(w);
        d.DpadDown.Tap(w);
        d.DpadUp.Tap(w);
        d.DpadRight.Tap(w);
        for(var i=8;i>-2;i--){
        d.SetDpad((DpadDirections)i);
        Wait(w);
        }

        d.Square.Tap(w);
        d.Cross.Tap(w);
        d.Circle.Tap(w);
        d.Triangle.Tap(w);
        d.L1.Tap(w);
        d.R1.Tap(w);
        d.L2.Tap(w);// ボタンは無反応
        d.R2.Tap(w);// ボタンは無反応
        d.Share.Tap(w);
        d.Options.Tap(w);
        d.LeftStickPush.Tap(w);// L3
        d.RightStickPush.ap(w);// R3
        d.PSButton.Tap(w);
        d.Touchpad.Tap(w);

        for(var f=1.0;f>0.0;f-=1e-5){
        d.LeftStick.SetValue(-f,-f);
        d.RightStick.SetValue(f,f);
        d.L2.SetValue(-f);
        d.R2.SetValue(f);
        }
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
      • 13.  key0x2key 開発者
      • 2023年03月18日 22:14
      • >>11
        >> 名前の統一について
        次のプレビューバージョンで変えます。

        >> Dpadで左右同時押しや上下同時押しに対応する余地はありますか?
        あまり想定しにくい使い方ですが、ScpVBusとViGEmのXInputに関しては実装できそうです。
      • 0
        key0x2key

        key0x2key

        がlikedしました

        liked
コメントフォーム
記事の評価
  • リセット
  • リセット
顔
星

最新コメント
  • ライブドアブログ

↑このページのトップヘ

Powered by ライブドアブログ