【過去ログ】質問・要望・不具合報告
⚠️コメントする前に読んで下さい⚠️
曖昧であったり投げやりな質問はおやめください。
自分のやりたいことや現在の設定など情報を詳細に記載してください。

マクロの質問について
現在のKeyToKeyにはC#スクリプト(マクロ)アクションマクロの二種類のマクロがあります。
マクロの質問をする際はどちらのマクロについて聞きたいのか書いてください。
※書いてない場合は返信は行いませんのでご了承下さい

返信について
返信はすべて最新バージョンの内容で書きます。
古いバージョンをご使用の方は事前に最新版へアップデートしてください。


よくある質問
Q.他のアプリの入力で各種割り当て(マクロ等)を実行したい
初期設定では利便性を考慮してアプリからのキー入力によってキー割り当てやマクロ割り当てなどが実行されないようロックされています。
このロックを解除するには割り当て設定(キー/マウス)の上部にある南京錠のアイコンから入力イベントのロックを解除すると実行できるようになります。

Q.特定のゲームにおいてマクロやキー入力が正常に動かない(他のアプリでは動く)
考えられること:
アプリで実行が許可されていない
環境設定からアプリの実行が許可されているか確認してください

ゲームのセキュリティがキーの入力をブロックしている
この場合、申し訳ないですが対処方法はありません

KeyToKeyが行うキーの入力監視自体をブロックしている
環境設定からフックを無効にしたら実行できる可能性があります。

ここのコメント欄に「ゲームで動かない、実行できない」等のコメントを書かれても残念ながら殆どの場合何も出来ません。
特にオンラインゲームやソーシャルゲーム等はセキュリティプログラムの関係でキー入力のシミュレーションやキーボード/マウスフックなどの処理がブロックされることが多いからです。
ウイルスとして検知された場合
お使いのアンチウイルスソフトでKeyToKeyをホワイトリストに追加してください。
「Microsoft Defender」の場合は「Windows セキュリティの設定」を開き、「現在の脅威」の検知した項目を「デバイスで許可」に設定し、「操作の開始」を行ってください。

「現在の脅威」に項目表示がない場合

現在の脅威」にある「保護の履歴」をクリックしてください。
次に「脅威がブロックされました」もしくは「脅威が検疫されました」を開いて「操作」>「復元」を行ってください。

フォルダを検知対象外にする

ウイルスと脅威の防止」に戻り「ウイルスと脅威の防止の設定」にある「設定の管理」をクリックし「除外」の「除外の追加または削除」からフォルダの除外を行ってください。

defender
連絡先
■メールアドレス
dev.key2key@gmail.com




 コメント一覧 (290)

      • 191.  key0x2key 開発者
      • 2022年07月15日 21:26
      • >>190
        「テンプレートマッチング:範囲<指定>」は一度に複数の設定に対して範囲を設定することはできません。
        Aと同様の処理をBCDEに設定する必要があります。
        「どれか一つにマッチしたら」ということでしたら以下のように複数の「TemplateMatching.TryMatch(es)(識別キー) == True」を「||」で区切ればOKです。

        [
        {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"A\"","309","1000","39","74"]},
        {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"B\"","309","1000","39","74"]},
        {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"C\"","309","1000","39","74"]},
        {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"D\"","309","1000","39","74"]},
        {"IsDisabled":false,"Name":"@If","Arguments":["TemplateMatching.TryMatches(\"A\") == True || TemplateMatching.TryMatches(\"B\") == True || TemplateMatching.TryMatches(\"C\") == True || TemplateMatching.TryMatches(\"D\") == True"]},
        {"IsDisabled":false,"Name":"Tap","Arguments":["Keys.D1","100","100","True"]},
        {"IsDisabled":false,"Name":"@EndIf","Arguments":[]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 192. 名無しさん
      • 2022年07月16日 08:19
      • >>191
        助かりました、本当にありがとうございます。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 193. コードについての質問です
    • 2022年07月20日 14:19
    • コードについての質問です。
      4種類の画像を監視し、それが現れた瞬間にボタンを押すマクロを作っているのですが。
      パラレル処理したい際に、下記のコードで動きません。どのあたりが間違っているのでしょうか?


      var bounds = new Bounds(200, 700, 600, 20);

      Key.MouseLeftButton.Down(waitTime: 100);
      Key.MouseLeftButton.Up(waitTime: 100);

      while (true)
      {
      using var ss = Screenshot(bounds);

      Parallel.For(0, 4, i =>
      {
      if (i == 0)
      {
      if (Match("Ap_1", ss, out var Ap_1))
      {
      Console.WriteLine(Ap_1.Score);
      Console.WriteLine("Ap_1 Push!!!");
      Key.MouseLeftButton.Down(waitTime: 100);
      Key.MouseLeftButton.Up(waitTime: 100);
      }
      }
      if (i == 1)
      {
      if (Match("Ap_2", ss, out var Ap_2))
      {
      Console.WriteLine(Ap_2.Score);
      Console.WriteLine("Ap_2 Push!!!");
      Key.MouseLeftButton.Down(waitTime: 100);
      Key.MouseLeftButton.Up(waitTime: 100);
      }
      }
      if (i == 2)
      {
      if (Match("Ap_3", ss, out var Ap_3))
      {
      Console.WriteLine(Ap_3.Score);
      Console.WriteLine("Ap_3 Push!!!");
      Key.MouseLeftButton.Down(waitTime: 100);
      Key.MouseLeftButton.Up(waitTime: 100);
      }
      }
      if (i == 3)
      {
      if (Match("Ap_4", ss, out var Ap_4))
      {
      Console.WriteLine(Ap_4.Score);
      Console.WriteLine("Ap_4 Push!!!");
      Key.MouseLeftButton.Down(waitTime: 100);
      Key.MouseLeftButton.Up(waitTime: 100);
      }
      }
      });
      }
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 194.  key0x2key 開発者
      • 2022年07月20日 16:06
      • >>193
        こちらでParallel.Forで画像認識を試してみたのですが、Bitmapを指定した場合に並列処理時の画像処理に関する例外が発生するのを確認したのでParallel.Forを使用するのは避けていただき直列処理を行うようお願いします。
        それでも動かない場合は画像認識の設定が正しく設定さているか以下の点について確認してみてください。

        ・画像認識の設定でテストを行った場合正常に認識できているかどうか(テストは座標と範囲を設定する必要があるので注意してください。また認識できない場合はスコアの調整をしてみてください)
        ・識別キーが正しく設定さているかどうか
        ・コンソールに画像認識の設定に関するエラーが出ていないかどうか
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 195. コードについての質問です
      • 2022年07月20日 16:54
      • >>194
        画像認識の設定は正しく出来ていると思います。
        スコアは0.993~1のあたりで認識しています。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 199. 名無しさん
      • 2022年07月21日 21:51
      • >>195
        並列化に関してですが、

        using var ss = Screenshot(bounds);
        の代わりに、

        using var ss1 = Screenshot(bounds);
        using var ss2 = (System.Drawing.Bitmap)ss1.Clone();
        using var ss3 = (System.Drawing.Bitmap)ss1.Clone();
        using var ss4 = (System.Drawing.Bitmap)ss1.Clone();
        と書いて、各々が別の ss を参照するようにすると、Match()の並列化が可能のようです。
        この Clone() そのものも少し工夫すれば並列化できますが、素直に直列処理で Clone() した方が圧倒的に速かったので直列処理をお勧めします。

        ただ、こちらの手元では、
        Match("Ap_1", ss, out var Ap_1);
        が動かないので、動作のテストもMatch()の並列化による速度の計測も出来ていません。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 210. 名無しさん
      • 2022年07月23日 00:02
      • >>199
        Parallel.Forの画像認識の速度計測をしました。
        手元のPCで、テンプレート画像の大きさ 26x22、探索範囲の大きさ 600x22 という条件で、
        4認識の直列が平均 3.7ms
        4認識の並列が平均 1.8ms(ss.Clone()の実行時間を含む)
        となりました。
        Screenshot(); の実行時間は除いています。60Hzの描画タイミングとの兼ね合いで実行時間が大きく変わるためです。

        必要であれば、
        ・元のC#スクリプトに Clone()を足し込んで動くようになったC#スクリプト
        ・今回の4直列4並列を計時したC#スクリプト
        いずれも投稿可能です。お声がけ下さい。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 232. コードについての質問です
      • 2022年07月31日 17:19
      • >>210

        ご返信が遅くなりました。
        並列化のサンプル、ぜひ見せて頂きたいのでどうぞよろしくお願いいたします。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 233. 名無しさん
      • 2022年07月31日 21:14
      • >>232
        以下になります。
        using Bitmap=System.Drawing.Bitmap;//必ずマクロの先頭に書く

        var bounds = new Bounds(200, 700, 600, 22);

        var keyList=new[]{
        "Ap_1",
        "Ap_2",
        "Ap_3",
        "Ap_4",
        };

        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);

        while(true){
        //ループ毎にキャプチャする
        using var ss0=Screenshot(keyList[0],bounds);
        //並列処理の前準備としてssをClone()する
        using var ss1=(Bitmap)ss0.Clone();
        using var ss2=(Bitmap)ss0.Clone();
        using var ss3=(Bitmap)ss0.Clone();
        //ssを配列で呼べるようにする
        var ss=new[]{ss0,ss1,ss2,ss3};
        // resultを分ける場合の一例
        //var resultList=new MatchResult[4];
        // resultを分ける場合の一例
        //MatchResult[] resultList=new MatchResult[4];
        //並列処理
        Parallel.For(0,4,i=>{
        // 共通項をまとめた記述例
        if(Match(keyList[i],ss[i],out var result)){
        Console.WriteLine(result.Score);
        Console.WriteLine($"{keyList[i]} Push!!!");
        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);
        }
        // iの値によって処理ががらっと変わる場合の記述例
        /*
        switch(i){
        case 0:
        if(Match(keyList[i],ss[i],out var result)){
        Console.WriteLine(result.Score);
        Console.WriteLine($"{keyList[i]} Push!!!");
        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);
        }
        break;
        case 1:
        if(Match(keyList[i],ss[i],out var result)){
        Console.WriteLine(result.Score);
        Console.WriteLine($"{keyList[i]} Push!!!");
        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);
        }
        break;
        case 2:
        if(Match(keyList[i],ss[i],out var result)){
        Console.WriteLine(result.Score);
        Console.WriteLine($"{keyList[i]} Push!!!");
        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);
        }
        break;
        case 3:
        if(Match(keyList[i],ss[i],out var result)){
        Console.WriteLine(result.Score);
        Console.WriteLine($"{keyList[i]} Push!!!");
        Key.MouseLeftButton.Down(waitTime: 100);
        Key.MouseLeftButton.Up(waitTime: 100);
        }
        break;
        }
        */
        });
        }
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 234. 名無しさん
      • 2022年07月31日 21:32
      • >>233
        なお、このコードは現在の最新版である Ver.2022/07/08 では動きませんでした。
        (現象は、1回目の起動では例外を吐く、2回目以降は全画像認識の結果が常にScore=0.000になる、、、です)
        手元の環境が原因で動かないのか、全員もれなく動かないのか不明です。余裕があれば動くかどうか教えていただければ幸いです。
        もし最新版で動かなかった場合は、
        https://keytokey-dev.net/archives/33457790.html
        のページにあるプレビュー版では動くと思います。こちらで動作確認などをしています。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 198. 名無しさん
      • 2022年07月21日 21:41
      • >>194
        Match(key, ss, out var result);
        に関して Ver.2022/06/21 以来機能していないように思います。【100%起動】でも【150%起動】でも共通して機能していません。
        Ver.2022/05/25以前は機能していました。
        (こちら、https://keytokey-dev.net/archives/32198998.html#comment-59 にて軽く触れております。)

        Match(templateBitmap, threshold, bounds, out var result);
        の使用で回避できますが、他の人に使ってもらうには煩雑です。
        環境の問題、設定の問題、なども考えらえますが、軽く調査していただけると助かります。

        「機能しない」の具体的な内容ですが、以下のスクリプトの出力が常に 0,0 0.0000 となります。

        {
        var ssBounds=new Bounds(0,0, 1920,1080);
        using var ss=Screenshot(ssBounds);
        Match(identifier: "key1", sourceImage: ss,out var result);
        Console.WriteLine($"{result.X},{result.Y} {result.Score:F4}");
        }
        // Key1 には 32x32程度のテンプレート画像と、0,0, 1920,1080の認識範囲を指定しています。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 203.  key0x2key 開発者
      • 2022年07月22日 07:05
      • >>198
        バージョン220722を以下のページにアップロードしました。
        https://keytokey-dev.net/archives/33457790.html

        新しいScreenshot()のオーバーロードを追加しました。
        このオーバーロードではテンプレート画像と同じフォーマットでBitmapを取得できるようになります。

        以下の処理を変えてみてください。
        using var ss = Screenshot(ssBounds);

        using var ss = Screenshot("key1", ssBounds);
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 196. 名無しさん
    • 2022年07月21日 13:57
    • お世話になっております。
      KeyToKeyを最小化してる状態で マクロをON/OFFしてるのですが
      よく今ONなのかOFFなのか分からない時があります。
      マクロのステータス(ON/OFF)を画面左下などに小さく表示させる事は出来ますか?
      こんな感じです。
      https://imgur.com/WjXqwS0
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 197.  key0x2key 開発者
      • 2022年07月21日 17:30
      • >>196
        ステータスを表示できるのはメインウィンドウのみになります。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 202. 名無しさん
      • 2022年07月22日 01:27
      • >>197
        わかりました、質問に答えて頂きありがとうございます。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 200. 名無しさん
    • 2022年07月21日 22:48
    • いつもお世話になっております。

      アクションマクロで使用しています。
      アクションの中の「マクロを強制終了」について教えてほしいです。
      今「マクロを強制終了」をENTERボタンに割り振っています。
      あるマクロを実行中(およそ10秒くらいかかる)にENTERを押せば途中で終了できるアクションだと
      思っているのですが、終了できず最後までマクロを実行してしまいます。
      このアクションはどういった使い方・役割なのでしょうか?
      ご教示のほどよろしくお願いいたします。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 201. 名無しさん
      • 2022年07月21日 23:29
      • >>200
        まず、実行中のアクションマクロを停止させる一番楽な方法は、
        「トリガーを離したときに実行中のマクロを終了させる」
        を使う事だと思います。
        これですと指1本が取られっぱなしになってしまうので
        「トグルモード」
        と併用すれば
        一度短押しすると実行し、10秒までば普通に終了
        一度短押しして実行するが、10秒以内にもう一度短押しすればアクションマクロが停止
        となって使いやすくなります。

        また、その10秒くらいかかるアクションマクロを貼っていただければ、何かの力になれるかも知れません。

        「マクロを強制終了」ですが、これが書いてある自分自身のアクションマクロを抜ける役割があります。
        他の実行中のアクションマクロを強制終了させる事はできません。
        「マクロを強制終了」は、無限ループの内部や、アクションマクロの冒頭で、「@条件分岐」と組み合わせて使う事が多いです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 205. 名無しさん
      • 2022年07月22日 11:02
      • >>201
        ご回答ありがとうございます。
        「マクロを強制終了」はそういう役割なんですね。

        その10秒くらいかかるマクロは特に現在特定のものがあるわけではなく例えで出したものです。

        私がやりたいこととしてはあるマクロを実行中に(例えばトリガーをキーボードのAを押す)に
        別のボタンを押して(例えば今回の場合はENTERボタン)を押して実行中のマクロを終了させたいです。

        例えばいま実行するマクロをキーボードのAを押したら
        キーボードの1を押す 
        2秒たったらキーボードの2を押す 
        2秒たったらキーボードの3を押す ・・・・ を9が押されるまで繰り返すとして

        「@条件分岐」でENTERが押された場合「マクロを強制終了」を組み込めば良さそうだとご回答を
        いただいた上で思いついたのですが、ENTERを押すタイミングは決まってないので
        どうマクロを組んだらいいのかと悩んでおります。
        一番簡単なのは「他の実行中のマクロも含め強制終了する」というようなアクションがあればいいのですが
        代替できるようなものあるんでしょうか。
        何か良い案があれば教えていただけると幸いです。
        よろしくお願いいたします。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 207.  key0x2key 開発者
      • 2022年07月22日 19:15
      • >>205
        少し面倒な方法ですがグローバル変数を使用してみてはいかがでしょうか。
        以下のようにマクロ実行時にグローバル変数の値をTrueに設定し並列実行でEnterキーの入力を待機します。
        Enterキーが入力されたら変数の値はFalseに設定されます。
        [
        {"IsDisabled":false,"Name":"Global.Assign","Arguments":["$実行中","True"]},
        {"IsDisabled":false,"Name":"@Task","Arguments":[]},
        {"IsDisabled":false,"Name":"WaitForKeyInput1","Arguments":["Keys.Enter","True"]},
        {"IsDisabled":false,"Name":"Global.Assign","Arguments":["$実行中","False"]},
        {"IsDisabled":false,"Name":"@EndTask","Arguments":[]}
        ]

        随所に以下のアクションを挟むことで変数の値がFalseだった場合にマクロが終了するようになります。
        [
        {"IsDisabled":false,"Name":"@If","Arguments":["$実行中 == False"]},
        {"IsDisabled":false,"Name":"Macro.ForceQuit","Arguments":[]},
        {"IsDisabled":false,"Name":"@EndIf","Arguments":[]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 208.  key0x2key 開発者
      • 2022年07月22日 20:08
      • >>207
        追記:
        220722(プレビュー版)であれば以下のアクションだけで終了できます。
        ※プレビュー版を使用する際はこれまで使用していたKeyToKeyのフォルダは削除しないでください。

        [
        {"IsDisabled":false,"Name":"@Task","Arguments":[]},
        {"IsDisabled":false,"Name":"WaitForKeyInput1","Arguments":["Keys.Enter","True"]},
        {"IsDisabled":false,"Name":"Macro.Abort","Arguments":[]},
        {"IsDisabled":false,"Name":"@EndTask","Arguments":[]}
        ]

        ■プレビュー版
        https://keytokey-dev.net/archives/33457790.html
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 218. 名無しさん
      • 2022年07月24日 20:06
      • >>208
        今後新しい機能として追加してくださるという感じですかね
        ありがとうございます!
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 211. 名無しさん
      • 2022年07月23日 21:14
      • >>207
        ありがとうございます。

        確かにちょっと面倒そうですがこれでやってみます!!
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 204. 名無しさん
    • 2022年07月22日 10:13
    • いつもお世話になっております。

      アクションマクロを使用しています。
      RButtonを押したら画像認識、Trueなら1キーを押す。
      Qキーを押したら画像認識、Trueなら2キーを押す。
      というマクロを作りたいのですが上手く組めませんでした。

      ぜひ教えていただけると幸いです。

      [
      {"IsDisabled":false,"Name":"//","Arguments":["RButtonを押したら画像認識、1キーを押す"]},
      {"IsDisabled":false,"Name":"@Task","Arguments":[]},
      {"IsDisabled":false,"Name":"@While","Arguments":["True"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["True"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["TemplateMatching.TryMatches(\"A\") == True || TemplateMatching.TryMatches(\"B) == True"]},
      {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"C\"","613","1100","150","150"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["TemplateMatching.TryMatches(\"C\") == True"]},
      {"IsDisabled":false,"Name":"Tap","Arguments":["Keys.D1","100","10000","True"]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndWhile","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndTask","Arguments":[]},
      {"IsDisabled":false,"Name":"//","Arguments":["Qキーを押したら画像認識、2キーを押す"]},
      {"IsDisabled":false,"Name":"@While","Arguments":["True"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["True"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["TemplateMatching.TryMatches(\"A\") == True || TemplateMatching.TryMatches(\"B\") == True"]},
      {"IsDisabled":false,"Name":"TemplateMatch.SetBounds","Arguments":["\"D\"","895","1100","150","150"]},
      {"IsDisabled":false,"Name":"@If","Arguments":["TemplateMatching.TryMatches(\"D\") == True"]},
      {"IsDisabled":false,"Name":"Tap","Arguments":["Keys.D2","100","10000","True"]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndIf","Arguments":[]},
      {"IsDisabled":false,"Name":"@EndWhile","Arguments":[]}
      ]
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 206.  key0x2key 開発者
      • 2022年07月22日 19:14
      • >>204
        5行目、12行目、を「待機<キー入力1>」に変えてマウスの右ボタンやQキーが押されるのを待機できるようにします。
        17行目、23行目の「@条件分岐<終了>」は削除してもOKです。
        「テンプレートマッチング:範囲<指定>」が2つありますがこれは毎回実行する必要はないので「並列実行」より前の方において良さそうです。
        あと8行目の「"B」は「"B"」なのでタイプミスには注意しましょう。

        https://gist.github.com/x0oey6B8/195a2b6c73dab03fbb3034778aef71f9
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 209. 名無しさん
      • 2022年07月22日 23:37
      • >>206
        助かりました、タイプミスにまで本当にありがとうございます。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 212. 名無しさん
    • 2022年07月24日 12:59
    • 素晴らしいソフトのご提供ありがとうございます。
      いつもお世話になっております。
      最近ソフトの調子が悪いです。プロファイルを切り替えるとソフト自体が固まってクラッシュします。(強制終了)
      イマイチ何が原因かわからず困っています。
      どのバージョンにダウングレードしても解決しません。
      クラッシュするタイミングは確認できる限り、プロファイル変更の時と設定画面の右上のプロファイルを変更したときです。
      一からダウンロードし直して初期の状態に戻してもだめでした。(再現のため、プロファイルのみ新規作成)
      解決方法などあれば教えて頂けると幸いです
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 213.  key0x2key 開発者
      • 2022年07月24日 13:39
      • >>212
        強制終了するのは特定のプロファイルですか?それともすべてのプロファイルで発生しますか?
        もし特定のプロファイルで発生するのでしたら、そのプロファイルの設定ファイル(Profilesフォルダにあります)を下記のメールアドレスまで送ってください。
        またKeyToKeyのフォルダにLog.txtがあれば、それも一緒に送ってください。

        ■メールアドレス
        dev.key2key@gmail.com
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 214. 名無しさん
    • 2022年07月24日 13:45
    • 特定のプロファイルではございません。その場合でもlog.txtを送った方がいいですか?
      ↓以下情報追記です。↓
      プロファイル選択時にやたら重くなります。マウスの挙動がラグくなる感じです。
      また、プロファイル自動切り替え機能を使用しても同じくクラッシュします。
      一から作り直すと最初はちょっと重いくらいなのですがマクロを追加するにつれ徐々に重くなって最終的にクラッシュします。
      明らかに以前より少ないマクロ数で落ちます。※PCスペックは足りてます。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 215.  key0x2key 開発者
      • 2022年07月24日 13:47
      • >>214
        はいお願いします。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 216. 名無しさん
      • 2022年07月24日 15:39
      • >>215
        送らせていただきました。ご確認お願いいたします
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 217.  key0x2key 開発者
      • 2022年07月24日 17:00
      • >>216
        ありがとうございます。
        メールの方に返信を書きましたのでご確認いただければと思います。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 219. 名無しさん
    • 2022年07月25日 23:53
    • 質問になります。

      var _ = Task.Run(()=>{
      while(true){
      Tap(Keys.Space,50,50);
      }
      });
      とだけ書いたC#スクリプト(マクロ)を実行した場合、
      1.ほぼ瞬時にスクリプトは終了する
      2.しかし生成したタスクは動き続ける
      3.動いているが、そのタスクは行方不明になって他のマクロから触ることができない存在になる
      4.他のプロファイルを読み込んでも、ホットキーなどでプロファイルを無効にしても、タスクは動き続ける
      5.KeyToKeyを停止(つまりプロセスを停止)すると、タスクも停止する
      という理解でよろしいでしょうか?

      CancellationToken を使用するのが一般的な終了方法とのことですが、もしKeyToKeyの枠で何か便利な技があれば教えてください。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 220.  key0x2key 開発者
      • 2022年07月26日 18:57
      • >>219
        その理解でOKです。
        現状はDisposingイベントとCancellationToken/Sourceもしくはフラグ変数を組み合わせて終了処理を行うのがベストかと思います。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 221. 名無しさん
      • 2022年07月26日 21:59
      • >>220
        回答いただきありがとうございます。
        無意識に、主スレッドが止まったときに副タスクが全て止まると思っていたので危なかったです。
        タイプ量が少なくて済む、フラグ変数で終了処理しようかと思います。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 222. 名無しさん
    • 2022年07月28日 15:31
    • いつもお世話になっております。
      初歩的な質問です。
      アクションマクロを実行中マウスの操作を完全に奪うことはできませんか?
      アクションマクロにマウスの処理がある場合、自分がマウスに触れてしまうとマウスの処理にズレが生じてしまうため
      マクロ処理中は全く自分で操作ができないようにしたいです。また、マクロ内にマウスの処理がなくても同様に自ら操作できないようにしたい時もあるのでそういった方法があれば教えてください!お願いします!
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 223.  key0x2key 開発者
      • 2022年07月28日 21:29
      • >>222
        アクションマクロだけではマウスの入力を停止させることはできないのでC#スクリプトを使用した方法を解説します(アクションから入力を停止できるようにします)

        まず入力を停止させるための拡張スクリプトを使ったマクロを作成します。
        「マクロの作成・設定」で拡張スクリプト用ファイルの「__extension.csx」に以下のページの「extension.csx」の内容を新しい行にコピペしてCtrl+Sで保存します。
        https://gist.github.com/x0oey6B8/5fd1325129ddf1a2b57e10d71f4cb68c

        ※拡張スクリプトの「__extension.csx」の場所について
        https://github.com/x0oey6B8/KeyToKey-Web/wiki/拡張スクリプト#スクリプトを書く場所

        「環境設定」へ移動し、「入力の監視方法」にある「マウス」の設定を「フック」に変更します。
        続いて「環境設定」の「スタートアップマクロ」の「マクロを追加」から「マウスの入力をブロック」を選択します。
        追加された項目の設定で「KeyToKeyの有効無効」のチェックを外します。
        これで入力停止の準備完了です。

        入力を停止するときはグローバル変数である「$マウスブロック」の値を「True」に設定すると入力が停止されるようになります。
        逆に値を「False」に設定することで入力停止が解除されます。

        以下のページの「action.json」にアクションで停止させる方法のサンプルを載せています。
        内容をコピーしてアクションに貼り付けてください。
        https://gist.github.com/x0oey6B8/5fd1325129ddf1a2b57e10d71f4cb68c

        なおプロファイルが無効になった場合は入力停止は機能しなくなるようにしたので有効無効を切り替えるショートカットを忘れずに設定してください。
        https://github.com/x0oey6B8/KeyToKey-Web/wiki/ショートカットを設定する
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 230. 名無しさん
      • 2022年07月29日 05:30
      • >>223
        ありがとうございました!
        高度すぎて理解できませんでしたが説明通り作成したらできました!
        理解できるように頑張って勉強します!
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 224. 名無しさん
    • 2022年07月28日 22:44
    • いつもお世話になっております。

      アクションマクロでやっております。

      トリガーを押すと
      まずテンキーの1が押されその後すぐに画像認識を開始します。
      画像Aが出るまで待機し画像Aを認識したらテンキー2を押すというマクロを作りたいです。
      下記のように作りました。

      [
      {"IsDisabled": false,"Name": "Keyboard.Tap","Arguments": ["Keys.NumPad1","100","0","True"]},
      {"IsDisabled": false,"Name": "@While","Arguments": ["TemplateMatching.TryMatch(\"画像A\")== False)"]},
      {"IsDisabled": false,"Name": "@EndWhile","Arguments": []},
      {"IsDisabled": false,"Name": "Keyboard.Tap","Arguments": ["Keys.NumPad2","100","0","True"]}
      ]

      このマクロだと画像Aが出るまで延々とループすることになりますが
      そのループに時間を設けたいです。
      10秒間だけループしたい場合どのようにすればいいでしょうか?
      ご教授のほどよろしくお願いいたします。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 225. 名無しさん
      • 2022年07月28日 23:02
      • >>224
        書き忘れたので追記します。
        そのループを回数で区切る方法も知りたいのです。
        その場合は@ループ〈回数〉を使用するのだと思うのですが
        それだと条件式を入れられないのでやり方がわからず悩んでおります。
        こちらも併せて教えていただけると幸いです。
        よろしくお願いいたします。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 227.  key0x2key 開発者
      • 2022年07月29日 00:48
      • >>225
        時間の経過を計測するには「ElapsedTime」メソッドを使用して計測します。
        ElapsedTime()はKeyToKeyが起動してからの時間をミリ秒単位の値で取得します。
        時間の計測を開始したいタイミングでElapsedTime()を実行し結果を変数へと代入しておきます。
        ループ内で再度ElapsedTime()を実行しその結果を変数で引き算することで経過した時間を計ることができます。
        今回の条件式は「画像が見つからなかった場合、かつ、10秒"以内"」にループするので式は以下のようになります。
        式:TemplateMatching.TryMatch("画像A") == False && (ElapsedTime() - $開始時間) <= 10000

        [
        {"IsDisabled":false,"Name":"Keyboard.Tap","Arguments":["Keys.NumPad1","100","0","True"]},
        {"IsDisabled":false,"Name":"Local.Assign","Arguments":["$開始時間","ElapsedTime()"]},
        {"IsDisabled":false,"Name":"@While","Arguments":["TemplateMatching.TryMatch(\"画像A\") == False && (ElapsedTime() - $開始時間) <= 10000"]},
        {"IsDisabled":false,"Name":"@EndWhile","Arguments":[]},
        {"IsDisabled":false,"Name":"Keyboard.Tap","Arguments":["Keys.NumPad2","100","0","True"]}
        ]

        ループの部分は以下のようにしてもいいかもしれません。

        [
        {"IsDisabled":false,"Name":"@While","Arguments":["True"]},
        {"IsDisabled":false,"Name":"Local.Assign","Arguments":["$画像が見つかった","TemplateMatching.TryMatch(\"画像A\")"]},
        {"IsDisabled":false,"Name":"Local.Assign","Arguments":["$10秒過ぎた","(ElapsedTime() - $開始時間) >= 10000"]},
        {"IsDisabled":false,"Name":"@Break","Arguments":["$画像が見つかった || $10秒過ぎた"]},
        {"IsDisabled":false,"Name":"@EndWhile","Arguments":[]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 228.  key0x2key 開発者
      • 2022年07月29日 00:49
      • >>227
        ループ回数で区切るのはループ外に変数を一つ用意し0を代入しておきます。
        ループ毎に変数の値を1つ増やします。
        ループの条件式に「$変数 < ループさせたい数」のように指定すればOKです。

        [
        {"IsDisabled":false,"Name":"Local.Assign","Arguments":["$カウント","0"]},
        {"IsDisabled":false,"Name":"@While","Arguments":["$カウント < 9"]},
        {"IsDisabled":false,"Name":"Local.Assign","Arguments":["$カウント","$カウント + 1"]},
        {"IsDisabled":false,"Name":"@EndWhile","Arguments":[]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 226. 名無しさん
      • 2022年07月29日 00:10
      • >>224 , 225

        10秒制限はこんな感じになりそうです。
        [
        {"Name":"Local.Assign","Arguments":["$終了時間","GetTickCount()+10000"]},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad1","100"]},
        {"Name":"@While","Arguments":["TemplateMatching.TryMatch(\"画像A\")== False)"]},
        {"Name":"@Break","Arguments":["GetTickCount()>$終了時間"]},
        {"Name":"@EndWhile"},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad2","100"]},
        ]

        回数の方はこうしてみました。
        [
        {"Name":"Local.Assign","Arguments":["$終了時間","GetTickCount()+10000"]},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad1","100"]},
        {"Name":"@EasyFor","Arguments":["200"]},
        {"Name":"@Break","Arguments":["TemplateMatching.TryMatch(\"画像A\")"]},
        {"Name":"@Break","Arguments":["GetTickCount()>$終了時間"]},
        {"Name":"@EndFor"},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad2","100"]},
        ]

        何か条件式 == true
        と書くところを
        何か条件式
        と簡易的に書いているところに気を付けて読んでください。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 229. 名無しさん
      • 2022年07月29日 01:05
      • >>226
        開発者さんといろいろ被ってしまってすみません。 >質問者さん、開発者さん

        以下は、タイムアウトした場合に テンキーの2 を押さないバージョンです。
        [
        {"Name":"Local.Assign","Arguments":["$終了時間","GetTickCount()+10000"]},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad1","100"]},
        {"Name":"@While","Arguments":["TemplateMatching.TryMatch(\"画像A\")== False)"]},
        {"Name":"@If","Arguments":["GetTickCount()>$終了時間"]},
        {"Name":"Macro.ForceQuit"},
        {"Name":"@EndIf"},
        {"Name":"@EndWhile"},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad2","100"]},
        ]
        [
        {"Name":"Local.Assign","Arguments":["$終了時間","GetTickCount()+10000"]},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad1","100"]},
        {"Name":"@EasyFor","Arguments":["200"]},
        {"Name":"@Break","Arguments":["TemplateMatching.TryMatch(\"画像A\")"]},
        {"Name":"@If","Arguments":["GetTickCount()>$終了時間"]},
        {"Name":"Macro.ForceQuit"},
        {"Name":"@EndIf"},
        {"Name":"@EndFor"},
        {"Name":"Keyboard.Tap","Arguments":["Keys.NumPad2","100"]},
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 231. 名無しさん
      • 2022年07月30日 11:06
      • >>229
        望んでた通りのことができました!
        お二人とも誠にありがとうございました。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 235. 名無しさん
    • 2022年08月03日 19:52
    • 素晴らしいソフトのご提供ありがとうございます。
      いつもお世話になっております。

      keytokeyからアプリ起動を以下の方法で行っています。
      問題点がありアプリによっては機能が制限された状態で起動されます。解決策があれば教えてください
      [起動方法]
      一つ目:C#スクリプト➡System.Diagnostics.Process.Start(パス)
      二つ目:アクションスクリプト➡プロセスを起動➡プロセス名にパスを指定

      [制限された機能]
      動画や画像がドラッグ&ドロップできない

      C#スクリプトに関しては本当に無知です。管理者として実行することができればフルで機能が使えるのでしょうか?
      そうであればやり方教えてほしいです!
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 236. 名無しさん
      • 2022年08月03日 21:41
      • >>235
        確かにドラッグドロップできなくなるアプリがありますね。
        chrome や paint.net などが該当しました。cmd.exeやbatファイル経由でもこの性質が引き継がれるようです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 237.  key0x2key 開発者
      • 2022年08月03日 22:41
      • >>235
        管理者権限についてはKeyToKey自体が管理者権限で動作しているのでProcess.Startで起動するアプリも管理者権限で実行されていると思います。
        chromeのようなアプリに関してはむしろ管理者権限で起動するとドラッグ&ドロップができないようです(セキュリティの問題でしょうか)

        KeyToKey/C#で管理者権限無しで実行する方法がわからないので少しトリッキーですがWindows標準搭載の「タスクスケジューラ」とKeyToKeyを使用して管理者権限なしで実行する方法を紹介します。

        まずタスクスケジューラにタスクを以下の手順で作成します。
        1.タスクスケジューラを起動します。
        2.右側の「操作」から「タスクの作成」をクリックします。
        3.「全般」タブの「名前」にわかりやすい名前を指定します(この名前は後で使用します)
        4.「操作」タブに移り、「新規」ボタンから「プログラム/スクリプト」に起動するアプリのパスを指定します。
        5.必要であれば「引数の追加」や「開始(作業用ディレクトリ)」を指定します。
        6.指定できたら「OK」ボタンを押します。
        6.「タスクの作成」ウィンドウで「OK」ボタンを押してタスクの作成を完了します。

        次にKeyToKey側でC#スクリプトを作成し下記のコードを貼り付けてください。
        「ここに作成したタスクの名前を指定してください」の部分を(手順3で)自分が指定したタスクの名前に置き換えてください。
        後はスクリプトを実行すれば少し起動は遅いですが管理者権限なしでアプリが起動してくれると思います。

        {
        var taskName = "ここに作成したタスクの名前を指定してください";
        var fileName = "powershell.exe";
        var arguments = $"Start-ScheduledTask -TaskName \"{taskName}\"";
        var psi = new ProcessStartInfo(fileName, arguments)
        {
        UseShellExecute = false,
        CreateNoWindow = true
        };
        using var process = Process.Start(psi);
        }
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 238. 名無しさん
    • 2022年08月05日 16:37
    • 質問です。スイッチのジョイコンをkeytokeyにつなぐとスティックが十字キーとして認識されるのでそのキーにマウス移動を割り当てているのですがたまにとても移動が遅くなります。どうしたらいいでしょうか?

      マウスカーソルを早退座標へ移動〈アニメーション〉(何か,何か,50,1,true,true)

      何かに移動させる数値が入ります。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 239.  key0x2key 開発者
      • 2022年08月06日 02:52
      • >>238
        アクションリストの一番上に「高精度/高負荷な待機処理を使用」アクションを追加し、値をTrueに設定してみてください。

        [
        {"IsDisabled":false,"Name":"UseHighPrecisionWait","Arguments":["True"]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 240. 名無しさん
      • 2022年08月06日 14:48
      • >>239
        ありがとうございます。できました
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 241. 名無しさん
      • 2022年08月07日 18:31
      • >>239
        ところでジョイコンのスティックをスティックとして読み込ませる方法はありますか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 242. 名無しさん
      • 2022年08月07日 21:00
      • >>241
        joycon-driver
        vJoy driver
        の2つを組み合わせる方法が一般的なようです。
        試したところアナログスティックとジャイロをKeyToKey経由でも読むことができました。
        joycon-driver の自動アップデートが上手く動いておらず、立ち上げるたびに確認窓が2枚出てきますが、それ以外はなんとかなりそうです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 243. 名無しさん
      • 2022年08月08日 07:06
      • >>242
        ありがとうございます。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 244. 名無しさん
      • 2022年08月08日 07:40
      • >>242https://github.com/fossephate/JoyCon-Driverとhttps://sourceforge.net/projects/vjoystick/これであってますか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 245. 名無しさん
      • 2022年08月08日 20:42
      • >>244
        その通りです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 246. 名無しさん
    • 2022年08月09日 16:22
    • いつもお世話になっています。
      コントローラーの認識についての質問です。

      ゲームやJoyToKeyなどのソフトでXinputとして認識されているコントローラーが、
      KeyToKeyで検出された際にDirectInputになってしまいます。

      十字キーとボタン12個(A B X Y LB(L1) RB(R1) LT RT LeftStickPush RightStickPush Start Select)
      それに加え、拡張ボタンを2つ。

      以前のバージョンではこれらのボタンがKeyToKeyで割り当てできていたのですが、
      Windows11環境にしたタイミングでこれが出来なくなってしまいました。
      (PCも変えたので何が原因か今のところ特定ができていません)

      以前も、コントローラーを接続するポートを変更した際に似たような現象があったのですが、
      KeyToKeyでのコントローラー認識のクセのようなものがありましたら、ご教授いただけると幸いです。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 247. 名無しさん
      • 2022年08月09日 21:13
      • >>246
        確認ですが、
        設定編集ウィンドウ→割り当て設定(コントローラー)→使用するコントローラーを選択する
        の中の XInput Device 0~3のどこにも物理XInput Deviceが接続されていない状況ですか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 249. 名無しさん
      • 2022年08月10日 02:28
      • >>247
        XInput Device の1~3は「接続が失敗しました」となっている状態ですが、
        XInput Device0は接続されています。
        それに加えて、目的のコントローラーのメーカー製品名が表示されています。

        XInput Device 0 でも十字キーや○☓△□は認識しますが、L1がLeftStickPushになってしまったり、
        拡張ボタンに使いたいボタンが使えない状態です。

        うまくいく時は、目的のコントローラーでキー設定をするだけで246の通りの14ボタンが使えます。
        出来ない時との明確な違いがなく、KeyToKeyバージョンの問題でもなさそうなのです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 251.  key0x2key 開発者
      • 2022年08月10日 07:39
      • >>249
        コントローラーにXInputモードとDirectInputモードを切り替えるスイッチみたいなのがあれば切り替えてみてください。


        >> XInput Device 0 でも十字キーや○☓△□は認識しますが、L1がLeftStickPushになってしまったり、拡張ボタンに使いたいボタンが使えない状態です。

        拡張ボタンを使用するにはXInputではくDirectInputコントローラー(メーカー製品名)を使用する必要があります。
        ですのでDirectInpu(メーカー製品名)を選択するのが無難だと思います。
        DirectInputはコントローラーは使用する前にセットアップを行う必要があるのでお忘れないようお願いします。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 259. 名無しさん
      • 2022年08月11日 17:50
      • >>251
        奇妙な現象が起きたので、詳しくご報告します。
        エラーが出ていたのは6ボタン式のコントローラーで、全面に [○] [☓] [△] [□] [R1] [R2] と付いているタイプのものです。
        (HORIのファイティングコマンダーなどのシリーズと同じ配置です)

        今まで拡張ボタンをXInputで認識していたというのは私の勘違いで、メーカー製のDirectInputで認識していたようです。
        (背面にPCとPS4を切り替えるスイッチがあり、PS4の方で繋いで使用していました)

        KeyToKeyの最新バージョンでのキーコンフィグをした際に、[LT] [RT] を設定する段階で前に進めなくなるエラーが出てしまっていたのですが、
        古いバージョンの220525でキーコンフィグしたところ、拡張ボタン二つを含む全てのキーを正常に設定できました。
        そこから自動アップデートで最新版に更新したところ、そのまま正常に使えている状態です。

        どこかのKeyToKeyバージョンアップのタイミングでコントローラーのセットアップ部分に変更があったのでしょうか?

        私の使用しているコントローラーで無事に最新環境に持ってこられましたので、
        引っ越し作業をすれば無事に使える状態になったのですが、
        この奇妙な現象について具体的なエラー報告が必要でしたら、もうすこし詳しく記述させていただくつもりです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 260.  key0x2key 開発者
      • 2022年08月11日 20:10
      • >>259
        トリガーの設定のエラー発生時、コンソールに何かメッセージは表示されますでしょうか?
        ※コンソールはメインウィンドウから表示できます。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 263. 名無しさん
      • 2022年08月11日 21:17
      • >>260
        トリガーが正しく働いているか確認をする箇所でエラーが起き、延々とループします。
        LTボタンは反応がなく、RTボタンを押すとGUI上のコントローラーのLTボタンが緑色に反応するのが確認でき、
        そこから、設定ウィンドウが左にスライドし、またトリガーが正しく働いているかを確認する設定ウィンドウになります。

        エラーログを以下に貼り付けますね。

        2022/08/11 21:10:33:
        {
        "ClassName": "System.IO.IOException",
        "Message": "別のプロセスで使用されているため、プロセスはファイル 'C:\\Users\\○○○○\\Downloads\\KeyToKey\\Controllers\\11001532-0000-0000-0000-504944564944.ccnfg' にアクセスできません。",
        "Data": null,
        "InnerException": null,
        "HelpURL": null,
        "StackTraceString": " 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n 場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)\r\n 場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)\r\n 場所 System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)\r\n 場所 System.IO.StreamReader..ctor(String path, Encoding encoding)\r\n 場所 KeyToKey.Configurations.ControllerSetting.GetSetting(Guid productGuid) 場所 C:\\Users\\root\\Source\\Repos\\KeyToKey\\KeyToKey\\Configurations\\ControllerSettings.cs:行 109",
        "RemoteStackTraceString": null,
        "RemoteStackIndex": 0,
        "ExceptionMethod": "8\nWinIOError\nmscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.IO.__Error\nVoid WinIOError(Int32, System.String)",
        "HResult": -2147024864,
        "Source": "mscorlib",
        "WatsonBuckets": null
        }
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 248. 名無しさん
    • 2022年08月10日 01:06
    • 設定方法についての質問です。キーボードの A を押すと初めに 一瞬 W が入力され、その後キーボードを離すまでAが押し続けられるようにしたいです。どうすればよいのでしょうか?
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 250.  key0x2key 開発者
      • 2022年08月10日 07:38
      • >>248
        「キー割り当て」で「W」を2つ割り当て、詳細設定を開いてください。
        1つ目の設定では「離す(フェーズ1)」を有効にし「押した後の待機時間」を「50」、「離した後の待機時間」を「200」に設定します。
        2つ目の設定では「押した後の待機時間」を「30」に設定します。
        「繰り返し」を有効にし「繰り返し区間」の「最初」を「2」に、「最後」を「2」に設定します。
        これでOKです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 252. 名無しさん
      • 2022年08月10日 13:12
      • >>250
        Wしか入力されないです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 253.  key0x2key 開発者
      • 2022年08月10日 14:00
      • >>252
        2つ目のキーはWではなくAですね。失礼しました。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 255. 名無しさん
      • 2022年08月10日 22:00
      • >>253こういう風にしたいです。
        Aを押す→Wは一瞬だけ、Aはキーボードを離すまで「長押し」状態になる。
        Aを押した際のWとAは同時で、Aは最初から「長押し」状態に入る。
        というマクロです。お手数をお掛けして申し訳ございません。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 257.  key0x2key 開発者
      • 2022年08月11日 09:40
      • >>255
        キーボードのAキーで実行するようですが、Aキーをキーボードで入力してからWキーを入力するだけではだめでしょうか?
        それでもいいのであれば、Wキーを割り当てて詳細設定で「離す(フェーズ1)」を有効にし、キー割り当ての設定で「トリガーの入力をキャンセルする」のチェックを外すだけでいいと思います。

        もしW→Aの順が必要なのであれば、キーボードによって押された状態になっているAキーを先に離す必要があります。
        つまり設定では「 A(離す) → W(押す/離す) → A(押す)」のように設定しなければなりません。
        A(離す)の設定は詳細設定で「押す(フェーズ1)」のチェックを外し、「離す(フェーズ1)」のチェックを入れるようにしてください。

        どちらの設定方法でも「繰り返し」の設定は必要ありません。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 258. 名無しさん
      • 2022年08月11日 11:52
      • >>257ありがとうございます
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 254. 名無しさん
    • 2022年08月10日 22:00
    • こういう風にしたいです。
      Aを押す→Wは一瞬だけ、Aはキーボードを離すまで「長押し」状態になる。
      Aを押した際のWとAは同時で、Aは最初から「長押し」状態に入る。
      というマクロです。お手数をお掛けして申し訳ございません。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 256. 名無しさん
      • 2022年08月10日 22:01
      • >>254
        ↑返信と間違ってしまいました。248です
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 261. 名無しさん
    • 2022年08月11日 21:09
    • 質問です、コントローラーにマウスのカーソルの設定をすると斜めに入力したとき違う方向にうごいてしまいます、どうしたらいいですか?
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 262.  key0x2key 開発者
      • 2022年08月11日 21:17
      • >>261
        コントローラーのセットアップを行ってみてください。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 264. 名無しさん
      • 2022年08月11日 22:15
      • >>262
        セットアップをしているのですが右上入力が左上、左下が右下になります。
        どうかお助けください
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 268.  key0x2key 開発者
      • 2022年08月12日 11:03
      • >>264
        割り当て設定(コントローラー)でスティックを動かしたときの表示は正常に動いていますか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 269. 名無しさん
      • 2022年08月12日 12:43
      • >>268
        正常に動いていましたが変な方向に動いています
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 270.  key0x2key 開発者
      • 2022年08月12日 13:27
      • >>269
        お手数ですがもう一度セットアップを行ってみてください。
        スティックの入力確認ページに移動するまでコントローラーからは手を離しておいてください
        スティックの入力確認ページになったらスティックの動きを確認します。
        動きがおかしい場合は「動いていない」をクリックします。
        スティックの設定ページへ移動するので、はじめにスティックを左か右へ傾けます。
        チェックがついたら、スティックを上か下に傾けます。
        スティックの入力確認ページに移動するのでスティックの動きを確認します。

        これでも動かない場合はわからないです。すみません。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 271. 名無しさん
      • 2022年08月12日 19:05
      • >>269
        4方向式と8方向式のどちらの設定を使っていますか?
        もし8方向をお使いなら、4方向を試してみて下さい。やや斜め移動が速くなりますが、違う方向に移動するなどの不具合は出ないと思います。
        もし4方向をお使いでも不具合が出る場合、マクロを使えば解決できそうです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 265. 名無しさん
    • 2022年08月12日 04:34
    • アクションマクロの「マウスカーソルを相対座標へ移動」で、横に50と入力しても70移動したり、100と入力しても151移動してしまいます。あと、実行した後ずらさないままもう一度実行すると移動する距離が変わります。どうすればいいのでしょうか?
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 266.  key0x2key 開発者
      • 2022年08月12日 10:07
      • >>265
        原因がわからないので調査します。
        解決するまでは「マウスカーソルを移動」アクションを使用してください。
        相対的な移動をするには以下のようにInput.GetCursorメソッドを組み合わせて使用してみてください。
        横の座標:「Input.GetCursorX() + 目的の座標」
        縦の座標:「Input.GetCursorY() + 目的の座標」
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 267.  key0x2key 開発者
      • 2022年08月12日 10:23
      • >>266
        マウス加速が原因かもしれません。
        Windowsのコントロールパネルから表示方法を「大きいアイコン」にして「マウス」を探してください。
        「ポインターオプション」タブの「ポインターの精度を高める」がオンになっていたらオフにしてみてください。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 272. 名無しさん
      • 2022年08月13日 01:24
      • >>267
        直りました!
        ありがとうございます
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 273. 名無しさん
    • 2022年08月14日 12:48
    • PCゲームをKeytokeyで動作させ、それをスマホからリモートでオンオフしたいのですが
      特定のキーやボタンを押してスタートではなく、メニュー画面のようなものを出し実行停止ボタンをクリックすることで制御することって可能でしょうか?
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 274. 名無しさん
      • 2022年08月14日 13:07
      • >>273
        確認になるのですが、
        >それをスマホからリモートでオンオフしたいのですが
        「それ」が指すものはKeyToKeyのプロファイル、KeyToKeyの有効無効と言う事でよろしいですか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 275. 名無しさん
      • 2022年08月14日 14:00
      • >>274
        はい、KeytoKeyの実行、停止を特定位置クリックで制御したいということです
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 276. 名無しさん
      • 2022年08月14日 14:44
      • >>275
        C#スクリプトを使って(恐らく)お望みに近い事が出来ました。

        1.何もしないプロファイルを新しく1つ作ります。ここではその何もしないプロファイルの名前を profile2 と名付けます。
        2.以下のC#スクリプトを保存します。方法: https://keytokey-dev.net/archives/32198975.html#comment-42
        3.2.のC#スクリプト中の altProfileNameの中身をご利用するメインのプロファイルの名前に書き換えて、スクリプトを保存します。保存すると編集エリア上方にあるマクロ名の左の「*」が消えるので必ず確認して下さい。
        4.環境設定(編集ウィンドウ左のアイコン列の上から6番目辺りです)で、保存したスクリプトを「スタートアップマクロ」に登録して下さい。
        5.メインのプロファイルを読み込んでください。
        6.編集ウィンドウを一旦閉じて開きなおすか、最上段メニューバーからメインのプロファイルを選択してください。
        7.2.と同様に新しくC#スクリプトを作って保存して下さい。
        8.4.と同様にスタートアップマクロに登録して下さい。

        これで、メッセージボックスの「OK」を押すごとにプロファイルの実行停止を(疑似的ですが)切り替えられました。

        using System.Windows.Forms;
        var altProfileName="profile2";
        MessageBox.Show($"{altProfileName}に切り替えます", "制御", MessageBoxButtons.OK);
        ChangeProfile(altProfileName);
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 278. 名無しさん
      • 2022年08月14日 15:14
      • >>276
        >KeytoKeyの実行、停止を特定位置クリックで制御したい

        流石に画面中央にメッセージボックスが表示されるのは邪魔だったので、特定位置を見張るマクロも試してみました。
        今度のマクロは画面の左上付近をクリックするだけで、プロファイルが切り替わります。
        (ただし、windowsのタスクバーやアイコンなど、優先順位が高いパーツがあるとそちらの反応が優先されました)

        また、https://keytokey-dev.net/archives/32198975.html#comment-42 は古いため直接表示するのが難しいようなので再掲しておきます。
        1.「マクロの作成/設定」画面までたどりついて下さい。
        2.左上のタブ「C#スクリプト(マクロ)を選択して下さい。(デフォルトだと初めから選択されているようです)
        3.その直下の「Scripts」をダブルクリックするか「>」をシングルクリックしてフォルダを展開表示して下さい。
        4.「お使いの設定ファイル名(現在選択中)」を右クリックして「新しいスクリプト」を選んでください。
        5.お好きな名前でスクリプトファイルを作成して下さい。ここでは例として「ChangeProfile.csx」にします。
        6.右側の広い編集エリア内部を1度シングルクリックしてフォーカスを移動させて下さい。
        7.以下のC#スクリプトをコピペした後に保存してください。マウスで保存するには右クリック→「コンパイルテスト」などの操作が必要です。キーボードで保存するにはCtrl-Sです。
        8.編集エリアの左上が「ChangeProfile.csx *」でなく、「ChangeProfile.csx」と、アスタリスクマーク「*」が表示されていない事を再度確認して下さい。アスタリスクがあると未保存です。

        var altProfileName="profile2";
        KeyStateChanged += (sender, e) =>{
        if(!e.IsPressed){
        return;
        }
        if(e.Key != Keys.LButton){
        return;
        }
        var(x, y) = GetCursorPosition();
        if( 0<x && x<100 && 0<y && y>100){
        ChangeProfile(altProfileName);
        }
        return;
        };
        // スクリプトがすぐに終了しないように待機します。
        Wait();
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 279. 名無しさん
      • 2022年08月14日 17:10
      • >>278
        ありがとうございます、C#触ったことないので勉強しつつ導入してみたいと思います
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 281. 名無しさん
      • 2022年08月14日 22:20
      • >>279
        修正があります。

        誤: if( 0<x && x<100 && 0<y && y>100){
        正: if( 0<x && x<100 && 0<y && y<100){

        「誤」の場合はと左上隅付近よりもやや下目で反応していたようです。どおりでタスクバーのあたりで反応しないはずです。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 277. 無知の塊
    • 2022年08月14日 15:08
    • こんにちは。
      このツールに大変お世話になっています。
      このソフトがないと私はタイピングなんてやってませんでした。
      さて、本題に入ります。
      入力マクロにつきまして、特定のキーを長押しによって数秒おきに実行するといった動作はできますでしょうか。
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 280.  key0x2key 開発者
      • 2022年08月14日 21:29
      • >>277
        ループを使うといいでしょう。
        以下のサンプルでは5秒おきに10回Aキーを入力します。
        [ から ] までをコピーしてアクションリストに貼り付けてください。
        ----------------------------------------------------------------------------
        [
        {"IsDisabled":false,"Name":"@EasyFor","Arguments":["10"]},
        {"IsDisabled":false,"Name":"Tap","Arguments":["Keys.A","10","10","True"]},
        {"IsDisabled":false,"Name":"WaitSeconds","Arguments":["5"]},
        {"IsDisabled":false,"Name":"@EndFor","Arguments":[]}
        ]
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 282. 名無しさん
    • 2022年08月15日 16:38
    • 「120秒間Wキーを押し続けて、Wキーを離し、53秒間クリックを連打する。」をまた同じキーが押されるまで繰り返すマクロの作り方を教えてください。m(_ _)m
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 283. 名無しさん
      • 2022年08月15日 20:16
      • >>282
        >現在のKeyToKeyにはC#スクリプト(マクロ)とアクションマクロの二種類のマクロがあります。
        >マクロの質問をする際はどちらのマクロについて聞きたいのか書いてください。
        と、あります。
        どちらが好みですか?

        参考に、アクションマクロの方が学習コストが低い=最初にとっつき易いです。その代わりちょっと不自由な場面もあります。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
    • 284. 名無しさん
    • 2022年08月15日 20:50
    • 質問です、最新バージョンにアップデートをすると編集ができなくなります、その他はしっかりと起動するのに編集だけ動きません、なので今は古いバージョンでしているのですが最新でも編集ができるようにしてください、機種はWindows11です
    • 0
      key0x2key

      key0x2key

      likedしました

      liked
      • 285.  key0x2key 開発者
      • 2022年08月15日 21:03
      • >>284
        メインウィンドウからコンソールを表示させてください。
        編集ウィンドウを起動したときにメッセージがでたらそれを教えてください。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 286. 名無しさん
      • 2022年08月15日 21:33
      • >>285
        まず編集ウィンドウが表示されずコンソールにも何も変化がないです
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 287.  key0x2key 開発者
      • 2022年08月15日 21:43
      • >>286
        再ダウンロードしてみたらどうなりますか?
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 288. 名無しさん
      • 2022年08月15日 21:48
      • >>287
        前に一度再ダウンロードしましたが、何も変わりませんでした
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 289.  key0x2key 開発者
      • 2022年08月15日 21:53
      • >>288
        KeyToKeyフォルダ内にあるApplicationConfig.confの名前を適当なものに変えて起動を試してみてください。
      • 0
        key0x2key

        key0x2key

        likedしました

        liked
      • 290. 名無しさん
      • 2022年08月15日 21:59
      • >>289
        どうさしました
        ありがとうございました

      • 0
        key0x2key

        key0x2key

        likedしました

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