我试图在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。
我在这里缺少什么?
答案 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);
完美无缺。我通过查看组合框的下拉效果进行测试。当enabled
为false
时,会立即显示组合列表。当enabled
为true
时,组合列表会向下滑动。
您很可能正在查看未由系统绘制的控件,并且该控件忽略了此选项。