どうもこんにちは、@Tsut-psです。
今回は、こちらの記事を参考にしつつ、時間帯でダークモードに切り替える方法を記事にしてみました。
※必ず、管理者権限のあるアカウントで設定してください。
概要
まず、ダークモードにしたことがない人は、一度試してみてください。
設定→個人用設定→色→「規定のアプリ モードを選択します」を”白”から”黒”に変更すると、俗に言うダークモードになります。
※でてこない場合は、一旦「色を選択する」をカスタム以外にする必要があります。
今回の方法は、PowerShellを使い レジストリキーを直接書き換える方法をとっています。
なので、初期段階としてダークモードに一度することで正しいキーを生成させる必要があります(念のため)。なので、実験がてらダークモードに一度してみてください。
ダークモードにするとレジストリの
「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize」の中の「AppsUseLightTheme」のデータ値が「0」になります。
逆に、もとに戻す(ライトモード)にすることで「1」になります。
※ちなみに、同じ階層にある「SystemUsesLightTheme」はWindows自体(システム)のテーマです。こちらはもともとダークで、最近ライトモードが実装されました。
PowerShellスクリプトでダークモードを実行する
Windowsで使われているPowerShellを使って、ファイル2つで ダークモード/ライトモードにするコマンドを描いていきます。
まず、新規テキストファイル(〇〇.txt)を作成します。好きな場所でおkです。
次に、以下のコードをコピーします。
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value 0
メモ帳にはりつけます。
※[Ctrl + C]でコピー、[Ctrl + V]でペーストできます。
右上のバツで閉じて、「保存する」を選択します。(ファイル→上書き保存でも可)
次に、このファイルの名前を拡張子ごと変更します。拡張子は、「ps1」です。
例:「DarkMode.ps1」
「名前の変更」というポップアップが出てくるので、「はい」を選択します。
今作ったファイルが、一発でダークモードにするファイルです。これをPowerShellで実行することでダークモードに変更できます。
同様に、ライトモードにするファイルも作ります(Valueの値が「1」に変わっただけです)
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value 1
こんな感じになるはずです(名前は任意)
そして、この「ps1」のファイルの場所をメモしておいてください。
例: D:\Text\DarkMode.ps1
D:\Text\LightMode.ps1
Set-ItemPropertyとは何か?
Set-ItemPropertyは、いわば”レジストリを書き換える”コマンドです。
続くPathはレジストリの場所、Nameはレジストリの名前、Valueはレジストリの値です。
値を「0」や「1」にすることで、ダークモードやライトモードに切り替えているのです。
タスクスケジューラで特定の時間になったら実行する
Windows標準で入っているソフト「タスク スケジューラ」を使って、先ほど作ったファイルを自動で実行していきます。
Cortana(検索ボックス)に”タスク”と入力して、アプリ「タスク スケジューラ」を起動します。
左の「タスク スケジューラ ライブラリ」を選択して、右にある「基本タスクの作成」をクリックします。
「名前」と「説明」は、任意の好きな文字を入れて、「次へ」で進んでください。
「トリガー」は ”毎日”(実行する)を選択します。
「開始」には、それぞれ”いつから開始するか”と”何時に実行するか”を指定します。
ここでは、”今日の日付”と”22時00分00秒”を指定しています。間隔はそのまま”1日”でおkです。
「操作」は”プログラムの開始”を選択して次へ。
「プログラムの開始」の”プログラム/スクリプト”には、以下を入力します。要するに、PowerShellのEXEの場所です。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加には、次のように入力しますが、<ファイルの場所>のところは先ほど作成した”〇〇.ps1”の場所を入力してください。
-ExecutionPolicy Bypass -File "<ファイルの場所>"
※先ほどメモしたファイルの場所です。「””」で囲うことに注意してください。
例: -ExecutionPolicy Bypass -File “D:\Text\DarkMode.ps1”
「次へ」を押した後、以下のように内容を確認する画面になります。「完了」でタスクを作成します。
ライトモードも同じように設定します。
なお、”何時に実行するか”と”引数の追加”は、ライトモードに沿って設定します。
例: ”6時” ……”D:\Text\LightMode.ps1”(ファイルの場所)
下の方にスクロールしてみると、このようにタスクが追加されているのがわかります。
しかし、このままだと「PowerShellの実行画面が表示されてしまう問題」と「シャットダウン中に正しい切り替えができない問題」の2点が発生してしまいます。
しかし、これらは 以下の設定で一発解決できます。
PowerShellの実行画面を非表示にし、パソコンを起動していないときにも実行する方法
上の方法で作成してみると、22時と6時になったときに PowerShellの実行画面が一瞬だけ表示されます。これはデザイン的にカッコ悪いですし、その一瞬の間に 間違えて操作してしまう可能性だってあります。
また、例えば 20時にダークモードが発動して、夜の2時にパソコンをシャットダウンした場合、朝の6時にはパソコンが起動状態にないので そのままダークモードになりっぱなしになってしまいます。
この問題を解決するには、先ほどのタスクをダブルクリックして開き、全般の「セキュリティ オプション」を変更します。
「ユーザーがログオンしているかどうかに関わらず実行する」を選択します。
この状態にすることで6時以降に起動すればライトモード、22時以降に起動すればダークモードになるようになります。ただし、1日パソコンを起動しないで、その次の日に起動した時、重複して実行されてしまう可能性があるので、念のために有効期限のようなものを設けておきます。
設定→「タスクを停止するまでの時間」にチェックを入れて、選択肢から”8 時間”にします(ダークモードの場合)
ライトモードの場合は「16 時間」と入力すればおkです(選択肢にないですが、これでも大丈夫です)
イメージにすると、ちょうど こんな感じですね。
ダークモード | ライトモード | |
時間帯 | 22時~6時 | 6時~22時 |
期限 | ~8時間 | ~16時間 |
変更を確認して「OK」を押します。すると、ユーザーアカウントのパスワード(権限確認)を求められるので、パスワードを入力して「OK」をクリックすれば、成功です。
ライトモードの方のセキュリティオプションと時間設定も忘れずに変更します。
これで、6時~22時の間はライトモード(通常)、それ以外はダークモードに切り替わります。
追記:「オペレーターまたは管理者が要求を拒否しました。(0x800710E0)」と表示されて、実行に失敗する場合
上記の方法で、シャットダウン時に実行されるはずなのですが、シャットダウンされてから少し時間が立つとこのように表示されることがあるみたいです。
起動したての状態によって、管理者権限の取得に失敗したっぽそうです。
イメージで言うと、寝起きの状態に無理やり計算させるような感じなのでしょうか……。失敗したときに、すぐに再実行するプロセスがほしいので、いろいろと試してみました。
試行錯誤した結果、「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」をオンにすることで(起動後 約3分後に)問題なく実行されました。
なので、こちらはチェックしておくと吉です。
まとめ
ダークモード/ライトモードを切り替えるには、
- PowerShellでコマンドを書いてスクリプトファイルを作る
- タスクスケジューラで特定の時間帯に自動実行する
- パソコンが起動していない状態でも実行するという設定にする
この3ポイントで説明しました。
なお、切り替わった後の数秒間はチラツキが発生したり 文字が黒のままだったりするので、そのときは画面を更新したり遷移したりしてみると直ることが多いです。
また、今後のPowerShellのアップデートによってこの方法が使えなくなる可能性もあるので、注意が必要です。