2010-04-08 30 views
13

Tôi đang cố gắng truy xuất ID của màn hình như được hiển thị trong thuộc tính hiển thị Windows (# 1, 2 ... vv), nhưng dường như tôi không tìm được cách nào. Tôi đã thử sử dụng EnumDisplayMonitors cũng như EnumDisplayDevices. Cả hai đều trả về một cái gì đó như "\. \ DISPLAY1". Tuy nhiên, con số này không phải lúc nào cũng khớp với số được hiển thị bởi Windows, đặc biệt khi 2 thẻ video đang được sử dụng để điều khiển 3 màn hình trở lên. Có một cuộc gọi API tôi bị thiếu để truy xuất thông tin này hay có cách nào để lấy nó từ sổ đăng ký hoặc ở nơi khác không? Cảm ơn!Tôi làm cách nào để truy xuất thông tin màn hình?

Tôi đã thử các phương pháp:
Win32: EnumDisplayMonitors, EnumDisplayDevices: Không những màn trở lại mà không phải là hoạt động, và không ai trả về ID chính xác.
WMI: "select * from Win32_DesktopMonitor" không trả lại tất cả màn hình và không có ID.
Sổ đăng ký: Tôi đã tìm thấy màn hình ở nhiều vị trí khác nhau, không có nơi nào tôi tìm thấy có thông tin tôi đang tìm kiếm.

Bất kỳ giúp đỡ được nhiều đánh giá cao. :)

Cập nhật: Đây là những con số màn hình Tôi đang tìm kiếm: alt text

+1

Câu hỏi cũ, bao giờ tìm thấy câu trả lời? –

+1

Có ai từng tìm giải pháp không? – flashk

+1

@JoelBarsotti, bạn đã giải quyết được vấn đề đó chưa? –

Trả lời

0

Chỉ cần một đoán, nhưng có vẻ như Windows hiển thị iDevNum+1 trong thuộc tính hiển thị Windows.

+0

Thật không may, đây không phải là trường hợp, điều đó sẽ quá dễ dàng. :) Nếu bạn có một hệ thống giám sát kép, hãy thử làm cho # 2 của bạn chính và vô hiệu hóa # 1. # 2 vẫn sẽ được gọi là số 2 trong cửa sổ Display Properties, nhưng nó sẽ là màn hình đầu tiên được trả về bởi EnumDisplayDevices (iDevNum 0). :( –

+0

Ngoài ra, thứ tự màn hình được trả về bởi EnumDisplayMonitors có vẻ là ngẫu nhiên. Hầu hết thời gian sẽ trả về theo thứ tự như nhau, nhưng nếu bạn có 2 card màn hình lái 3 màn hình, nó có thể thay đổi xung quanh –

+0

tôi xuống con đường bên phải, nhưng không chính xác cho Windows 7. –

1

Tùy thuộc vào mục đích, bạn có thể muốn xem xét giải pháp dựa trên trình điều khiển. Tôi biết nVidia có một số libs phong nha mà cung cấp cho bạn truy cập vào hầu hết các chức năng un pannel kiểm soát.

+0

Đây là một ý tưởng thú vị, nhưng tôi cần một mục đích chung chung hơn và không thể phụ thuộc vào các trình điều khiển cụ thể. –

1

Bạn có thực hiện hai cuộc gọi đến EnumDisplayDevices không? Hãy thử một cái gì đó như:

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

Tôi đã làm điều này, nhưng số màn hình được trả lại ở đâu? –

+0

Bạn có ý nghĩa gì với số màn hình? Nếu "devMon" được đề cập, hãy bắt đầu bằng devMon = 0 và tạo devMon ++ trong nội bộ "while". – VitalyVal

+0

Tôi đã cập nhật câu hỏi với hình ảnh về số màn hình mà tôi đang tìm kiếm. –

Các vấn đề liên quan