2026/05/15(金)Windows 11でPowerShellを使って画面をオフにする方法
Win32APIをPowerShellから叩くことで実現できる。
確認環境
- Windows 11 25H2 (OSビルド 26200.8457)
コード
(Add-Type -MemberDefinition @"
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
"@ -Name "Win32API" -PassThru)::SendMessage(0xFFFF, 0x0112, 0xF170, 2)
パラメーターを解説すると0xFFFFはHWND_BROADCAST、0x0112はWM_SYSCOMMAND、0xF170はSC_MONITORPOWERに相当し、2はモニタ電源を落とす固定値である。
つまり内容としては第一引数のパラメーターがHWND_BROADCASTである場合、最上位のウィンドウにWM_SYSCOMMAND指令が出され、そのパラメーターはSC_MONITORPOWERと2であるということで、つまりモニタ電源をオフにするシステムコマンドを最上位のウィンドウに送っている内容になっている。
-Name "Win32API" -PassThruを外したくなるが、外すとエラーで動かなくなるので付ける必要がある。
-PassThruがあることで戻り値が生まれ、-Name "Win32API"をつけることでクラスが生まれるらしい。
参考情報
- SendMessage function (winuser.h) - Win32 apps | Microsoft Learn
- > HWND_BROADCAST ((HWND)0xffff)
LRESULT SendMessage(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
- WM_SYSCOMMAND message (Winuser.h) - Win32 apps | Microsoft Learn
- > #define WM_SYSCOMMAND 0x0112
- > SC_MONITORPOWER 0xF170
- GET MONITOR STATE POWER ON OR OFF | Microsoft Learn
•-1 (the display is powering on) • 2 (the display is being shut off)
- Add-Type (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn
-Name作成するクラスの名前を指定します。 このパラメーターは、メンバー定義から型を生成するときに必要です。
型名と名前空間は、セッション内で一意である必要があります。 型をアンロードしたり、変更したりすることはできません。 型のコードを変更するには、名前を変更するか、新しい PowerShell セッションを開始する必要があります。 それ以外の場合、コマンドは失敗します。
-PassThru追加された型を表す System.Runtime オブジェクトを返します。 既定では、このコマンドレットは出力を生成しません。 OUTPUTAssembly 使用して DLL ファイルを作成し、新しく作成したアセンブリから型を返す場合は、このパラメーターを使用します。
あとがき
これは私物PCと業務PCでモニタを共有しており、排他制御で利用してる時に便利な技だ。
例えばリモートワークで昼休みに私物PCにスイッチする時で、業務PCをスリープや休止にするとWSLの中身が死んだりして面倒だが、画面オフならそういうことが起きないので便利に切り替えできるという訳。
2026/05/08(金)Windows 11で1603エラーが出てJavaをインストールできなかった時にやったこと
確認環境
- Windows 11 Pro 25H2 (OSビルド 26200.8246)
- jre-8u491-windows-i586.exe
起きていたこと
全オペレーティング・システム用のJavaのダウンロードからWindows用のインストーラーをダウンロードし、インストールしようとしたところ1603エラーが出てインストールできなかった。
オンライン・オフラインどちらのインストーラーでもインストールに失敗した。
OSを再起動してもインストールできなかった。
既存のJavaインストールはない環境だった。
解決のためにやったこと
- イベントビューアを開きWindowsログ>Applicationでインストールログを探した
- MsiInstallerを見つけたので中身を見たところ、インストーラ本体(jre-8u491-windows-i586.exe)ではなく、jre1.8.0_491.msiが出ていた
Windows インストーラー トランザクションを開始しています: C:\Users\hoge\AppData\LocalLow\Oracle\Java\jre1.8.0_491\jre1.8.0_491.msi。クライアント プロセス ID: 3160。 - インストーラーを蹴った時にウィンドウが消え再び出てくる挙動を見ていたので、恐らく別のインストーラーに切り替えるときに管理者特権などが正しく継承されていないのではないかと疑った
C:\Users\hoge\AppData\LocalLow\Oracle\Java\jre1.8.0_491にアクセスしMSIを拾い上げ、直に実行することでインストールできた- この後、動いてなかったVSCodeのPlantUML拡張が動作することを確認したため、問題なくインストールできたと考えている
2026/04/28(火)nvm-windowsをマニュアルインストールする方法
マニュアルインストールするのに地味にハマったので記録として残しておく。
Windowsのユーザー名が日本語だとインストーラーを使ったインストールでは正常に動作しないため、そういったときに使える。
確認環境
nvm-windows 1.2.2
やり方
- GitHubのnvm-windows/releasesから
nvm-noinstall.zipを落としてくる - 適当な場所に解凍する。ここでは
C:\env\apps\nvmとする。 - Windowsのパスに次の物を作成する
NVM_HOME:C:\env\apps\nvmNVM_SYMLINK:C:\env\apps\nvm\env- シンボリックリンク用なので存在しないパスを指定する
PATHに%NVM_HOME%と%NVM_SYMLINK%の二つを追加する- 次のコマンドを走らせ、上手くいけばOK
nvm install lts nvm on nvm use 24 node -v
トラブルシューティング
nvm useしてもnodeにパスが通っておらず動かない
NVM_SYMLINKの設定がおかしい。どうもnvm useをした時に、このパスに指定したバージョンのnode.exeのシンボリックリンクが張ることで切り替えているようなので、ここが正しくないと正常にパスが通らない。
NVM_SYMLINKは存在しないパスを指定する必要がある。適当な文字列を指定しても動かない。
参考
2026/04/16(木)WindowsでSSH接続に使う秘密鍵を任意の場所に置く方法
C:\Users\hoge\.ssh以外の場所に秘密鍵を配置し、その秘密鍵を使ってWindows組み込みのSSHを利用して、SSH接続を行うと以下のようなエラーが出るので、それを回避する方法。
[00:11:24.734] Opening exec server for ssh-remote+hoge.example.com
[00:11:24.934] Initizing new exec server for ssh-remote+hoge.example.com
[00:11:24.934] Using commit id "xxxxx" and quality "stable" for server
[00:11:24.934] Extensions to install:
[00:11:24.939] Install and start server if needed
[00:11:24.963] Opening exec server for ssh-remote+hoge.example.com
[00:11:24.967] Running script with connection command: "C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D 65374 "hoge.example.com" sh
[00:11:24.968] Generated SSH command: 'type "C:\Users\hoge\AppData\Local\Temp\vscode-linux-multi-line-command-hoge.example.com-281649447.sh" | "C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D 65374 "hoge.example.com" sh'
[00:11:24.968] Using connect timeout of 17 seconds
[00:11:24.968] Terminal shell path: C:\WINDOWS\System32\cmd.exe
[00:11:25.179] >
[00:11:25.179] Got some output, clearing connection timeout
[00:11:25.199] >
[00:11:26.323] >
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions for 'C:\\path\\to\\hoge.sec' are too open.
> It is required that your private key files are NOT accessible by others.
> This private key will be ignored.
> Load key "C:\\path\\to\\hoge.sec": bad permissions
> miyashiro@hoge.example.com: Permission denied (publickey).
> プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.632] "install" terminal command done
[00:11:26.632] Install terminal quit with output: プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.632] Received install output: プロセスが、存在しないパイプに書き込もうとしました。
[00:11:26.633] WARN: $PLATFORM is undefined in installation script output. Errors may be dropped.
[00:11:26.633] Failed to parse remote port from server output
[00:11:26.633] Exec server for ssh-remote+hoge.example.com failed: Error
[00:11:26.633] Existing exec server for ssh-remote+hoge.example.com errored (Error)
[00:11:26.633] Initizing new exec server for ssh-remote+hoge.example.com
[00:11:26.634] Error opening exec server for ssh-remote+hoge.example.com: Error
[00:11:26.634] No hints found in the recent session.
やり方
以下のコマンドで秘密鍵の所有権を自分だけに変更するといけるようになる。
icacls "C:\path\to\hoge.sec" /inheritance:r /grant:r "%USERNAME%:F"
icaclsはファイルの所有権を変更するコマンドで、/inheritance:rで親フォルダからの継承を無効にし、指定したファイルに対する親フォルダから継承した権限を削除し、/grant:r "%USERNAME%:F"でファイルに対する権限を削除し、現ユーザーのフルアクセス権で上書きしている(要するに既存のアクセス権を、現ユーザーのフルアクセス権で置換しているのだと思う)
恐らくLinuxのOpenSSH同様に、WindowsのOpenSSHも鍵をユーザー以外が見れるとだめなのだろう。
2026/04/02(木)Windows 11ノートPCセットアップメモ
投稿日:
過去にWindows 11 HomeがプリインストールされていたノートPCをXubuntuにして運用していたが、Windowsに戻したくなったので、Windows 11 Homeをクリーンインストールするところからやった時のログ。
実際にやった作業を基に、こうしたらもっとうまくいくのではないかという内容に書き換えているため、上手く行く保証はないほか、実際の作業ではあっちこっち行っていたが、この記事を書くときに似た作業は同じ場所に固めている。
所要時間は三時間程度。
前提
- 本端末はノートPC(NEC Lavie PC-GN20D72DYEDYH2YAA)
- 本端末とは別にWindows 11 Proが動いている実機端末が一台ある
- 過去にWindows 11 Homeがプリインストールされており、マイクロソフトアカウントでもデバイスに表示されている状態
- 表示されているデバイスは二台あり、片方は別端末
- Microsoft Office 2019のライセンスがマイクロソフトアカウントのサブスクリプションに二つあり、一つは前述の別端末で利用している
確認環境
Windows 11 Home 25H2(26200.8039)
やったこと
インストールイメージの入手
- Microsoft公式のダウンロードサイトを開き、「Windows 11 のインストール メディアを作成する」ツールをダウンロードする
- インストールメディアを作成する
OSのインストール
普通にインストールするだけだが、WiFiのところで詰まったので、それは後述のトラブルシューティング参照。
Windows Update
これを最も最初に行う。
理由としては初回のWindows Updateは大規模であり、設定やプリインストールされているアプリケーションが復活するため手戻りを減らすために、最も最初にやっておくべきだ。但しちゃんと検証したわけではないので、仮説である。
Windowsの基礎設定
Windowsの設定で行う各種設定。
- システム>ディスプレイでスケーリングを100%にする(拡大/縮小のこと)

- システム>クリップボードでクリップボードの履歴を有効化する
- Bluetoothとデバイス>キーボードでPrintScreenを使用して画面キャプチャを開くをOFF

- Bluetoothとデバイス>タッチパッドで、マウスの接続時にタッチパッドをオフにしないをOFF
- Bluetoothとデバイス>タッチパッドで、タップ・スクロールとズーム・3本指ジェスチャ・4本指ジェスチャを右クリックを残して、全て無効化

- Bluetoothとデバイス>タッチパッド>高度なジェスチャで全て無効化

- 個人用設定>背景で壁紙を変える
- 個人用設定>色でモードをカスタム、既定のWindowsモードをダーク、既定のアプリモードをライトにする
- 個人用設定>テーマでゴミ箱を非表示にする(前にエクスプローラーにピン止めしておくこと、内容はその他の設定で後述)

- 個人用設定>動的ライティングを全て無効化

- 個人用設定>ロック画面で背景画像を設定し、トリビアやヒントを表示しないようにし、ロック画面の背景を表示するようにする

- 個人用設定>スタートで余計なものを全てオフ

- 個人用設定>タスクバーで自動的に隠すようにする
- アプリ>インストールされているアプリで不要なアプリケーションを軒並み消す。参考までにここまで絞れた

- アプリ>アプリの詳細設定でアプリをアーカイブするをOFF
- アプリ>アプリの詳細設定>アプリ実行エイリアスでPython関係をOFFにする
- アプリ>スタートアップで余計なものをすべてOFF
- アプリ>再開で全てオフ

- 時刻と言語>言語と地域>Microsoft IME>全般
- スペースを常に半角
- 文字種の種類とセットでひらがな、全角カタカナ、ローマ字を有効にする
- 時刻と言語>入力>入力インサイトで入力インサイトをオフにする

- プライバシーとセキュリティ>Windowsセキュリティ>アプリとブラウザコントロール>スマートアプロコントロールをOFF
- OFFにしないとMSYS2のzshが正常に動作しなくなる
マルチディスプレイに関する設定
外部モニタを繋いだ時に行うWindowsの設定。
OneDriveを消す
実際は試行錯誤して消したので、この手順では上手く行かない可能性がある。手順を誤ると復活するので根気が必要。
- タスクトレイにいるOneDriveの設定を開き「このPCからリンクを解除する」

- OneDriveをアンインストールする
%USERPROFILE%を開き、OneDriveというフォルダの中身を全て%USERPROFILE%に移し、OneDriveフォルダを消す
その他の設定
- ドライブのプロパティからインデックスを外す
- コンパネ>電源オプションで電源オプションでパフォーマンスが最大になるようにする
- コンパネ>電源オプション>電源ボタン
- スタートメニューのビューをグリッドにする

- Windows 11のエクスプローラーの右クリックメニューを従来のWindowsと同じ表示形式にする
- Windows 11の新しいメモ帳を消して古いメモ帳を使うようにする
- ゴミ箱をデスクトップから消し、エクスプローラーのピン止めに移動する

- ゴミ箱のプロパティを開き、削除時確認を有効にする
- フォルダオプションの全般タブを開き、エクスプローラーで開くを「PC」に設定し、プライバシーを全てOFF

- フォルダーオプションの表示タブを開き
- 開いてるフォルダーまで展開 on
- 隠しファイルを表示 on
- 登録されている拡張子は表示しない off
- 同期プロバイダーの通知を表示する off
.ps1ファイルを使えるようにする
Powershellを管理者権限で開き以下を流す
Set-ExecutionPolicy RemoteSigned
Windows側のアプリケーション導入
ExpLzhのインストール
- 公式サイトの更新情報からExplzh for Windows Ver 9.94のインストーラーを落としてインストール[1]
- 既存環境から新環境へ設定ファイルを持ってきて適用する。regファイル以外はゴミなので無視してよい
- 解凍オプション>基本設定を開きZoneIDを維持する際、確認ダイアログを表示しないをON
Chocolateyのインストール
Powershellを管理者権限で起動して以下を流す。
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
内容的には公式サイトのコピペ。
Gitのインストール
Gpg4Winのインストール
公式サイトから落として入れる。
MSYS2のインストール
PowerShell 7のインストール
古いPowershellはUTF8やLF改行でコーディングするとまともに扱えなかったり、エラーハンドリングがクソだったりで使いづらいため、こちらのほうが便利。
VSCodeのインストール
- 公式サイトからインストーラーを落としてインストール
- シェルエクステンションを有効化する設定を行うこと
HKEY_CURRENT_USER¥Software¥Microsoft¥Windows¥CurrentVersion¥App Paths¥code.exeを消す- 既存環境のVSCodeで
code --list-extensionsを叩きインストールされている拡張機能の一覧を取得 - 上の結果の行頭に
code --install-extensionを追記し、次のようなテキストを生成code --install-extension 13xforever.language-x86-64-assembly code --install-extension 42crunch.vscode-openapi code --install-extension anthropic.claude-code ... - 新環境でVSCodeを開き、このテキストをターミナルに流す
- Ctrl+Shift+Pを押下し、「Configure Display Language」を引き出し、日本語設定にする
- Japanese Language Pack for Visual Studio Codeが入っていることが前提。拡張機能コードは
ms-ceintl.vscode-language-pack-ja
- Japanese Language Pack for Visual Studio Codeが入っていることが前提。拡張機能コードは
nvm-windowsのインストール
- 公式GitHubのReleaseからインストーラーを落としてインストール
- zshで以下を流す
nvm install lts nvm on
Edgeの設定移行
- Edgeを一度起動する
- 既存環境の
%USERPROFILE%\AppData\Local\Microsoft\Edge\User Dataの中身をコピーしてくる - 新環境の同じパスに貼り付ける
- Microsoftの宣伝機能、おせっかい機能、検索周りは無視されるので一通り設定をチェックしていい感じにする
- Edgeのクライアント領域に角丸のフレームが出る問題を解消する
- 検索エンジンに
https://google.com/search?q=%s&udm=14を追加し、既定にする[2]
Thunderbirdのインストールと設定移行
- 公式サイトからインストーラーを落としてインストール
- 既存環境でThunderbirdを起動し、メニューボタンをクリックし、ヘルプをクリックして、トラブルシューティング情報を開く
- プロファイルフォルダーの横にあるフォルダを開くボタンを押す
- 中身を全てコピーする
- 新環境で同様の手順でプロファイルフォルダを開き、Thunderbirdを終了する
- 新環境に既存環境の設定ファイルを貼り付ける
RLoginのインストールと設定移行
- 公式サイトからバイナリを落としてくる
- 既存環境から設定をエクスポートして新環境でインポートする

Rcloneのインストールと設定
Windows 11でパスフレーズ付きの公開鍵認証SFTPをマウントする
XnViewMPの配置と設定移行
設定ファイルはXnViewMPのプログラムディレクトリ配下にあるものとする。
- 既存環境からプログラムフォルダを丸ごと持ってくる
- 設定>統合環境からコンテキストメニューにXnViewで開くを追加をONにする
- Windowsの設定>アプリ>既定のアプリ>ファイルの種類で規定値を選択する、からjpg, jpeg ,png, bmp, gif辺りを適当に関連付ける
その他のインストールや設定移行
- JTrim
- 既存環境からプログラムフォルダを丸ごと持ってくればOK
- MS Office 2019
- Microsoft accountを開き、サブスクリプションにいるオフィスをインストールする
トラブルシューティング
Windows OSインストール時にWiFiのドライバがなくて先に進まない
LAN線が挿せない端末ではUSBテザリングをすることで解決できる。
エクスプローラーを開くとクイックアクセスやお気に入り、共有が開く
これが出てくるがドライブの一覧を出したい場合
フォルダオプションで、エクスプローラーで開くを「PC」に設定すると
初期表示をここにできるようになる。
VSCodeでcode --install-extension ...を流すとVSCodeのGUIが起動する
HKEY_CURRENT_USER¥Software¥Microsoft¥Windows¥CurrentVersion¥App Paths¥code.exeを消すと直る。
消費したディスク容量について
クリーンインストール直後の占有容量が38GBで、全セットアップ完了後の占有容量は49GBだった。
バッテリー消費について
バッテリー充電100%時点でコンセントを抜いた時の表示がこれ。いきなり96%になるのはバッテリーがヘタってるのだろうか…?
3時間52分と出ており、電源がなければ使い物にならないレベルである。
あとがき
毎年最低一回は何かしらの理由でWindowsのセットアップをしている気がしているが、お陰で大分洗練されてきた気がしたので、再現性の確保の意味合いも込めて、一度まとめてみたのが本記事である。
ちなみに本記事は出先で、本記事でセットアップしたノートPCのみを使って書いているが、二日掛けて累計で9時間ほど掛けて書いているため、電源がなければ書ききれていなかった。やはりもう少しバッテリーがどうにかなってほしいところである…。
しかしノートPCにしてはマシなキーボードを使っているとはいえ、Ctrlキーの位置や、Fnを使わないとHome, Endが打てないこと、これらの誤爆による誤操作によって執筆効率は悪く、モニタも一枚しかないため工数増に拍車がかかっているのが地味に辛い。
勿論、多少の不自由があれど出先のサブマシンで作業できるだけ十分ではあるのだが、肌感としては自宅作業時と比べると1.25~1.5倍ほどはかかっている印象だ。






