11

組み込みシステムに接続されたモニターの解像度やその他の設定を制御する C++ で記述されたカスタム アプリケーションがあります。場合によっては、システムがヘッドレスで起動され、VNC 経由で実行されますが、後で (起動後に) モニターを接続することができます。その場合、モニターが有効になるまで、モニターにはビデオが供給されません。「displayswitch /clone」を呼び出すとモニターが起動することがわかりましたが、モニターがいつ接続されたかを知る必要があります。5 秒ごとに実行されてモニターを探すタイマーがありますが、モニターが接続されているかどうかを通知できる API 呼び出しが必要です。

これは、私が何を求めているかを説明するためのちょっとした疑似コードです (タイマーが 5 秒ごとに期限切れになったときに実行されるもの)。

if(If monitor connected) 
{
   ShellExecute("displayswitch.exe /clone);
}else
{
   //Do Nothing
}

モニターの数を返そうとGetSystemMetrics(SM_CMONITORS)しましたが、モニターが接続されているかどうかにかかわらず1を返します。他のアイデアはありますか?

ありがとう!

4

2 に答える 2

3

次のコードを試してください

BOOL IsDisplayConnected(int displayIndex = 0)
{
    DISPLAY_DEVICE device;
    device.cb = sizeof(DISPLAY_DEVICE);
    return EnumDisplayDevices(NULL, displayIndex, &device, 0);
}

trueこれは、Windows がインデックス (AKA ID) でディスプレイ デバイスを識別した場合に返されます0(これは、ディスプレイ コントロール パネルが内部で使用するものです)。それ以外の場合は false を返しますfalse。したがって、最初の可能なインデックス (デフォルトの引数としてマークしたもの) をチェックすることで、ディスプレイ デバイスが接続されているかどうか(または、少なくとも Windows によって識別されているかどうかを確認できます。これは本質的に探しているものです)。

于 2013-01-17T11:15:06.360 に答える