2012-01-10 33 views
3

有什麼辦法可以直接使用Win32Native命名空間嗎?是否可以直接使用Microsoft.Win32命名空間中的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); 

是否有這樣的機會?

+0

這裏是一個很好的參考一下從以前StackOverFlowPost它使偉大的recommedations以及一些工具,你可以使用incases其中非託管的.dll dependecys可能不存在,以及... http://stackoverflow.com/問題/ 4655294 /無法加載win32-native-dll-file-from-c-net – MethodMan 2012-01-10 16:54:28

+0

感謝您的評論。我沒有麻煩導入DLL。 – Daro 2012-01-10 17:15:26

回答

4

我想你指的是Microsoft.Win32.Win32Native類。不,你不能稱它,它是內在的。你大概可以用反射做點什麼,但那會更醜。

微軟可以隨時更改的API;通過一個新的框架版本,Service Pack等等。由於它是內部的,所以即使他們做了一個改變,如果你直接調用它,它也沒有義務支持它。

簡而言之:編寫平臺調用自己。

你也應該看看http://pinvoke.net/。該站點包含許多已經爲您定義的平臺調用簽名。

+0

你假設正確;-)謝謝。 – Daro 2012-01-10 17:14:21

+0

是否有任何其他類封裝了SendMessage API?似乎很奇怪,沒有。 – 2013-05-16 12:22:15

相關問題