是否可以直接使用 Microsoft.Win32 命名空间中的 Win32Native 类?

Dar*_*aro 5 c# environment-variables

有没有办法直接使用Win32Native命名空间?

我想直接调用该方法:

Win32Native.SendMessageTimeout(new IntPtr(0xffff), 0x1a, IntPtr.Zero, "Environment", 0, 0x3e8, IntPtr.Zero) == IntPtr.Zero;    
Run Code Online (Sandbox Code Playgroud)

而不是声明它:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult);
Run Code Online (Sandbox Code Playgroud)

有这样的机会吗?

vcs*_*nes 5

我猜你指的是Microsoft.Win32.Win32Native班级。不,你不能称呼它,它是内部的。你也许可以通过反思来做一些事情,但那会更丑陋。

微软可以随时更改 API;通过新的框架版本、服务包等。由于它是内部的,因此他们没有义务支持它,即使他们做出的更改会破坏您的应用程序(如果您直接调用它)。

简而言之:自己编写平台调用。

您还应该查看http://pinvoke.net/。该站点包含许多已为您定义的平台调用签名。