2

現在のセッションで表示デバイスに関する情報を取得できるEnumDisplayDevicesを使用しています。

しかし、セッションに関係なく、ディスプレイ デバイスに関する情報が必要です。私はいくつかのWindowsサービスアプリケーション(システムプロセス)を作成しているためです。

このコードの代替案を知っている人はいますか:

vncDesktop::GetNrMonitors()
{
    if(OSversion()==3 || OSversion()==5) return 1;
    int i;
    int j=0;

    helper::DynamicFn<pEnumDisplayDevices> pd("USER32","EnumDisplayDevicesA"); // it's EnumDisplayDevices function

    if (pd.isValid())
    {
        DISPLAY_DEVICE dd;
        ZeroMemory(&dd, sizeof(dd));
        dd.cb = sizeof(dd);
        for (i=0; (*pd)(NULL, i, &dd, 0); i++)
            {
                if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
                    if (!(dd.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))j++;
            }
    }
    return j;
}

前もって感謝します!

4

2 に答える 2

2

以下のソース

これが機能しない理由は、セッション 0 がコンソールに接続されていないためです。さらに、Windows 7 では、より多くのビデオ設定がユーザーごとに行われるため、あるユーザーから取得したものが別のユーザーにも適用されると想定するのは適切ではありません。

  • レジストリでディスプレイ モニターを検索することもできます。

    ディスプレイ モニターは次の場所に格納する必要があります。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY

    ディスプレイ モニターのクラス GUID は です{4D36E96E-E325-11CE-BFC1-08002BE10318}SetupDiGetClassDevsSetup API ( 、...)を使用して、システム内のモニターを見つけることができます。

  • 特に Win7 以降向けにコーディングしている場合は、QueryDisplayConfig および関連する関数を参照することをお勧めします。


ソース

于 2012-07-19T11:11:21.180 に答える
1

この問題の解決策を見つけました。プロセス ユーザー - システムとセッション ID - 一部のユーザーのみを作成する必要があります。そして、すべて正常に動作します。

于 2012-07-31T09:05:03.883 に答える