.NET Framework環境(.NET Framework のバイナリ)からWindows APIを呼び出す方法、コードを紹介します。
.NET Framework ではネイティブのバイナリーコードではなく、中間コード(CIL バイトコード)のバイナリのため、Windows APIを直接呼び出すことはできません。.NET Framework のバイナリからWindows APIを呼び出す場合は、Windows APIが実装されている DLLファイルをインポートし、呼び出すWindows API 関数を DllImportにより宣言する必要があります。
.NET Framework 環境から Windows APIを呼び出す場合には DllImport属性を用いてWindows APIをインポートします。
Windows APIを.NET Framework 場ナイル(C#のプログラム)から呼び出したい場合、Windows APIの関数名は分かるが、DLLImportの書き方がわからないことが多々あります。DllImportの宣言は、pinvoke.net(http://www.pinvoke.net/)のサイトで検索できます。API名からDLLImportの定義が検索できますので、比較的簡単にDLLImportの宣言方法がわかります。
以下のUIを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace CallMessageBox
{
public partial class Form1 : Form
{
/// <summary>
/// Represents possible values returned by the MessageBox function.
/// </summary>
public enum MessageBoxResult : uint
{
Ok = 1,
Cancel,
Abort,
Retry,
Ignore,
Yes,
No,
Close,
Help,
TryAgain,
Continue,
Timeout = 32000
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(
IntPtr hWnd, String text, String caption, int options);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox(this.Handle, "テストメッセージ", "タイトル", 0);
}
}
}
今回のプログラムは、Windows APIの"MessageBox"APIを呼び出しWindows APIでダイアログボックスを表示するプログラムです。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(
IntPtr hWnd, String text, String caption, int options);
にて、DllImpoer属性を用いてWindows APIをインポートします。
private void button1_Click(object sender, EventArgs e)
{
MessageBox(this.Handle, "テストメッセージ", "タイトル", 0);
}
MessageBox Windows APIを呼び出しメッセージボックスを表示します。プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]を押すとダイアログボックスが表示されます。
C#のプログラムから、Windows APIを呼び出すことができました。