16

ヘッドセットとスピーカーから同時にサウンドを再生できるオーディオリピーターアプリケーションを実行しています。アプリケーション自体には「リアルタイム」に設定する機能がありますが、高に設定するだけなので、現時点ではタスクマネージャーで自分で設定する必要があります。

これを自動化することにしたので、プロセスの優先度を変更する小さなスクリプトをC#で作成しました(終了したら起動するために追加します)

namespace ProcessRealtime
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcessesByName("audiorepeater");
            foreach (Process proc in processes)
            {
                Console.WriteLine("Changing Priority for: "+proc.Id+" To RealTime");
                proc.PriorityClass = ProcessPriorityClass.RealTime;
                if (proc.PriorityClass == ProcessPriorityClass.RealTime)
                {
                    Console.WriteLine("Worked");
                }
            }
            Console.ReadLine();
        }
    }
}

問題は、変更が適用されないことです。 デスクトップのスクリーンショット

なぜこれが機能しないのか誰かが知っていますか?

4

3 に答える 3

10

管理者権限でスクリプトを実行する必要があります。

于 2012-12-19T03:24:31.990 に答える
10

これを試して :

using (Process p = Process.GetCurrentProcess())
    p.PriorityClass = ProcessPriorityClass.High;  
于 2013-02-27T13:01:20.367 に答える
-1

実行しなかったプロセスにアクセスする権限が必要なため、管理者として実行することも、UACを削除することもできます。

これは私のために働きます:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// #define DEBUG

namespace ProcessRealtime
{
    class PUBG_RealTime
    {
        static string processName = "TslGame";
        static ProcessPriorityClass newPriority = ProcessPriorityClass.High;

        static void Main(string[] args)
        {
#if DEBUG
            PutDebug("Start!");
#endif
            Process[] processes = Process.GetProcessesByName(processName);
#if DEBUG
            PutDebug(processes.Length + " processed found");
#endif
            foreach (Process proc in processes)
            {
#if DEBUG
                PutDebug("New process found");
#endif
                Console.WriteLine("Changing Priority for id:" + proc.Id + " to " + newPriority.ToString());
                proc.PriorityClass = newPriority;
#if DEBUG
                PutDebug("Changed priority for " + proc.Id);
#endif
            }
#if DEBUG
            PutDebug("No more processes..");
#endif
            Console.Write("Press a key, it's over !");
            Console.ReadLine();
        }

#if DEBUG
        static bool debug = true;
        static int debugInc = 1;
        static void PutDebug(string info = "")
        {
            if(debug){
                Console.WriteLine("Debug" + debugInc + ": " + info);
                debugInc++;
            }
        }
#endif
    }
}
于 2017-07-13T19:30:56.017 に答える