開発者向けドキュメント (Developer Guide)
FJ Flow のソースコードを変更・ビルドする開発者向けの情報です。...
FJ Flow のソースコードを変更・ビルドする開発者向けの情報です。
開発環境と動作要件
- 開発言語: AutoHotkey v2 (v2.0以上推奨)
- テスト環境: Windows 10 / 11
プロジェクト構造
主要なファイルおよびフォルダの役割は以下の通りです。
- fjFlow.ahk: プロ版のエントリーポイント。設定の保存、GUIカスタマイズ、インポート/エクスポートに対応。
- fjFlowFree.ahk: フリー版のエントリーポイント。設定の保存を行わず、内蔵デフォルトキー拡張(
KeyExtMap)のみで動作する軽量版。 - lib/: 内部で利用するクラスやライブラリ群。
- doc/: 画像や技術的な追加情報などのドキュメントリソース。
- build.ps1: 実行ファイル(.exe)をパッケージングするためのPowerShellスクリプト。
ソースコードからの実行方法
- AutoHotkey v2 をシステムにインストールします。
- 本リポジトリをクローンします。
fjFlow.ahk(プロ版)またはfjFlowFree.ahk(フリー版)をダブルクリックして起動します。
ビルド方法 (コンパイル)
リリース用の .exe ファイルを作成するには、リポジトリルートにある build.ps1 を使用します。
ビルドコマンドの実行手順
- PowerShellを起動し、リポジトリルートに移動します。
- 以下のコマンドを実行します。
# PowerShell で実行する場合 .\build.ps1[!IMPORTANT]
build.ps1を実行すると、AutoHotkey のコンパイラ(Ahk2Exe)を用いて、プロ版のfjFlow.exeおよびフリー版のfjFlowFree.exeがbuildディレクトリ内に出力されます。
重要な実装上の規約と仕様
ソースコードを修正、またはプルリクエストを送る際は、以下のガイドラインおよびバグ回避策を遵守してください。
1. キーボードレイアウト(JIS/US)判定
- 起動時の物理キーボード判定に
GetKeyboardTypeAPI は使用していません。OS上の論理キーボード配列を正確に取得するため、GetForegroundWindowからスレッドの HKL を取得し、失敗した場合はSystemParametersInfo(SPI_GETDEFAULTINPUTLANG)からシステムのデフォルト入力言語を取得するフォールバック判定を行っています。
2. レイヤードウィンドウ (WS_EX_LAYERED) の描画バグ回避
- 設定ガイドやインジケーターなどの
WS_EX_LAYEREDスタイルを持つウィンドウは、初回UpdateLayeredWindowを呼ぶ前に、必ず1x1などのダミーサイズで一度ShowしてHideする実体化(バグ回避)処理を行っています。この処理を削除すると、OS側で描画領域が確保されず、ウィンドウが透明のまま描画されない問題が発生します。
3. キーフックと SendEvent の競合回避
InputHook動作中に修飾キーを伴うキーイベントを合成送信する際は、自動復元との競合による入力逆転バグを防ぐため、SendInputではなくSendEventを用い、SetKeyDelay(-1, -1)を明示的に設定し、送信前後で一時的にフックを完全にStopする制御を行っています。
4. Git 操作時の認証ハングアップ防止
- 非対話的な実行環境において
git pushやgit pullなどの認証を求める可能性のあるコマンドを実行すると、バックグラウンドプロセスが入力待ちで永久にハングアップします。コミットまでの自動化に留め、リモートへの Push 操作はユーザー自身の手動対話ターミナルで行うよう提案してください。