スリープ復帰や再起動しても画面が真っ暗のまま映らないとき(Windows10)

目次

画面が真っ暗のまま映らないときがある

デュアルモニターのサブディスプレイとしてPHILIPSの液晶ディスプレイ276E7EDAB/11を買って数年が経つのですが、再起動やスリープ復帰時にこのサブモニターのみ真っ暗のままになることがあります。電源ランプは点灯していて、うっすらバックライトも点灯してしているので、モニター自体は動作しているのですが、何も表示されずに困ることがあります。メインモニターは別のメーカー製の物で特にこのような症状はありません。

単独モニターにしたりGPUを変更してもダメだった

サブディスプレイにしたのがいけないのかな?とモニターを単独の一つにしてみたり、マザーボード内臓のオンボードGPU(Intel HD Graphics 4600)からの出力や、PCIeに挿したビデオカードの出力端子をDVI・VGA・HDMIなどの出力端子を変えてみても症状は変わりませんでした。

信号無し状態から20秒以上経過してからはOK

PCをスリープさせたり、シャットダウンしたりで20秒以上映像信号が途切れた状態にすれば、モニターの電源ランプが点滅し始め、スタンバイ状態になるのですが、この後にPCの起動やスリープ復帰をするば、ちゃんと映像が表示されました。どうやら20秒以内の再起動やスループ復帰時はうまく信号を受信できないようです。これはモニターの不具合なのか仕様なのかは不明。

マザーボードとの相性が原因?!

いろいろネットで調べると、マザーボードとディスプレイの相性の問題のような投稿が目につきました。オーバークロック関連のBIOSの設定で、PLL(Phase Locked Loop)がどうこうで、これを無効にればOKとか海外の投稿がヒットしたりしましたが、オーバークロックとしたことないし意味が理解できず、BIOSの設定をいろいろ変更してみましたが解決できませんでした。

ちなみに、現在使用している環境はマザーボードがASROCK Z97 Extreteme 6で、グラフィックカードはGeForce 1050 Tiです。これが本当なら、このマザーボードとPHILIPS 276E7EDAB/11の組み合わせが悪いというこになります。他に環境がないので、このモニターに別のPCを接続したらどうなるのかは試してしません。

いくつかの解決策

バッチファイルで解決する方法

以下のソースはデュアルモニターの使用を一時的にやめて、モニターがスタンバイ状態になる20秒を待ち、再度サブモニターを拡張モニターとして使用開始するというもので、Windows+Pを押してモニターを切り替えるのを自動化したものです。

うまくいくのですが20秒待たないといけないのと、サブディスプレイにあったウィンドウがメインモニターに寄せられるのがネックです。秒数はお使いのモニターがスリープモードに入る秒数に合わせて変更してください。

DisplaySwitch.exe /internal
timeout 20
DisplaySwitch.exe /extend
exit

「WakeDisp2.exe」をインストールする

以下のページからWakeDisp2.zipをダウンロードして解凍します。

出てきたWakeDisp2.exeを適当な場所に保存します。

ダブルクリックして一度起動して置けば再起動してもタスクバーに常駐してくれて、スリープ復帰や再起動時には確実にモニターが表示されるようになりました。Windows 10でも使用できました。

使用をやめたい場合は、上記のアイコンを右クリックして「Quit」をクリックすればタスクバーからアイコンが消えます。この後にWakeDisp2.exeを削除します。

うまくいかない時はPowershellと組み合わてみる

WakeDisp2.exeを起動してもうまくいかないときは、以下のPowershellを試してみてください。実行すると、モニターを消灯(真っ暗)にしてスタンバイ状態にし、20秒後にWakeDisp2.exeを実行して、ディスプレイを点灯させます。実行中は画面が真っ暗になるだけで、スリープする訳ではありありません。音楽を聴いている最中でも音が流れたまま画面がスタンバイ状態になり、そこから復帰します。

$methods = @'
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool PostMessage(uint hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
'@

$pwm = Add-Type -MemberDefinition $methods -Name "PowerManager" -PassThru -Language CSharp

#モニターの電源をオフにする 2
$pwm::PostMessage(0xffff, 0x0112, 0xf170, 2)

sleep 20

C:\WakeDisp2\WakeDisp2.exe -wake

#モニターの電源をオンにする -1
#$pwm::PostMessage(0xffff, 0x0112, 0xf170, -1)
# $pwm::LockWorkStation()

sleep 20の20秒というのは、僕が使っているモニターがスタンバイ状態(スリープモード)になるまでの秒数で、お使いのモニターによって秒数を変更してくだい。

ハイブリッドスリープとハイバネーションの無効化

試してみて効果がありませんでしたが、以下のページによるとハイブリッドスリープハイバネーション無効化するといいみたいです。

ちなみに私の環境では 「ハイブリッドスリープ を許可する」オンになっていました。

グラフィックドライバーをリセットする

これも効果がありませんでしたが、Windows+Ctrl+Shift+Bを同時に押せばグラフィックドライバーがリセットされ、再起動やスリープ復帰で真っ暗だった画面が正常に表示されるかもしれません。

前へ

2020年3月 Windows Update 月例更新プログラムの一覧とダウンロードリンク(Windows10/8.1)

次へ

Chromiumベースの新EdgeでFlashを有効にする方法と動作確認ページ