2010-04-08 36 views
13

Monitör tanıtıcılarını Windows görüntüleme özelliklerinde (# 1, 2 ... vb.) Gösterildiği gibi almaya çalışıyorum, ancak bir yol bulamıyorum. EnumDisplayMonitors ve EnumDisplayDevices kullanmayı denedim. Her ikisi de "\. \ DISPLAY1" gibi bir şey döndürüyor. Ancak, bu sayı, Windows tarafından gösterilen sayıyla her zaman eşleşmez, özellikle de 3 veya daha fazla monitör için 2 video kartı kullanıldığında. Bu bilgileri almak için kaçırdığım bir API çağrısı var mı, yoksa kayıt defterinden veya başka bir yerden almanın bir yolu var mı? Teşekkürler! Ne aktif değildir, bu geri dönüş monitörler, ve ikisi de doğru kimlikleri verir:
Win32: EnumDisplayMonitors, EnumDisplayDevicesMonitör bilgilerini nasıl alabilirim?

I bu yöntemleri çalıştılar.
WMI: "select * from from Win32_DesktopMonitor", tüm monitörleri döndürmez ve kimlik yok.
Kayıt Defteri: Farklı konumlardaki monitörleri buldum, bulduğum yerlerin hiçbiri aradığım bilgi yok.

Herhangi bir yardım çok takdir edilmektedir. :)

Güncelleme: Bunlar aradığım monitör sayılardır: alt text

+1

Eski soru, bir cevap bulabildin mi? –

+1

Herkes bir çözüm bulmuş mu? – flashk

+1

@JoelBarsotti, bu sorunu çözdünüz mü? –

cevap

0

sadece bir tahmin, ancak Windows, Windows ekran özelliklerinde iDevNum+1 gösterir gibi görünüyor.

+0

Maalesef bu durum böyle değil, bu çok kolay olurdu. :) İkili bir monitör sisteminiz varsa, birincil 2'nizi yapmayı ve # 1'i devre dışı bırakmayı deneyin. 2. Ekran Özellikleri penceresinde hala 2 numaralı çağrılacak, ancak EnumDisplayDevices (iDevNum 0) tarafından döndürülen ilk monitör olacak. :( –

+0

Ayrıca, monitörlerin EnumDisplayMonitors tarafından döndürülme sırası da rasgelmiş gibi görünür.Çoğu zaman aynı sırayla onları döndürür, ancak 3 monitör süren 2 ekran kartınız varsa, bu durum değişebilir. –

+0

Bu kılavuz bana doğru yolu seçtiniz, ancak Windows 7 için doğru değil. –

1

Amaca bağlı olarak, sürücüye dayalı bir çözüme bakmak isteyebilirsiniz. NVidia'nın, kontrol panelindeki fonksiyonların çoğuna erişim sağlayan bazı iyi lib'leri olduğunu biliyorum.

+0

Bu ilginç bir fikir ancak daha genel bir amaca ihtiyacım var ve belirli sürücülere bağlı olamam. –

1

EnumDisplayDevices için iki çağrı yaptınız mı? Şunun gibi bir şey deneyin:

while (EnumDisplayDevices(0, dev, &dd, 0)) 
{ 
... 
    while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0)) 
    { 
    ... 
    } 
} 
+0

Bunu yaptım, ancak monitör numarası nereye geri döndü? –

+0

Monitör numarası ile ne demek istiyorsun? Bahsedilen "devMon" ise, devMon = 0 ile başlayın ve devMon ++ 'ı dahili "while" yapın. – VitalyVal

+0

Soruyu, aradığım monitör numaralarının bir resmi ile güncelledim. –

İlgili konular