すべてのモニターとその解像度を識別する方法

画像

最近、私は通常のウィンドウの初期化に忙しく、タスクはすべてのモニターとその解像度を検出することでした。 後世のための解決策をここに残します。



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) { // DEVMODE dm,         // ChangeDisplaySettings,     ++j; } } ++i; } if (i == 0) return APP_NOMON; return APP_DONE; }
      
      





なぜなら システムにどのデバイスが含まれるかは事前にわからないため、サイクルで実行する必要があります。 まず、 EnumDisplayDevices関数の2番目のパラメーターを使用して、現在のユーザーセッションのすべてのモニターを反復処理します。 次に、 if(dc.StateFlags&DISPLAY_DEVICE_ACTIVE)を通じて、「モニター」が通信中であり、スリープしていないことを確認します。 その後、 dc.DeviceNameで彼の名前を確認し、この「モニター」で使用可能なすべてのアクセス許可についてEnumDisplaySettingsを実行できます。

LG TVのラップトップへの接続をテストしました:フィード、検出、さらには使用まで。



UPD :virtを破棄する条件のDISPLAY_DEVICE_MIRRORING_DRIVERパラメーターのチェックを追加しました。 デバイス。 おかげでshrikus



All Articles