2012-03-24 8 views
1

現在、指定された時間だけキーを押したままにしておくことをシミュレートしようとしています。コードは独自のスレッドで実行されるため、UIは中断されません。しかし、Sleep機能はまだホールドシーケンスを中断しています。私は実際にはSleepを使用したいと思っていましたが、キーを押し続けなければなりません。周りには道がありますか?指定された時間のキーの保持をシミュレートします

int delay = 2000; 

keybd_event(VK_W, 0, KEYEVENTF_EXTENDEDKEY, 0); 
System.Threading.Thread.Sleep(delay); 
keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0); 
System.Threading.Thread.Sleep(50); 

これはキーWを押したが、それはないすべては、それを押すと寝(それは何もしない)、および、それを解放されてシミュレートする必要があります。

答えて

-1

指定したミリ秒間キーダウンストロークを繰り返し送信したい場合は、これが機能する可能性がありますが、実際に何回押されたのか分かりません。未知の離散率で2000ミリ秒。

public void DoFor(Action action, int numMilliseconds) 
    { 
     DateTime start = DateTime.Now; 

     while (DateTime.Now.Subtract(start).TotalMilliseconds < numMilliseconds) 
     { 
      // Not sure - is this relevant on another thread? 
      Application.DoEvents(); 
      // Not sure if this is relevant either since you're on another thread 
      Thread.Sleep(1); 
      // Do your action 
      action(); 
     } 
    } 

そして、あなたはそうのようにそれを呼び出すことができます。

 DoFor(new Action(() => 
          { 
           keybd_event(VK_W, 0, KEYEVENTF_EXTENDEDKEY, 0); 
          }), 2000); 
     DoFor(new Action(() => 
          { 
           keybd_event(VK_W, 0, KEYEVENTF_KEYUP, 0); 
          }), 50); 
+0

私はゲーム上のマクロとしての私のプログラムの開発を使用して計画しています。 キーが何回描かれても問題はありません。キーを押すだけでキーを押すだけで、サーバー上でミュートされたり、蹴られたりすることがあります。キーを持っているようなキーダウンイベントをたくさん送信していますか?それとも、繰り返し起動されると、実際にはkeyupイベントを送信しますか? – HitomiTenshi

+0

私はあなたの方法を試しましたが、うまくいきません。これはコードをループしますが、 'Sleep'機能と同じ動作をします。奇妙な... – HitomiTenshi

+0

ああ申し訳ありませんが、私は間違いをした、動作するようです。私はそれがゲームでの保留としてカウントされますことを願っています。ご協力ありがとうございました。 ;) – HitomiTenshi

関連する問題