IMEIndicatorClock Windows移植 判断資料
macOS版IMEIndicatorClockをWindowsへ移植するための比較・判断資料
項目
macOS
Windows
IME管理
システム統合型
アプリケーション連携型
入力ソース
グローバル(システム全体)
ウィンドウ/スレッド単位
状態通知
システム通知で確実に取得
アクティブウィンドウ依存
API
Carbon TIS (単一API)
IMM32 / TSF (複数API混在)
macOS: 「今、日本語入力がONです」→ 常に正確に取得可能
Windows: 「フォアグラウンドウィンドウのIME状態」→ ウィンドウごとに異なる
├─ メモ帳: 日本語ON
├─ Chrome: 英語
└─ VSCode: 日本語OFF
結論 : Windowsでは「システム全体のIME状態」という概念がない
機能
理由
システム全体のIME状態表示
Windowsはウィンドウ単位でIME管理
バックグラウンドウィンドウのIME状態取得
フォアグラウンドのみ取得可能
一部サードパーティIMEの状態取得
API非対応のIMEが存在
機能
制限内容
回避策
IME ON/OFF検出
一部アプリで取得不可(UWP等)
対応アプリのみサポート
マウスカーソル追従
高頻度更新でCPU負荷
更新間隔の調整
透過クリックスルー
実装が複雑
WS_EX_TRANSPARENT使用
全画面ゲーム上の表示
DirectX排他モードで非表示
ボーダーレスウィンドウのみ対応
機能
備考
フローティングウィンドウ表示
WPF/WinFormsで実装可能
システムトレイアイコン
NotifyIcon使用
時計表示(アナログ/デジタル)
完全実装可能
設定画面
完全実装可能
マルチディスプレイ対応
Screen API使用
ドラッグ移動
完全実装可能
起動時自動実行
レジストリ/スタートアップフォルダ
項目
Windows下開発
WSL下開発
Windows APIアクセス
★★★★★ 直接アクセス
✗ 不可能
IME API使用
★★★★★ 可能
✗ 不可能
GUIアプリ作成
★★★★★ ネイティブ
△ X11転送必要
デバッグ
★★★★★ 完全対応
★★☆☆☆ 制限あり
ビルド速度
★★★★☆ 高速
★★★☆☆ やや遅い
配布用EXE作成
★★★★★ 直接生成
✗ クロスコンパイル必要
IMEIndicatorClockは Windows API (IMM32/TSF) を使用してIME状態を取得する
↓
WSLはLinux環境のため Windows API にアクセスできない
↓
∴ WSL下での開発・実行は不可能
開発は必ずWindows環境で行う必要がある
項目
Visual Studio 2022
VSCode
WPF/WinForms対応
★★★★★ デザイナー付き
★★☆☆☆ コードのみ
C#開発
★★★★★ 最適
★★★★☆ 拡張機能必要
C++/WinAPI開発
★★★★★ 最適
★★★☆☆ 設定が複雑
デバッグ
★★★★★ 高機能
★★★☆☆ 基本的
IntelliSense
★★★★★ 完璧
★★★★☆ 良好
起動速度
★★☆☆☆ 重い
★★★★★ 軽い
メモリ使用量
★★☆☆☆ 多い
★★★★★ 少ない
価格
無料 (Community)
無料
XAMLプレビュー
★★★★★ リアルタイム
✗ なし
言語/FW
推奨IDE
C# + WPF
Visual Studio 2022 (デザイナー必須)
C# + WinForms
Visual Studio 2022
C++ + WinAPI
Visual Studio 2022
C++ + Qt
VSCode または Qt Creator
言語/FW
開発効率
実行速度
IME API
UI品質
学習コスト
推奨度
C# + WPF
★★★★★
★★★★☆
★★★★☆
★★★★★
★★★★☆
◎
C# + WinUI 3
★★★★☆
★★★★☆
★★★★☆
★★★★★
★★★☆☆
○
C# + WinForms
★★★★☆
★★★★☆
★★★★☆
★★★☆☆
★★★★★
○
C++ + WinAPI
★★☆☆☆
★★★★★
★★★★★
★★★☆☆
★★☆☆☆
△
C++ + Qt
★★★★☆
★★★★★
★★★☆☆
★★★★☆
★★★☆☆
○
Rust + egui
★★★☆☆
★★★★★
★★☆☆☆
★★★☆☆
★★☆☆☆
△
Electron
★★★★★
★★☆☆☆
★☆☆☆☆
★★★★☆
★★★★☆
✗
メリット:
├─ macOS版(SwiftUI)に最も近いアーキテクチャ
├─ XAML による宣言的UI
├─ 透過ウィンドウが容易
├─ P/Invokeで Windows API 呼び出し可能
├─ 豊富なドキュメント・コミュニティ
└─ Visual Studio のデザイナーサポート
デメリット:
├─ .NET ランタイム必要(自己完結型配布で回避可)
└─ 起動がC++より若干遅い
IME API アクセス: P/Invoke経由で IMM32/TSF 使用可能
開発環境 : Visual Studio 2022 Community(無料)
メリット:
├─ 最新のWindows UI技術
├─ Fluent Design対応
└─ 将来性が高い
デメリット:
├─ Windows 10 1809以降のみ
├─ 透過ウィンドウの実装が複雑
├─ ドキュメントがWPFより少ない
└─ 一部機能が未成熟
メリット:
├─ 非常にシンプル
├─ 学習コストが低い
└─ 軽量
デメリット:
├─ UIデザインの自由度が低い
├─ 透過・グラデーションが面倒
└─ 見た目が古くなりがち
C++ + WinAPI (+ Direct2D)
メリット:
├─ 最高のパフォーマンス
├─ 依存関係なし(単体EXE)
├─ 完全なシステムアクセス
└─ 最小のファイルサイズ
デメリット:
├─ 開発工数が非常に大きい(3-5倍)
├─ メモリ管理が手動
├─ UI実装が複雑
└─ バグが入りやすい
メリット:
├─ クロスプラットフォーム可能
├─ 高品質なUI
└─ 豊富なウィジェット
デメリット:
├─ ライセンス注意(LGPLまたは商用)
├─ 配布サイズが大きい
└─ Windows APIは別途呼び出し必要
開発環境の選択
│
├─ WSLで開発したい → ✗ 不可能(Windows APIが必要)
│
└─ Windows上で開発
│
├─ 単体EXE・最高速度が必須 → C++ + WinAPI
│ (開発工数: 大)
│
├─ クロスプラットフォーム必要 → C++ + Qt
│
└─ Windows専用でOK
│
├─ 最新UIが必要 + Win10 1809以降限定OK → WinUI 3
│
├─ シンプルさ重視 → WinForms
│
└─ バランス重視(推奨)→ WPF ★
項目
選択
開発環境
Windows 11 (WSL不可)
IDE
Visual Studio 2022 Community
言語
C# 12
フレームワーク
.NET 8.0 + WPF
パターン
MVVM
macOS版との類似性 : SwiftUI ↔ WPF (XAML) は構造が近い
開発効率 : C#は生産性が高く、WPFは成熟している
IME対応 : P/Invokeで完全なAPI アクセス可能
UI品質 : 透過・グラデーション・アニメーションが容易
コスト : 無料で商用利用可能
Visual Studio インストール時のワークロード
☑ .NET デスクトップ開発
└─ WPF、WinForms、.NET 8.0 が含まれる
パッケージ
用途
CommunityToolkit.Mvvm
MVVMパターン実装
Hardcodet.NotifyIcon.Wpf
システムトレイ
Newtonsoft.Json
設定ファイル
機能
可否
備考
IMEインジケーター表示
◎
フォアグラウンドウィンドウのみ
デスクトップ時計
◎
完全実装可能
マウスカーソル追従
○
CPU負荷に注意
システム全体のIME状態
✗
Windowsの仕様上不可能
WSLでの開発
✗
Windows APIが必要
VSCodeでの開発
△
可能だがVS推奨
┌─────────────────────────────────────────┐
│ Windows上 + Visual Studio 2022 │
│ + C# + WPF (.NET 8.0) │
│ │
│ これが最も現実的で効率的な選択 │
└─────────────────────────────────────────┘