2012-02-17 10 views
0

こんにちは私はspeificプログラムを開くときにエアロが無効になっていて、speificプログラムが閉じるとエアロを再び有効にしたいということを修正しようとしています。C#cantプロセスがプロセスリストに入っているかどうかを確認してください。

マイコード:

{ 
    const uint DWM_EC_DISABLECOMPOSITION = 0; 
    const uint DWM_EC_ENABLECOMPOSITION = 1; 

    [DllImport("dwmapi.dll", EntryPoint = "DwmEnableComposition")] 
    extern static uint DwmEnableComposition(uint compositionAction); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 
    int count = 1; 
    public static bool EnableComposition(bool enable) 
    { 
     try 
     { 
      if (enable) 
      { 
       DwmEnableComposition(DWM_EC_ENABLECOMPOSITION); 
      } 
      else 
      { 
       DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); 
      } 

      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 


    private void timer1_Tick(object sender, EventArgs e) 
    { 
     Process[] procs = Process.GetProcesses(); 

     foreach (Process proc in procs) 
     { 
      string chrome = "chrome"; 
      string list; 
      list = proc.ProcessName; 
      if (list.Contains(chrome)) 
      { 
       EnableComposition(false); 

      } 
      else if(!list.Contains(chrome)) 
      { 

       EnableComposition(true); 
      } 

     } 


    } 

} 

問題:プログラムが開いている場合、それはif文で真と偽の両方で実行されます。

どうしたのですか?

ありがとうございました。

答えて

1

お客様のforループが正しくありません。各プロセス名を1つずつチェックしています。したがって、どのプロセスが最後に来るかによって異なります。 「chrome」がプロセスリストの中央にある場合は、EnableComposition(false)と呼び出し、forループを介して次の繰り返しでEnableComposition(true)と呼び出します。これは代わりに動作するはずのよう

何か:

bool processFound = false; 
    foreach (Process proc in procs) 
    { 
     if (proc.ProcessName.Contains("chrome")) 
     { 
      processFound = true; 
     } 
    } 

    if (processFound) 
    { 
     EnableComposition(false); 
    } 
    else 
    { 
     EnableComposition(true); 
    } 
+0

ああ、それdidntの通知は、あなたが今、完璧な作品ありがとうございました! – Svante

+0

@ user1216303 - あなたはこの回答を受け入れていないことに気付きました。これに新しい問題がありますか? – Justin

+0

申し訳ありませんが、私はクリックミス – Svante

関連する問題