10

Windows 7 を実行しているラップトップに外付け LCD モニターが接続されているか、接続されていない場合に、受信またはフックできるイベントまたは通知はありますか?

ラップトップはこれを検出し、ディスプレイを外部画面に切り替えて、特定の種類のサイズ変更または再配置を行いますが、アプリケーションがハンドラーを提供したり、スクリプトを添付したりできるように、これはオペレーティング システムによって公開されますか?

そうでない場合、時々ポーリングできるレジストリ設定または API はありますか?

(私は C + Win32 API のプログラミングを好みます)

アップデート

以下のマイクの答えは、WM_DEVICECHANGE私をに導きましたがRegisterDeviceNotification()、これまでのところ実装に苦労しています...

更新 2

この質問は、異なる言い回しで数回尋ねられましたが、私の意見ではまだ完全には答えられていません:

4

3 に答える 3

6

この記事によるとWM_DISPLAYCHANGE、ディスプレイの解像度が変更されたとき、およびディスプレイが追加または削除されたときに、Windowsはメッセージを送信します。

モニターの追加または削除によるデスクトップ サイズの変更に対応する必要がある場合は、このメッセージのハンドラーで対応できます。はLPARAM、ウィンドウが配置されているディスプレイの新しい解像度を示します。システムの DPI スケーリングに 100% 以外を使用し、プログラムがDPI 対応でない場合、この解像度はスケーリングされることに注意してください。

または、関数を使用して、EnumDisplayMonitors接続されている各モニターのディスプレイ解像度と、仮想デスクトップ内のモニターの相対位置を取得します。この関数は、DPI スケーリングに関係なく、実際のデバイスのピクセル値を使用します。

于 2015-08-20T09:35:07.437 に答える
3

WM_DEVICECHANGEを試すことができます。それでも問題が解決しない場合は、ウィンドウを実行し、受信したすべてのウィンドウ メッセージをログに記録する Spy++ をそれに接続します。次に、モニターを接続して、メッセージを受信したかどうかを確認します。

または、SM_CMONITORS を使用してGetSystemMetrics()をポーリングすることもできます。

于 2011-05-12T16:50:55.047 に答える
0

ここで述べたように:

登録されたメッセージ「UxdDisplayChangeMes​​sage」と「HotplugDetected」が表示されます (2 つ目はモニターを追加する場合のみ)。RegisterWindowMessageを使用して、これらのメッセージの識別子を取得できます。

確認できる他のメッセージもあります。リンクされた回答を参照してください。

于 2015-11-17T16:52:42.157 に答える