C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 121 を表示中)
■72685 / )  Re[2]: C++(MFC)でモニタ情報の取得
□投稿者/ nobb (46回)-(2014/07/04(Fri) 18:36:40)
No72684 (とっちゃん さん) に返信
ご返信ありがとうございます。


> 接続されているモニタの個数は
> GetSystemMetrics(SM_CMONITORS) で調べられます。
これを使用すればループ回数を取得できる、という事になりそうですが、、、

> 自分で試した範囲では名、EnumDisplayDevices() が 0を返してきたところでループを終了すれば
> 余計なものは表示しませんでしたけど?
>
> 形としては、
> while( EnumDisplayDevices( nullptr, count++, &device, nullptr ) )
> {
> /// ここでデバイスの内容表示とか
> }
> という感じですね。
EnumDispDevices関数の成否で判断すればよかったんですね。
ここまで頭がまわりませんでした。

> モニター名(たぶん、ディスプレイの設定のところで出てくる識別名だと思いますが。。。)は
> APIレベルでは取れないみたいです。
> まず、何よりもデバイスマネージャが表示してくれないので。。。汎用的な手段では取得不可能ですね。
No72682 で774RRさんにお教え頂き、その後調べ直していましたら、こちらのページを見つけました。
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+201001/10040018.txt
何の言語かは分かりませんが、おおよそ私の希望の事をやっていそうなので参考にしてみました。
== 引用 ==
> EnumDisplayDevices Function
> http://msdn.microsoft.com/en-us/library/dd162609.aspx
>
> がキモで、日本語のサイトと書いてあることが全然違います。
> 第一引数、日本語のサイトには「使いません。NULLを指定します」と堂々と書いてますが、
> 実際はここに "\\.\DISPLAY1" を渡すと、モニタ名が得られるようです
== 引用ここまで ==
とあったので、とりあえずべた書きで"\\.\DISPLAY1"を渡したところ、DeviceStringに「汎用 PnP モニター」が取得されました。
ただし、HDCが正常に取得出来なくなったので、解像度が取得出来なくなってしまいました。
同じページにWMIでの話題もありましたが、そこまで手を出すのに躊躇している所です。


> モニター情報を取得して何がしたいのかを書くともう少し望む回答が得られるかもしれません。
ユーザーのPC環境を表示し、それを送ってもらえるアプリケーションの修正中です。
その際、「解像度も出して!」と言われたので、解像度を出そう。
でも、小さな解像度で使用してたら?じゃあ、モニターの型番でユーザーが使用可能な解像度が判断できるかな?
と思ったのでその部分の実験をしていました。


> が、もうちょっと自力で調べる努力はしたほうがいいと思います。
> 特に、APIとかの使い方については、リファレンスをまず読むという癖を今のうちにつけておかないと、後々苦労することになりますよ。
> 今回のようなマルチモニタあたりなら、それなりに調べたことがある人も多いと思いますが
> これが、聞いたこともないようなAPIのこととなると、質問されても誰も答えてくれません。
ご指摘ありがとうございます。(以前も同じような事を言われました。本当にすみません)
リファレンスも読みつつ、自分なりにやっていてそれでもだめだったのですが、もう少しがんばるべきでした。
次からはもっとがんばってみたいと思います。
返信 編集キー/


管理者用

- Child Tree -