C# 无法禁用或启用 Aero(如果进程是否在进程列表中)
本文关键字:进程 是否 如果 列表 Aero 启用 | 更新日期: 2023-09-27 18:24:54
嗨,我正在尝试解决此问题,当我打开一个特定的程序时,应该禁用 aero,当特殊程序关闭时,我希望再次启用 aero。
我的代码:
{
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 语句中同时运行 true 和 false。
我做错了什么?
提前谢谢。
您的for
循环不正确。 您正在逐个检查每个进程名称。 所以这取决于哪个过程碰巧排在最后。 如果"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);
}