无法调用SystemParametersInfo

无法调用SystemParametersInfo,第1张

概述无法调用SystemParametersInfo

最近我一直试图从托pipe代码调用SystemParametersInfo方法,没有任何成功。

问题是,调用该方法后,该方法返回false (指示失败),但GetLastError (由Marshal.GetLastWin32Error()检索)为0 。

我试图从C ++调用方法作为一个testing(具有完全相同的参数),它从那里完全正常工作。

该方法的P / Invoke声明是这样的:

错误消息“指定的区域设置在此 *** 作系统上不受支持”。

比较墨迹序列化格式中的签名

如何尽可能以平台无关的方式从c ++中调用.NET

collections被修改; 枚举 *** 作可能不会执行

CLR在哪里安装?

[Dllimport("user32.dll",SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool SystemParametersInfo(SPI uiAction,int uiParam,ref STICKYKEYS pvParam,SPIF fWinIni); internal struct STICKYKEYS { public int cbSize; public int DWFlags; }

调用如下:

NativeMethods.STICKYKEYS stickyKeys = default(NativeMethods.STICKYKEYS); bool result = NativeMethods.SystemParametersInfo(NativeMethods.SPI.SPI_GETSTICKYKEYS,StickyKeysSize,ref stickyKeys,0); int error = Marshal.GetLastWin32Error();

SPI.SPI_GETSTICKYKEYS是0x003A (如MSDN上所示)。

这里的结果是false ,返回的错误是0 。


如果这很重要的话,这也是作为一个64位的可执行文件来编译的。

我完全是在智慧的结尾,你有什么想法,我可能做错了什么?

如何使用mono将.NET windows Service应用程序迁移到linux?

使用System.Security.Cryptography将Win32 Crypto API调用转换为C#

如何将文本文件的行添加到ListBox(C#)上的单个项目

使用C#从windows System32目录中删除文件

写一个mac的.net软件

正如GSerg指出的那样,我的问题是我需要直接作为参数传递结构体的大小,并作为我通过引用传入的结构体的cbSize成员。 正确的代码是:

int stickyKeysSize = Marshal.SizeOf(typeof (NativeMethods.STICKYKEYS)); NativeMethods.STICKYKEYS stickyKeys = new NativeMethods.STICKYKEYS {cbSize = stickyKeysSize,DWFlags = 0}; bool result = NativeMethods.SystemParametersInfo(NativeMethods.SPI.SPI_GETSTICKYKEYS,stickyKeysSize,0); if (!result) throw new System.ComponentModel.Win32Exception(); return stickyKeys;

总结

以上是内存溢出为你收集整理的无法调用SystemParametersInfo全部内容,希望文章能够帮你解决无法调用SystemParametersInfo所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1293316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存