アプリケーション・プロセスのインスタンスハンドル(HINSTANCE)を取得するには、現在実行しているアセンブリに含まれるモジュールからHINSTANCEを取得する。 モジュールからHINSTANCEを取得するにはMarshal.GetHINSTANCEメソッドを使用する。

using System;
using System.Reflection;
using System.Runtime.InteropServices;

class Sample {
  public static IntPtr GetHInstance()
  {
    // 現在実行しているアセンブリからモジュールを取得
    Module mod = Assembly.GetExecutingAssembly().GetModules()[0];

    // モジュールのHINSTANCEを取得
    return Marshal.GetHINSTANCE(mod);
  }

  static void Main()
  {
    IntPtr hInstance = GetHInstance();

    Console.WriteLine(hInstance);
  }
}

なお、Visual StudioのデバッグオプションでVisual Studioホスティングプロセスを有効にしている場合は、ホスティングプロセス(*.vshost.exe)のHINSTANCEが取得される(?)ため、HINSTANCEを使ったAPI呼び出し等が失敗する。 これを回避するには、Visual Studioホスティングプロセスを無効にするか、*.vshost.exeではなく直接*.exeを実行する必要がある。