Stay On Top  readme
================================

■ ソフトウェア名
  Stay On Top（StayOnTop）

■ バージョン
  26.9.12.2157

■ 概要
  指定したアプリケーションウィンドウを、他のウィンドウより常に手前に
  表示し続ける Windows 用ユーティリティです。
  システムトレイに常駐し、メニューからウィンドウを選んでピン留めできます。

■ 未登録時の制限（必ずお読みください）
  ライセンス未登録の場合、起動時および「常に手前に固定」を ON にするたびに
  制限の説明（画面右下）が表示されます。
  ・設定ファイル（config.txt）は起動時に読み込まれません（ウィンドウ登録は毎回必要）
  ・変更内容は config.txt に保存されます（ライセンス登録後に読み込まれます）
  ・「常に手前に固定」を ON にした時点から、最大 15 分で自動的に OFF になります
    （OFF 後に再度 ON にすると、新たに 15 分のカウントが始まります）
  ・14 分経過時 … トレイ通知で 1 分前のお知らせ
  ・15 分経過時 … 自動 OFF と通知（ピン留めも解除）

  【購入前のご確認（試用モード）】
  ライセンス購入の前に、試用モード（未登録のまま）で、お使いの PC と
  対象アプリ上で、必要な機能と使い方が問題なく動作するかご確認ください。
  15 分制限はありますが、ウィンドウのピン留め・最前面固定・メニュー操作など
  基本機能は試用できます。ご自身の用途に合うことを確認してから購入してください。
  購入後の返金には原則対応できません。

  制限を解除するには、トレイメニューの「ライセンスを購入 / 登録」から
  PC ID をコピーし、購入ページで購入してダウンロードした StayOnTop.lic を
  登録してください。

■ ライセンス登録
  1. トレイメニュー → 「ライセンスを購入 / 登録」
  2. 表示された PC ID をコピー
  3. 購入ページで PC ID を入力して決済 → StayOnTop.lic をダウンロード
  4. ダウンロードした StayOnTop.lic を選択して「登録」

  登録後は 15 分制限なく使えます。ライセンスファイルは
  %APPDATA%\StayOnTop\StayOnTop.lic に保存されます。

■ 個人ライセンス
  1 つの StayOnTop.lic に **最大 3 台分**の PC ID 登録枠があります
  （1 PC ID = 1 枠）。**未使用の枠が残っていれば**、別 PC の PC ID を
  購入ページで追記し、更新された .lic をダウンロードして各 PC に登録できます
  （サイトライセンスと同様、追記のたび serial が上がります）。
  すでに登録済みの PC ID の再ダウンロードだけなら、枠を追加消費しません。

  【利用範囲（必ずお守りください）】
  個人ライセンスは **購入者本人** および **同一世帯の家族** が
  自宅等で使う目的に限ります。職場・学校・第三者への配布、
  営利目的の利用、契約台数を超える組織利用には使用できません
  （組織向けはサイトライセンスをご検討ください）。

■ ライセンス購入ページ
  ライセンスの購入、StayOnTop.lic の発行、サイト版の追記（.lic 更新）、
  登録済み PC 向けの再ダウンロードは、次の購入ページ（専用 Web サイト）で行えます。
  購入前に試用モードで動作確認してください（上記「購入前のご確認」参照）。

  https://conexsoft.fujigoma.com/stayontop/buy/

  ・個人ライセンス … PC ID を入力して購入 → StayOnTop.lic を取得（最大 3 枠・家族内利用）
  ・サイトライセンス … 契約に応じた .lic 発行、未使用枠への PC ID 追記
  ・.lic の更新 … 追記のたび新版 .lic をダウンロード（詳細はサイトライセンス参照）
  ・アプリから … トレイ「ライセンスを購入 / 登録」内の「購入ページを開く」でも
    同じサイトを開けます

■ 動作環境
  OS     : Windows 10 / 11（64 ビット）
  CPU    : x64（Intel / AMD）または ARM64（Windows on ARM）
  権限   : 管理者権限は不要
  その他 : ライセンス購入時のみ Web ブラウザを使用

■ インストール
  1. **StayOnTop.zip** を展開する（本家ダウンロード・個人向け等）
  2. お使いの PC に合った **StayOnTop.exe** を実行する
       x64 PC … x64\StayOnTop.exe
       ARM64 PC … arm64\StayOnTop.exe
  3. タスクトレイにアイコンが表示されます

  ライセンス画面には購入ページの案内と「購入ページを開く」があります。
  組織向け（アプリ内に購入 URL を出さない版）は **StayOnTop_Enterprise.zip** を
  ご利用ください（readme-enterprise.txt 同梱）。

  インストーラーは付属しません。
  ※ x64 フォルダーと arm64 フォルダーは混同しないでください。

■ 使い方
  タスクトレイのアイコンを左クリックまたは右クリックでメニューを開きます。

  ・常に手前に固定 … 手前固定の ON / OFF
  ・追加と削除 … 表示中ウィンドウの登録・解除
  ・追加と削除（下限指定）… 最小サイズの設定
  ・設定を開く … config.txt を編集
  ・今すぐ適用 … 設定を読み直して再適用
  ・スタートアップで起動 … ログオン時に自動起動（ON/OFF）
  ・ライセンスを購入 / 登録 … PC ID 表示・ライセンス登録
  ・終了 … ピン留めを解除して終了

■ 設定ファイル
  %APPDATA%\StayOnTop\config.txt

  例:
    @pinning=1
    Visual Studio Code
    Notepad    800    600

  1 行 1 パターン。タイトルの部分一致（大文字小文字無視）で対象を決定します。
  複数ウィンドウを最前面にした場合、上の行ほど手前に重なります（下の行は背面）。
  行の順序を入れ替えると、重なり順も変わります。

■ スタートアップ登録（任意）
  トレイメニュー「スタートアップで起動」で ON / OFF できます。
  コマンドラインでの登録・解除は、下記「起動時コマンドライン」を参照してください。

■ 環境変数（本 StayOnTop.exe）
  開発・テスト専用の STAYONTOP_* 環境変数は本 exe では無視されます。
  UI 言語の指定だけ、次の 1 つを参照します。

  STAYONTOP_LANG … UI 言語を Windows 表示言語より優先（任意）
    例: en, ja, zh-cn, zh-tw, ko, es, fr, de, pt, ru
    未設定時は Windows の表示言語に従います（下記「表示言語」参照）。
    ショートカットの「リンク先」やスタートアップ登録の exe パス前に
    「set STAYONTOP_LANG=ja &&」のように付けても構いません。

  ・設定ファイル … %APPDATA%\StayOnTop\config.txt
  ・ライセンスファイル … %APPDATA%\StayOnTop\StayOnTop.lic

■ 起動時コマンドライン（本 StayOnTop.exe）
  次を指定して起動すると、処理後にアプリは終了します。

    StayOnTop.exe --install-startup   … ログオン時に StayOnTop を起動（スタートアップ登録）
    StayOnTop.exe --remove-startup    … スタートアップ登録を解除
    StayOnTop.exe --remove-data       … 設定・ライセンス・スタートアップ登録を削除（下記参照）

  上記以外のコマンドライン引数（例: --self-test）は本 exe では無視され、
  通常起動として扱われます。

■ アンインストール・データ削除
  1. トレイメニュー → 「終了」
  2. 展開したフォルダーの StayOnTop.exe を削除

  設定・ライセンス・スタートアップ登録も削除する場合:
    StayOnTop.exe --remove-data

  次をまとめて削除します:
    %APPDATA%\StayOnTop\  （config.txt, StayOnTop.lic など）
    スタートアップの StayOnTop.lnk

  ※ アプリ実行中は --remove-data を実行しないでください。

■ 表示言語（10 言語対応）
  通常は Windows の表示言語に合わせて UI が自動切り替わります。
  表示言語と別の UI にしたい場合は、環境変数 STAYONTOP_LANG を設定してください
  （上記「環境変数」参照）。

  トレイメニュー、通知、未登録時の説明、ライセンス登録画面、About など
  主要画面は次の 10 言語に対応しています。

    English（既定） / 日本語 / 简体中文 / 繁體中文 / 한국어
    Español / Français / Deutsch / Português / Русский

  未対応の表示言語では English が使われます。
  STAYONTOP_LANG に未対応の値を指定した場合も English になります。

■ プライバシー
  PC ID は Windows MachineGuid の不可逆ハッシュです（生の GUID は送信しません）。
  設定とライセンスはお使いの PC 内にのみ保存されます。

■ 品質・セキュリティ（企業・組織向け）
  企業・組織での導入を想定し、品質とセキュリティを重視して設計・テストしています。
  購入ページ（決済・.lic 発行）とは別に、本アプリ（StayOnTop.exe）を対象としています。

  【テスト・品質】
  ・自動テスト … 設定の読み書き、タイトルパターン一致、入力上限、
    試用 15 分制限、PC ID の算出、StayOnTop.lic の署名・PC 照合・有効期限など
    （コアロジックの自動テストで主要処理を約 95％の行カバレッジまで確認）
  ・動作確認 … 実ウィンドウでの最前面 ON/OFF、複数ウィンドウの同時固定、
    設定の保存と読み込み

  【セキュリティ上の特徴】
  ・管理者権限不要
  ・設定・ライセンスは %APPDATA%\StayOnTop\ にローカル保存（常時クラウド通信なし）
  ・PC ID … MachineGuid の HMAC-SHA256 ハッシュ（生 GUID は外部送信しない）
  ・StayOnTop.lic … HMAC-SHA256 署名。改ざん・他 PC 流用・期限切れを検証
  ・UAC / Windows セキュリティ / 資格情報ダイアログはピン留め対象外
  ・終了時 … すべての最前面指定を解除し、通常の重なり順に戻します
  ・サイトライセンス … 契約台数・有効期限を .lic 内で照合

  【セキュリティ・品質チェック（概要）】
  主要な観点ごとに設計レビューとテストで確認しています。
  記号 … 対策済み / ご利用上の留意 / 該当なし

  セキュリティ（S1〜S20）
  S1  バッファオーバーフロー … 対策済み
  S2  整数オーバーフロー・サイズ計算 … 対策済み
  S3  コマンド／URL インジェクション … 対策済み
  S4  パストラバーサル・任意ファイル読書き … 対策済み
  S5  権限昇格・過剰権限 … 対策済み
  S6  ライセンス改ざん・偽造 … 対策済み
  S7  タイミング攻撃 … 対策済み
  S8  機密情報漏洩 … 対策済み
  S9  暗号・鍵管理 … 留意（ライセンス署名は購入サイトと連携）
  S10 DoS・リソース枯渇 … 対策済み
  S11 意図しないウィンドウ操作 … 対策済み
  S12 競合・二重起動 … 対策済み
  S13 試用制限 … 留意（15 分制限は PC の時計に基づきます）
  S14 DLL ハイジャック … 該当なし
  S15 メモリ安全 … 対策済み
  S16 XSS / HTML インジェクション … 該当なし（Web 画面を組み込まない）
  S17 CSRF / セッションハイジャック … 該当なし
  S18 SQL インジェクション … 該当なし
  S19 設定ファイルの不正利用 … 対策済み
  S20 データの残存 … 留意（--remove-data で設定・ライセンスを削除可能）

  品質（Q1〜Q10）
  Q1  動作の安定性 … 主要機能は自動テストで確認
  Q2  表示言語・文字化け … 対策済み（10 言語）
  Q3  設定・ライセンス形式 … 対策済み
  Q4  保守性 … 対策済み
  Q5  エラー表示 … 対策済み
  Q6  テストの網羅 … コアロジック中心の自動テスト（行カバレッジ約 95％）
  Q7  説明書・仕様の一致 … 対策済み
  Q8  品質管理 … 対策済み
  Q9  配布内容 … 対策済み（StayOnTop.exe と本 readme）
  Q10 操作性・アクセシビリティ … 留意（トレイ常駐型のため、読み上げ等は限定的）

■ サイトライセンス（法人・組織向け）
  複数 PC へ一括導入する法人・学校・団体向けのライセンスです。
  1 つの StayOnTop.lic に契約台数分の PC ID を登録し、サイトからダウンロードして
  各 PC に配布します。
  各 PC は同じ .lic を使いますが、PC ごとに個別照合されます。

  【個人ライセンスとの違い】
  ・個人 … 最大 3 台・永久（expires なし）。購入者本人・家族内利用に限る
  ・サイト … 100 台単位（100〜1000 台）・契約年数付き・組織向け

  【主な内容】
  ・契約台数 … 100 / 200 / … / 最大 1000 台
  ・契約期間 … 購入から指定年数（満了後は未登録扱いに戻ります）
  ・登録枠 … 契約台数が上限（1 PC ID = 1 枠）

  【PC の追記（枠に余裕がある場合）】
  未使用の登録枠が残っていれば、新しい PC ID を追記して StayOnTop.lic を
  更新できます（**購入ページ**の追記機能）。追記のたび serial が上がり、
  新版 .lic がダウンロードされます。登録済み PC ID の再取得は枠を消費しません。

  【追記・運用上の注意】
  ・新 PC ID の追記 … 登録枠を 1 つ消費
  ・Windows 再インストール・PC 換装 … PC ID が変わることがあり、
    旧枠は自動では解放されません。再登録には追記で追加 1 枠を
    消費する必要がある場合があります
  ・追記操作 … 最新の StayOnTop.lic（最新 serial）が必要
  ・新規 PC … 追記後の更新版 .lic を配置してください
  ・既存 PC … 旧版 .lic でも当該 PC ID が含まれていれば利用できる場合が
    ありますが、更新版 .lic の配布を推奨します
  ・契約台数に達すると追記不可（台数追加は別途お見積り）

  ・導入 … 各 PC の %APPDATA%\StayOnTop\StayOnTop.lic に配置
           またはトレイ「ライセンスを購入 / 登録」から登録

  【お見積り・お問い合わせ】
  導入予定台数・契約年数・更新の有無などを伺い、お見積りします。
  購入ページまたは作者ページよりお問い合わせください。

  【代理店経由のご購入】
  代理店経由でのご購入をご希望の場合は、取り扱い可能な代理店の
  ご紹介も対応可能です。お問い合わせの際にその旨をお知らせください。

■ お問い合わせ
  購入ページ（上記 URL）または作者ページよりお問い合わせください。

■ 更新履歴
  版番号は YY.M.D.HHMM（ビルド日時）形式です。

  26.4.21.2131  初版
