プレビュー版 2023年02月20日 コメント一覧 (14) 1. 名無しさん 2023年03月08日 21:11 >環境設定に「プロファイルの有効/無効が切り替わったことを音で通知する」を追加しました。 >「アプリケーションの設定」での設定を上書きすることができます。 動作確認しました。 ( 新機能と無関係ですが、 「アプリケーションの設定」と「環境設定」は、表題からは各々の立ち位置をイメージしにくい気がしました。 「設定」と「プロファイル(毎)の設定」、 「アプリケーションの設定」と「プロファイルの設定」、 などの方がわかり易いかも知れません。 それと、(他の項目に入っているときはアイコンへのマウスオーバーで表題がわかるのですが)中に入ると表題を示すものが無くなるのも、不慣れな内はわかり辛いような気がします。 chromeの「設定」に入ると、タブにも、スクロールしない上部固定表示にも「設定」と表記されていて(クドく感じる面もありますが)とてもわかり易いです。 ) 続きはまたのちほど。 0 key0x2key がしました 2. 名無しさん 2023年03月08日 23:53 >コンソールウィンドウの位置とサイズが記憶されるようになりました。 動作確認しました。プレビュー版/公開版の交互起動で、プレビュー版のコンソールウインドウが小さくなる事がありましたが、完全移行すれば大丈夫と思います。 0 key0x2key がしました 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 がしました 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 がしました 5. 開発者 2023年03月09日 17:16 >>4 マッピングを無効にすると例外を再現することができたので、マッピングが有効になっているかどうか確認してみてください。 0 key0x2key がしました 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 がしました 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 がしました 8. 名無しさん 2023年03月16日 22:19 >入力の可視化(DS4)のスティックの挙動を調整しました。 ViGEmBus利用でもScpVBus利用でも改善された事を確認しました。 ありがとうございます。 >短く押したとき 以下の2つにチェックが入っているときに、 ・「重量じゃない設定→トリガーを押している間はマクロの終了を待機する」 ・「マクロが停止した時→実行を制限する」 以下で指定したマクロが、「短く押したら」のマクロとして機能する事を確認しました。 ・「マクロが停止した時」 「トリガーを押したとき」で指定したマクロの実行時間が長い場合は、 「トリガーを離したときに実行中のマクロを終了させる」 などでマクロを強制停止させないと「短く押したら」が発動しない仕組みですね(恐らく)。 (長押しと違い)短押しはややトリッキーな検出なので注意が必要そうです。 ver.2023/03/05では長押しで両方のマクロが走ってしまい、 ver.2023/03/13では長押しで目的のマクロのみが走る事を確認しました。 0 key0x2key がしました 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 がしました 10. 開発者 2023年03月18日 02:45 >>9 スクリプトのTapメソッドについては、こちらでは正常に実行できていることを確認しました。 入力の可視化に「入力の可視化(DualShock4)」を使用されていませんか? もし使用されている場合は、まずDualShock4の設定を割り当て設定(コントローラー)から行う必要があります。 下記のzipファイル内にあるControllersフォルダをKeyToKeyに上書きしてもOKです。 ■設定 https://keytokey-dev.net/KeyToKey/DS4設定.zip 0 key0x2key がしました 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 がしました 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 がしました 13. 開発者 2023年03月18日 22:14 >>11 >> 名前の統一について 次のプレビューバージョンで変えます。 >> Dpadで左右同時押しや上下同時押しに対応する余地はありますか? あまり想定しにくい使い方ですが、ScpVBusとViGEmのXInputに関しては実装できそうです。 0 key0x2key がしました 14. 名無しさん 2023年03月25日 01:06 >キー割り当ての「使用する仮想コントローラー」に DualShock4 を追加しました。 確認しました。動作しているようです。 >SetDpad(bool up = false, bool down = false, bool left = false, bool right = false) ありがとうございます。ばっちりです。 始めにこれが欲しくなったのは「罠に捕まったときにガチャガチャ操作すると早く抜けられる」という場面でした。従来のメソッドでは2bit*1frame遅くなるところ、新メソッドでは最速で入力可能になります。 それ以外でも左右同時、上下同時が有用なケースがありました。詳細は省きますが非常に有用です。 >名前変更 ありがとうございます。各々確認しました。 void IVirtualXInputDevice.SetDpad() enum KeyToKey.Plugins.DpadDirections の2か所に"Dpad"が残っているようです。 0 key0x2key がしました コメントフォーム 名前 コメント 記事の評価 リセット リセット 顔 星 情報を記憶 コメントを投稿する
コメント一覧 (14)
>「アプリケーションの設定」での設定を上書きすることができます。
動作確認しました。
(
新機能と無関係ですが、
「アプリケーションの設定」と「環境設定」は、表題からは各々の立ち位置をイメージしにくい気がしました。
「設定」と「プロファイル(毎)の設定」、
「アプリケーションの設定」と「プロファイルの設定」、
などの方がわかり易いかも知れません。
それと、(他の項目に入っているときはアイコンへのマウスオーバーで表題がわかるのですが)中に入ると表題を示すものが無くなるのも、不慣れな内はわかり辛いような気がします。
chromeの「設定」に入ると、タブにも、スクロールしない上部固定表示にも「設定」と表記されていて(クドく感じる面もありますが)とてもわかり易いです。
)
続きはまたのちほど。
key0x2key
が
しました
動作確認しました。プレビュー版/公開版の交互起動で、プレビュー版のコンソールウインドウが小さくなる事がありましたが、完全移行すれば大丈夫と思います。
key0x2key
が
しました
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
key0x2key
が
しました
ViGEmBus利用でもScpVBus利用でも改善された事を確認しました。
ありがとうございます。
>短く押したとき
以下の2つにチェックが入っているときに、
・「重量じゃない設定→トリガーを押している間はマクロの終了を待機する」
・「マクロが停止した時→実行を制限する」
以下で指定したマクロが、「短く押したら」のマクロとして機能する事を確認しました。
・「マクロが停止した時」
「トリガーを押したとき」で指定したマクロの実行時間が長い場合は、
「トリガーを離したときに実行中のマクロを終了させる」
などでマクロを強制停止させないと「短く押したら」が発動しない仕組みですね(恐らく)。
(長押しと違い)短押しはややトリッキーな検出なので注意が必要そうです。
ver.2023/03/05では長押しで両方のマクロが走ってしまい、
ver.2023/03/13では長押しで目的のマクロのみが走る事を確認しました。
key0x2key
が
しました
>「アプリケーションの設定」に「仮想 DualShock4 コントロラーを有効にする」を追加しました。
windowsのコントロールパネルから、Wireless Conttrollerとして見える事を確認しました。
>「割り当て設定(コントローラー)」に「コントローラーの入力を仮想 DualShock4 コントローラーにマッピングする」を追加しました。
マッピングによって、上記Wireless Conttrollerにマッピングされる事、物理ゲームパッドから操作できる事を確認しました。
ただ、IGlobals.DualShock4の使い方がまだ良くわかりません。
マッピングしていない状態で、以下のスクリプトでボタン操作できるのかと思ったのですが上手く行きませんでした。
var d=DualShock4;
if(d.HasConnected){
Console.WriteLine("ds4 has connected.");//これは実行される
d.Triangle.Tap(1000);//これの実行が確認できない
}
key0x2key
が
しました
確認しました。動作しているようです。
>SetDpad(bool up = false, bool down = false, bool left = false, bool right = false)
ありがとうございます。ばっちりです。
始めにこれが欲しくなったのは「罠に捕まったときにガチャガチャ操作すると早く抜けられる」という場面でした。従来のメソッドでは2bit*1frame遅くなるところ、新メソッドでは最速で入力可能になります。
それ以外でも左右同時、上下同時が有用なケースがありました。詳細は省きますが非常に有用です。
>名前変更
ありがとうございます。各々確認しました。
void IVirtualXInputDevice.SetDpad()
enum KeyToKey.Plugins.DpadDirections
の2か所に"Dpad"が残っているようです。
key0x2key
が
しました