首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C#使用SystemParametersInfo (SPI_GETSCREENREADER SPI_SETSCREENREADER)

从C#使用SystemParametersInfo (SPI_GETSCREENREADER SPI_SETSCREENREADER)
EN

Stack Overflow用户
提问于 2011-03-25 23:38:38
回答 2查看 11K关注 0票数 2

我这样做正确吗?

代码语言:javascript
复制
[DllImport("user32", CharSet = CharSet.Auto)]
internal static extern long SystemParametersInfo(long uAction, int lpvParam, ref bool uParam, int fuWinIni);

...

public static bool IsScreenReaderRunning()
{
    long SPI_GETSCREENREADER = 70L;
    bool bScreenReader = false;
    long retVal;

    retVal = SystemParametersInfo(SPI_GETSCREENREADER, 0, ref bScreenReader, 0);

    //uint iParam = 0;
    //uint iUpdate = 0;
    //bool result = false;
    //bool bReturn = SystemParametersInfo(SPI_GETSCREENREADER, iParam, &bScreenReader, iUpdate);
    return bScreenReader;
}

public static void ScreenReaderOn()
{
    long SPI_GETSCREENREADER = 71L;
    bool bScreenReader = true;
    long retVal;

    retVal = SystemParametersInfo(SPI_GETSCREENREADER, 0, ref bScreenReader, 0);
}

public static void ScreenReaderOff()
{
    long SPI_GETSCREENREADER = 71L;
    bool bScreenReader = false;
    long retVal;

    retVal = SystemParametersInfo(SPI_GETSCREENREADER, 0, ref bScreenReader, 0);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-26 00:04:06

pinvoke声明是完全错误的,它是从VB6代码复制过来的。返回类型和参数不是长整型( VB6 int32类型),它们是整型的。Pinvoke.net是一个很好的获取声明的站点。

代码语言:javascript
复制
[DllImport("user32.dll", SetLastError = true)]
static extern bool SystemParametersInfo(int uiAction, int uiParam, IntPtr pvParam, int fWinIni);

当你得到一个错误的返回值时,不要忘了抛出Win32Exception,这样失败就不会消失了。

票数 5
EN

Stack Overflow用户

发布于 2011-03-25 23:55:47

根据这个article,SystemParametersInfo的最后一个参数应该是:

代码语言:javascript
复制
int SPIF_SENDCHANGE = 0x02;

当更改该值时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5434709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档