2016-06-22 9 views
-1

PostMessageに関する質問があります。私は、これは「kill_me」タイマーが刻々と過ぎているときは、15秒ごとにEnterキーを押す必要があり、互いC#PostMessage in timer

private void roll_spin_timer_Tick(object sender, EventArgs e) 
    { 
     foreach (Process P in processList) 
     { 
      if (P.ProcessName.Equals(processName)) 
      { 
       IntPtr edit = P.MainWindowHandle; 
       PostMessage(edit, WM_KEYDOWN, (IntPtr)Keys.R, (IntPtr)0); 
      } 
     } 
    } 

    private void kill_me_Tick(object sender, EventArgs e) 
    { 
     foreach (Process P in processList) 
     { 
      if (P.ProcessName.Equals(processName)) 
      { 
       IntPtr edit = P.MainWindowHandle; 
       PostMessage(edit, WM_KEYDOWN, (IntPtr)Keys.Enter, IntPtr.Zero); 
      } 
     } 

    } 


    #region Checkboxes 
    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 
     { 
      checkBox2.Enabled = false; 
      textBox2.Enabled = false; 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
     } 
     if (!checkBox1.Checked) 
     { 
      checkBox2.Enabled = true; 
      textBox2.Enabled = true; 
      roll_spin_timer.Stop(); 
     } 

    } 

      #region Checkboxes 
    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 
     { 
      checkBox2.Enabled = false; 
      textBox2.Enabled = false; 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
     } 
     if (!checkBox1.Checked) 
     { 
      checkBox2.Enabled = true; 
      textBox2.Enabled = true; 

      roll_spin_timer.Stop(); 
     } 

    } 

    private void checkBox2_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox2.Checked) 
     { 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
      checkBox1.Enabled = false; 
      textBox2.Enabled = false; 
      kill_me.Start(); 
     } 
     if (!checkBox2.Checked) 
     { 
      roll_spin_timer.Stop(); 
      checkBox1.Enabled = true; 
      textBox2.Enabled = true; 
      kill_me.Stop(); 
     } 
    } 
    #endregion 

で動作するように取得しようとしています。そして、 'roll_spin_timer'が刻々と変化しているときに、30秒ごとにRを押すべきです。 これとは別に動作しますが、同時に両方を有効にしようとすると、何かがうんざりしてしまいます。今は毎回動作し、それだけです。私はそれを動作させる簡単な方法があると思っていますが、私はまだ分かりません!

どうすればこの問題を解決できますか?正直言って、私はそれを私の自己に修正することができればと思います。私はちょっとした例が必要です。私はあなたが私を助けてくれることを願っています。コーディングはおそらくC#を長い時間使用する人には恐ろしいですが、私はいくつかのヒントを使うことができます&トリック!

ありがとうございます!

敬具、

MBあなたはSystem.Windows.Forms.Timerを使用しているように見えます

+0

私はそれらをアクティブにするコードを追加しました;)私はあなたが私を助けることを願っています –

+0

これは間違いなく正しいコードですか? - 同じメソッドを2つコピーしているように見えますが、kill_me_timerの間隔は設定されません。 checkbox1とcheckbox2は何を制御するのですか? –

+0

Checkbox1はSpin_roll_timerを制御し、checkbox2は有効にする必要があります –

答えて

0

Here次の読むことができる:

このWindowsタイマが UIスレッドが処理を実行するために使用されているシングルスレッド環境用に設計されています。

別のタイマークラス、System.Timers.TimerまたはSystem.Threading.Timerを使用してください。 スレッドを使用して書き込むこともできます

+0

私は実際にスレッドを正しく使用する方法を知りたいと思います。バックグラウンドワーカーはどうですか? –

0

本当にここでうんざりしていますか?説明できますか?または、15秒間隔の単一タイマーを使用して、15秒および30秒間隔の操作を処理するようなロジックを実装できます。毎回processListを反復処理する必要がありますか、興味のあるプロセスへの参照を保持して、タイマーがヒットするたびに使用することができますか?