暇だったので .NET Foundation (github.com/dotnet) のリポジトリ一覧を眺めていると、
Windows の P/Invoke の定義をしているリポジトリがあったので、
それを使って Win32 API を呼び出してみます。
前提環境は以下の通り
- Windows 10
- Microsoft Visual Studio 2019
- .NET Core 3.1
今回は、簡単に Window を列挙する API 群を使ってみます。
まずは、 PInvoke.User32
を NuGet からインストールします。
インストールしたら、あとは以下のように書くだけで、各 API が使用できます。
using System; using static PInvoke.User32; namespace PInvokeExample { internal static class Program { private static void Main(string[] args) { EnumWindows((hWnd, param) => { var length = GetWindowTextLength(hWnd); if (length > 0) { var str = new char[length + 1]; GetWindowText(hWnd, str, str.Length); Console.WriteLine(str); } return true; }, IntPtr.Zero); Console.ReadLine(); } } }
若干使いにくい部分 (StringBuilder
渡せなかったり) もあるけど、
各 API の定義を pinvoke.net とかから自分で用意しなくて良いので便利。
多くの Win32 API を使う場合は、こういうのを使うのもアリではないでしょうか。
ということで、ではでは(。☌ᴗ☌。)