0

モニターがオンかオフかを理解できるかどうかを知りたいと思っています。

これは私が試したことです:

    GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] devices = g.getScreenDevices();
    int monitor_count = 0;
    for(GraphicsDevice device : devices){
        if(device.getType() == GraphicsDevice.TYPE_RASTER_SCREEN)
            monitor_count++;
    }
    if(monitor_count==0){
        System.out.println("Monitor is OFF");
    }else{
        System.out.println("Monitor is ON");
    }

しかし、モニターを閉じても(または電源から直接切断しても)、モニターは1つカウントされ続けます。

モニターがオフになっているかどうかを知るにはどうすればよいですか?

4

4 に答える 4

2

これはクロス プラットフォームの Java では確かに不可能です。正直なところ、ネイティブ コードに頼ったとしても、信頼できる意味で実際には不可能です。

これを Windows でネイティブに行う (信頼性の低い) 方法は、使用するGetDevicePowerStateことですkernel32.dll。ただし、この機能を使用してしばらく前に行った実験から、すべてのモニターで確実に機能するとは限らないと言えます。

上記の制限を念頭に置いてこのルートをたどりたい場合は、 を使用MonitorFromPointしてプライマリ モニターのハンドルを取得します (ポイントとして 0,0 を渡し、MONITOR_DEFAULTTOPRIMARYフラグを使用します)。

于 2013-11-08T13:16:37.673 に答える
0

それを行う唯一の方法は、モニターとコンセントの間に何らかの電力使用量監視デバイスを接続することです。それとは別に、コンピューターでさえモニターがオンかオフかを判断できないと思います。信号線が接続されているかどうかのみ。

GraphicsEnvironment は、ユーザーが OS レベルで構成したデスクトップ配置のみを通知できます。それを表示している実際のモニターがあるかどうか、リモート デスクトップ接続であるかどうか、または何もないかどうかは気にしません。

于 2013-11-08T13:05:16.953 に答える
0

全体のアイデアに欠陥があります。

一方向 (出力のみ) で動作するため、たとえば VGA ポートにモニターが接続されているかどうかを確認する方法はありません。モニターがVGAに追加された機能をコンピューターに伝える方法はありますが、完全にオプションです。

HDMI とは異なります (デバイスは実際に相互に通信する必要があります) が、グラフィックス カード側で認識されていても、モニターがポートに接続されていると限りません。それは、録音デバイスまたはモニター以外の何かである可能性が非常に高い.

ディスプレイがオンになっているかどうかを確実に判断できる唯一のケースは、ディスプレイが内蔵されており、コンピューター自体 (ラップトップなど) によって制御されている場合です。それでも情報はデバイス固有であり、OS 呼び出しでは利用できない場合があります。

OS から指示を得ることができたとしても (Windows API を介して提案されているように)、それが正しいとは決して信頼できません。これは OS の最良の推測であり、一部の構成では体系的に間違っています。

于 2013-11-08T18:48:16.750 に答える