
最近、私は通常のウィンドウの初期化に忙しく、タスクはすべてのモニターとその解像度を検出することでした。 後世のための解決策をここに残します。
appRet aApplication::ObtainMonitors() { DWORD i = 0; DWORD j; DISPLAY_DEVICE dc; dc.cb = sizeof(dc); while(EnumDisplayDevices(NULL, i, &dc, EDD_GET_DEVICE_INTERFACE_NAME) != 0) { if ((dc.StateFlags & DISPLAY_DEVICE_ACTIVE) && !(dc.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER)) { DEVMODE dm; j = 0; while(EnumDisplaySettings(dc.DeviceName, j, &dm) != 0) {
なぜなら システムにどのデバイスが含まれるかは事前にわからないため、サイクルで実行する必要があります。 まず、
EnumDisplayDevices関数の2番目のパラメーターを使用して、現在のユーザーセッションのすべてのモニターを
反復処理します。 次に、
if(dc.StateFlags&DISPLAY_DEVICE_ACTIVE)を通じて、「モニター」が通信中であり、スリープしていないことを確認します。 その後、
dc.DeviceNameで彼の名前を確認し、この「モニター」で使用可能なすべてのアクセス許可について
EnumDisplaySettingsを実行できます。
LG TVのラップトップへの接続をテストしました:フィード、検出、さらには使用まで。
UPD :virtを破棄する条件の
DISPLAY_DEVICE_MIRRORING_DRIVERパラメーターのチェックを追加しました。 デバイス。 おかげで
shrikus