1

値を調べてモニターのデバイス名を見つけDEV_BROADCAST_DEVICEINTERFACE.dbcc_name、関数内でそのデバイス名を使用しようとしていますEnumDisplaySettings()(デバイス名はその関数の最初のパラメーターです)。

私の問題:関数EnumDisplaySettings()は常に 0 を返します。つまり、失敗します。私のデバイス名は from であるのに対し、 MSDN は の最初のパラメータはEnumDisplaySettings()a であるべきだと言っているので、失敗すると思います。DISPLAY_DEVICE.DeviceName returned from EnumDisplayDevicesDEV_BROADCAST_DEVICEINTERFACE.dbcc_name

を使用して、2 番目のモニターDEV_BROADCAST_DEVICEINTERFACE.dbcc_nameのデバイス名を取得しますが、デバイス名を取得します。\\?\DISPLAY#GSM3AD7#5&20a3f50d&0&UID513#{866519b5-3f07-4c97-b7df-24 c5d8a8ccb8}EnumDisplayDevices()\\.\DISPLAYV1

第 1 パラメーターが関数 DEV_BROADCAST_DEVICEINTERFACE.dbcc_name から取得されたデバイス名である EnumDisplaySettings() を使用することは可能ですか?

私が質問する理由は、2 台目のモニターがコンピューターに接続されたときに、そのモニターの表示設定を変更したいからです。しかし、モニター接続時に、DEV_BROADCAST_DEVICEINTERFACE.dbcc_name(上で説明したように) そのデバイス名が通知されます。これは、まったく同じデバイスに対して EnumDisplayDevices() が返すものとは異なる名前です。そして、EnumDisplayDevices() を使用してすべてのディスプレイ デバイスを列挙することで、その 2 番目のモニターを特定する方法がわかりません。EnumDisplayDevices() を使用してすべてのディスプレイ デバイスを列挙し、コンピューターに接続されたばかりの正しいモニター/デバイスを特定する方法はありますか?

4

2 に答える 2

1

保証はできませんが、接続されている限り、ディスプレイ デバイスはその名前を保持していると思います。

その前提で、私はEnumDisplayDevicesあなたのプログラムの開始時に実行します。新しいモニターが接続されたら、EnumDisplayDevicesもう一度使用し、デバイスのリストを以前のリストと比較してEnumDisplaySettingsから、リストに新しく追加されたデバイスを比較します。

それが完了したら、古いリストを新しいリストに置き換えます。これで、次回ユーザーが別のモニターを接続したときに備えることができます。

于 2013-02-09T05:32:39.873 に答える
0

DEV_BROADCAST_DEVICEINTERFACE.dbcc_name値を適切なDISPLAY_DEVICE.DeviceName値に変換するのに役立つ手がかりについては、これらの以前の回答をご覧ください。

DEV_BROADCAST_DEVICEINTERFACE win32 プログラミングからの dbcc_name へのアクセス

DEV_BROADCAST_DEVICEINTERFACE とデバイス インスタンス ID からわかりやすいデバイス名を取得する方法

于 2013-02-10T06:05:32.527 に答える