クラムシェルモード用：蓋閉じスリープ設定をバッチファイルで即切り替え

## 概要

Windowsノートパソコンを外部ディスプレイに接続して使用する「クラムシェルモード」と、通常の「蓋を閉じたらスリープになる」設定とを、**簡単に切り替えられるバッチファイル**を紹介します。

本バッチファイルは、**GUI不要・即時反映・管理者権限自動対応**という実用性を重視して設計されています。

> 🔧 本バッチファイルおよびこの記事は、**Gemini 2.5 Pro** を活用して作成されました。

---

## 対象読者

- クラムシェルモードでノートPCを使いたいが、設定変更が面倒な方
- 蓋を閉じたときに「スリープする/しない」を頻繁に切り替える必要がある方
- powercfgコマンドやバッチファイルに関心がある方
- システム設定を自動化・スクリプト化したい方

---

## このバッチファイルでできること

- WindowsノートPCの**電源接続時（ACモード）の蓋閉じ動作**を切り替える  
- 設定状態を確認しながら**0（何もしない）/1（スリープ）**を選択可能  
- **管理者権限がない場合は自動で昇格して再実行**  
- PowerShell 経由で `powercfg` を実行、**即時反映**

---

## 使い方

1. 以下のコードを `EasyLidConfig.cmd` という名前で保存します。
2. 実行すると現在の設定が表示され、切り替えメニューが表示されます。
3. 選択肢に応じて設定が変更され、すぐに反映されます。

---

## バッチファイル本体

```bat
:: EasyLidConfig.cmd
:: 蓋閉じ動作（電源接続時）をGUIでON/OFF切り替えるバッチファイル
:: 管理者権限がない場合は自身を管理者として再起動する
@echo off
setlocal EnableDelayedExpansion

:: 管理者権限の確認と昇格処理
openfiles >nul 2>&1
if errorlevel 1 (
    echo 管理者権限が必要です。権限を昇格して再起動します...
    :: PowerShellを使用して自身を管理者権限で起動
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)
:: 管理者権限で実行されている場合、ここからメイン処理が開始されます

:MAIN_PROCESS
cls
echo -------------------------------------------------
echo  蓋を閉じたときの動作設定（電源接続時）
echo -------------------------------------------------
echo.

:: 現在のLIDACTION値を取得
set "action="
:: PowerShellコマンド内でシングルクォートを使用する際は、コマンド全体がダブルクォートで囲まれているため、通常通り記述できます。
for /f "tokens=*" %%a in ('powershell -NoProfile -Command "(powercfg /query SCHEME_CURRENT SUB_BUTTONS LIDACTION | Select-String 'Power Setting Index' | Select-Object -First 1).ToString().Split(':')[1].Trim()"') do (
    set "action=%%a"
)

:: 現在の状態を表示
if "%action%"=="" (
    set "status=現在の設定: 取得できませんでした。PowerShellの実行を確認してください。"
) else if "%action%"=="0" (
    set "status=現在の設定: 蓋を閉じても何もしない"
) else if "%action%"=="1" (
    set "status=現在の設定: 蓋を閉じるとスリープ"
) else (
    set "status=現在の設定: その他の動作 (%action%)"
)
echo %status%
echo.
echo 蓋を閉じたときの動作（電源接続時）を選択してください:
echo   1 - スリープにする
echo   0 - 何もしない
echo   Q - 終了する
echo.
set /p "userChoice=選択肢を入力 (0, 1, または Q): "

if /i "%userChoice%"=="0" (
    powershell -Command "powercfg /SETACVALUEINDEX SCHEME_CURRENT SUB_BUTTONS LIDACTION 0; powercfg /SETACTIVE SCHEME_CURRENT" >nul
    echo 蓋閉じ時の動作を「何もしない」に設定しました。
) else if /i "%userChoice%"=="1" (
    powershell -Command "powercfg /SETACVALUEINDEX SCHEME_CURRENT SUB_BUTTONS LIDACTION 1; powercfg /SETACTIVE SCHEME_CURRENT" >nul
    echo 蓋閉じ時の動作を「スリープ」に設定しました。
) else if /i "%userChoice%"=="Q" (
    echo 処理を中止します。
    goto :CLEANUP_AND_EXIT
) else (
    echo 無効な選択です。0, 1, または Q を入力してください。
    echo 何かキーを押すとメニューに戻ります...
    pause >nul
    goto MAIN_PROCESS
)

echo.
echo 設定が完了しました。何かキーを押すと終了します...
pause >nul

:CLEANUP_AND_EXIT
endlocal
exit /b
```

---

## 解説：LIDACTIONとは？

このバッチファイルでは、Windowsの電源オプションの一部である「LIDACTION（蓋閉じ時の動作）」を操作しています。

設定の内容は次のとおりです：

| 設定値 | 動作                         |
|--------|------------------------------|
| `0`    | 何もしない（画面出力は継続） |
| `1`    | スリープ                     |

クラムシェルモードで使用したい場合は、`0` を選択してください。設定は **AC電源接続時のみ** に適用されるため、外出時のバッテリー動作には影響しません。

---

## 注意点

- PowerShellが無効化されている環境では動作しません。
- 一部の企業・管理下PCでは、グループポリシー等により変更が反映されない場合があります。
- 実行には**管理者権限**が必要です。初回実行時はUACプロンプトが表示されます。

---

## まとめ

「クラムシェルモードで使いたいけど、設定を毎回変えるのが面倒…」  
そんな悩みを、**1つのバッチファイルで簡単に解決できます。**

一度使えば、GUIに頼らず設定を即時に変更できるこの方法の便利さを実感できるはずです。ぜひ日々の作業効率化にご活用ください。

---

## ライセンス・作成環境

- 本スクリプトおよび記事は **Gemini 2.5 Pro** によって作成されました。
- 再利用・改変は自由ですが、出典を明記していただけると幸いです。