0

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

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

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

关于 SPI_SETUIEFFECTS 的信息

SPI_SETUIEFFECTS 0x103F

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

我需要将它作为 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);

它构建,运行......并且什么都不做。没有错误,没有改变。“结果”设置为真。

我在这里想念什么?

4

1 回答 1

1

这段代码

[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列表会向下滑动。

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

于 2013-05-15T14:56:24.640 回答