2010年5月14日 星期五

C#呼叫Win32 API

Calling Win32 DLLs in C# with P/Invoke
P/Invoke(平台叫用)什麼時候會用到呢?有時用到.NET沒有封裝(Encapsulation)的功能時就會用到。
1. 引用「System.Runtime.InteropServices」

using System.Runtime.InteropServices;

2. 在pinvoke.net左上方搜尋列輸入函數名稱,這裡就不用文章中的例子,使用「FindWindow」函數。
3. 搜尋到的結果有很多種,例如智慧型裝置上面也有類似的API(呼叫coredll.dll),但這不是我們需要的,我們在user32底下找到以下函數。

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

將這段宣告放在要呼叫的class裡面,或是你可以將.NET沒有提供的Win32 API自己打包成為一個類別。
4. 最後在事件或函數裡面加入這個函數。