通过SystemParametersInfo禁用Windows Visual Effects

时间:2013-05-15 12:24:12

标签: c# visual-studio-2010 pinvoke

我试图在Windows窗体应用程序中以编程方式禁用所有视觉效果。除了要更改的注册表值的列表之外,我找到了这个选项,但我似乎无法让它工作。

在pinvoke.net和MSDN上搜索更具体的答案,但我找不到。

所以,这是我拥有的数据:

有关SPI_SETUIEFFECTS的信息

  

SPI_SETUIEFFECTS   0x103F

     

启用或禁用UI效果。将pvParam参数设置为TRUE以启用所有UI效果,或将FALSE设置为禁用所有UI效果。

我需要传递一个bool作为pvParam,这似乎是一般规则的例外......好吧,然后我尝试将其声明为:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, bool pvParam, uint fWinIni);

现在,来称呼它:

const uint SPI_SETUIEFFECTS = 0x103F;
const uint SPIF_SENDCHANGE = 0x02;

bool result = SystemParametersInfo(SPI_SETUIEFFECTS, 0, false, SPIF_SENDCHANGE);

它构建,运行......并且什么都不做。没有错误,没有变化。 “result”设置为true。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

此代码

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(
    uint uiAction, 
    uint uiParam, 
    bool pvParam, 
    uint fWinIni
);
....
bool enabled = false;
SystemParametersInfo(SPI_SETUIEFFECTS, 0, enabled, 0);

完美无缺。我通过查看组合框的下拉效果进行测试。当enabledfalse时,会立即显示组合列表。当enabledtrue时,组合列表会向下滑动。

您很可能正在查看未由系统绘制的控件,并且该控件忽略了此选项。