ライト モードに設定されていることは、レジストリの[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize]で、[AppsUseLightTheme]が1に設定されていることで確認できます。c# - Is it possible to detect Windows dark mode on winforms application? - Stack Overflow
Formアプリケーションでは、DwmSetWindowAttribute()関数でDWMWINDOWATTRIBUTEのDWMWA_USE_IMMERSIVE_DARK_MODEでTRUEを指定することでダークモードを適用できます。
HRESULT DwmSetWindowAttribute( HWND hwnd, DWORD dwAttribute, [in] LPCVOID pvAttribute, DWORD cbAttribute );DwmSetWindowAttribute function (dwmapi.h) - Win32 apps | Microsoft Learn
Windows 11 21H2
C#では次のように呼び出します。
[DllImport("dwmapi.dll")] private static extern int DwmSetWindowAttribute(HandleRef hwnd, uint attribute, ref int attributeValue, uint attributeValueSize);
const uint DWMWA_USE_IMMERSIVE_DARK_MODE = 20; int preference = Convert.ToInt32(true); int result = DwmSetWindowAttribute(new HandleRef(this, this.Handle), DWMWA_USE_IMMERSIVE_DARK_MODE, ref preference, sizeof(uint));
指定のウィンドウのハンドルが無効だと、0x80070006 (ERROR_INVALID_HANDLE) が返されます。
アクセントカラーの設定で[タイトル バーとウィンドウの境界線にアクセント カラーを表示する (Show accent color on title bars and windows borders)]が有効になっていると、その設定が優先されダークモードの指定は無視されます。その状態であってもDwmSetWindowAttribute()はS_OKを返すため、戻り値でエラーを検出できません。