Windowsクラムシェルモードを快適化！電源状態で蓋閉じ動作を自動切替するツールをGeminiと作ってみた (C#)

## はじめに

WindowsノートPCで外部ディスプレイに接続し、いわゆる「クラムシェルモード」で作業されている方、多いのではないでしょうか。
蓋を閉じてもスリープさせたくない設定にしていると、ACアダプタを抜いて持ち運ぶ際にうっかりスリープさせ忘れてバッテリーを消耗してしまったり、逆に毎回電源設定を手動で切り替えるのが手間だったりしますよね。

この「クラムシェルモードあるある」な悩みを解決するため、シンプルなWindows用ユーティリティツール「**クラムシェルモード自動切替 (AutoLidModeSwitcher)**」を作成しました。
この記事では、そのツールの紹介と、開発における技術的なポイント（そしてGoogleのAIモデル **Gemini 2.5 Pro** との共同作業の様子）を共有します。実は、このツール自体も、そしてこの記事も、Gemini 2.5 Proに大いに助けられながら作成したものです。

## 「クラムシェルモード自動切替」とは？

「クラムシェルモード自動切替」は、お使いのWindowsノートPCの蓋を閉じたときの**AC電源接続時の**動作を、PCが現在ACアダプタに接続されているか、バッテリーで駆動しているかに応じて自動的に切り替えるツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4093775/f3005e1d-7613-41c1-b8d1-046bf5a5a960.png)

### 主な機能

* **自動設定モード:**
    * PCがACアダプタに接続された場合: Windowsの電源オプションにおける「AC電源接続時」の「カバーを閉じたときの動作」を自動的に「**何もしない**」に設定します（クラムシェルモードに最適）。
    * PCがバッテリー駆動に切り替わった場合: Windowsの電源オプションにおける「AC電源接続時」の「カバーを閉じたときの動作」を自動的に「**スリープ**」に設定します（意図しないバッテリー消費を防ぎます）。
* **手動設定モード:**
    * タスクトレイアイコンの右クリックメニューから、一時的に「AC電源接続時」の蓋閉じ動作を「何もしない」または「スリープ」に手動で設定できます。
    * 手動モードは、次にPCの電源状態が変化するか、メニューから「自動設定に戻す」を選択するまで維持されます。
* **Windows起動時に自動起動:**
    * 右クリックメニューから、Windows起動時に本アプリケーションを自動的に起動するかどうかを設定できます。
* **状態表示:**
    * タスクトレイアイコンの表示が、現在の動作モード（自動設定／手動設定中）に応じて変化します。
    * 右クリックメニューには、現在の動作モードが表示されます。
* **タスクトレイ常駐:**
    * アプリケーションはタスクトレイに常駐し、バックグラウンドで動作します。

**重要なポイント:** 本ツールは、Windowsの電源オプションのうち「**電源に接続しているとき**」の「カバーを閉じたときの動作」のみを変更します。「バッテリーで駆動しているとき」の蓋閉じ設定は変更しません。

## 使い方

### ダウンロード

以下のGitHubリリースページから最新版のZIPファイルをダウンロードしてください。
* [AutoLidModeSwitcher Releases](https://github.com/na0k106ata/AutoLidModeSwitcher)

### インストール

1.  ダウンロードしたZIPファイルを任意のフォルダに展開します。
2.  `AutoLidModeSwitcher.exe` を実行します。
3.  本アプリケーションは起動時に管理者権限を要求するため、UACプロンプトが表示されます。「はい」を選択して許可してください。
4.  タスクトレイにアイコンが表示されれば起動完了です。
5.  必要に応じて、右クリックメニューから「Windows起動時に自動起動する」にチェックを入れてください。

### 基本的な操作

タスクトレイアイコンを右クリックすると、以下の操作が可能なメニューが表示されます。

* **モード表示:** 現在の動作モード（自動設定／手動設定中）を確認できます。
* **自動設定に戻す:** 手動設定モードの場合に、現在のPCの電源状態に応じた自動設定モードに戻します。
* **AC電源時: 何もしない:** 「AC電源接続時」の蓋閉じ動作を「何もしない」に手動で設定します。
* **AC電源時: スリープ:** 「AC電源接続時」の蓋閉じ動作を「スリープ」に手動で設定します。
* **Windows起動時に自動起動:** オンにすると、Windows起動時に本アプリケーションが自動的に起動します。
* **終了:** アプリケーションを終了します。

## 開発の経緯

以前より、クラムシェルモード利用時の蓋閉じ設定の切り替えに煩わしさを感じていました。特にACアダプタを頻繁に抜き差しする環境では、設定変更を忘れてバッテリーを無駄に消費してしまうことが何度かありました。
そこで、この切り替えを自動化するシンプルなツールがあれば便利だと考え、開発に着手しました。Gemini 2.5 Proにアイデアを相談し、C#での実装方法やエラー対処について多くのアドバイスをもらいながら、短期間で形にすることができました。

## 技術的なポイント

本ツールの開発には以下の技術を使用しています。

* **言語・フレームワーク:** C#, .NET 8, Windows Forms
* **電源状態の監視:** `Microsoft.Win32.SystemEvents.PowerModeChanged` イベントを利用して、AC電源とバッテリーの切り替えを検知しています。
* **電源設定の変更:** Windows標準のコマンドラインツール `powercfg.exe` を `System.Diagnostics.Process` クラス経由で実行し、蓋を閉じたときのアクションを変更しています。
    * AC電源接続時の設定変更: `powercfg /SETACVALUEINDEX SCHEME_CURRENT SUB_BUTTONS LIDACTION [0|1]`
* **タスクトレイ常駐:** `System.Windows.Forms.NotifyIcon` コンポーネントを使用しています。
* **Windows起動時の自動起動:** レジストリ (`HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`) にアプリケーションパスを登録・削除することで実現しています。
* **管理者権限の要求:** `app.manifest` ファイルで `requestedExecutionLevel` を `requireAdministrator` に設定しています。

## こだわった設計思想: なぜ「AC電源接続時の設定」のみを変更するのか

開発当初は、AC電源時とバッテリー駆動時の両方の設定を連動させることも検討しました。しかし、多くのユーザーは「バッテリー駆動時はスリープする」というOSのデフォルト設定をそのまま利用したいと考えられます。一方で、クラムシェルモード利用時（AC電源接続が前提）に限って「何もしない」設定にしたいというニーズが強いと判断しました。

そのため、本ツールはユーザーが普段意識しているであろう「バッテリー駆動時の設定」には手を加えず、クラムシェルモード利用に直接関連する「AC電源接続時の設定」のみを制御対象としました。これにより、ツールの動作がシンプルになり、ユーザーの意図しない設定変更を防ぐことを目指しています。
このアプローチについて、皆さんのご意見もぜひお聞かせください。

## 謝辞

この「クラムシェルモード自動切替」ツールは、アイデアの具体化からC#のコード実装、デバッグ、そして本Qiita記事の構成案作成や執筆に至るまで、GoogleのAIモデルである **Gemini 2.5 Pro** による多大なサポートを受けて開発されました。AIとの共同作業によって、個人開発のハードルが下がり、より迅速にアイデアを形にできることを実感しました。

## おわりに

「クラムシェルモード自動切替」が、同じような不便さを感じている方の一助となれば幸いです。
ぜひ一度お試しいただき、フィードバックなどいただけると嬉しいです。

* **ダウンロード (GitHub Releases):** [https://github.com/na0k106ata/AutoLidModeSwitcher](https://github.com/na0k106ata/AutoLidModeSwitcher)

最後までお読みいただきありがとうございました。