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

时间:2012-01-10 16:48:58

标签: c# environment-variables

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

我想直接调用方法:

Win32Native.SendMessageTimeout(new IntPtr(0xffff), 0x1a, IntPtr.Zero, "Environment", 0, 0x3e8, IntPtr.Zero) == IntPtr.Zero;    

而非宣布:

[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);

有没有机会呢?

1 个答案:

答案 0 :(得分:4)

我认为你的意思是Microsoft.Win32.Win32Native类。不,你不能叫它,它是内部的。你可以用反射来做一些事情,但这甚至会更加丑陋。

Microsoft可以随时更改API;通过新的框架版本,服务包等。由于它是内部的,即使他们在您直接调用它时进行了破坏您的应用程序的更改,他们也没有义务支持它。

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

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