2014-11-16 8 views
5

वर्तमान में मेरे पास एक फ़ंक्शन है और मैं इसे सक्रिय मॉनीटर की संख्या (EnumDisplayDevices का उपयोग करके) वापस करना चाहता हूं।EnumDisplayDevices की जांच dwFlags

... 
    DISPLAY_DEVICE dd; 
    dd.cb = sizeof(DISPLAY_DEVICE); 
    while (EnumDisplayDevices(NULL, numberofDeviceAdapters, &dd, EDD_GET_DEVICE_INTERFACE_NAME)) 
    { 
     if (dd.StateFlags == DISPLAY_DEVICE_ACTIVE) 
     { 
      numberOfActiveMonitors++; 
     } 
     numberofDeviceAdapters++; 

    } 
    return numberOfActiveMonitors; 

numberOfActiveMonitors वृद्धि हुई कभी नहीं है, मैं कैसे सही ढंग से एक DISPLAY_DEVICE की StateFlags जांच कैसे करूं?

+3

'अगर (डीडी.स्टेटफ्लैग और DISPLAY_DEVICE_ACTIVE) ' –

+0

शानदार ढंग से काम किया, धन्यवाद! –

उत्तर

2

आप DISPLAY_DEVICE data structure की MSDN दस्तावेज़ पढ़ें, तो आप देखेंगे कि:

StateFlags
डिवाइस राज्य झंडे। यह निम्नलिखित का कोई उचित संयोजन हो सकता है।
[...]

तो, आप अगर desidered ध्वज (अपने मामले DISPLAY_DEVICE_ACTIVE में) ऊपर उल्लिखित के StateFlags डेटा सदस्य में सेट है की जाँच करने के द्विआधारी & (बिटवाइज़ और) ऑपरेटर का उपयोग करना चाहिए डेटा संरचना।

उदा .:

// Your code: 
// if (dd.StateFlags == DISPLAY_DEVICE_ACTIVE) 
// 
// Change to (use binary AND & operator): 
if (dd.StateFlags & DISPLAY_DEVICE_ACTIVE) 
{ 
    ... 
} 

यह यदि किसी विशेष द्विआधारी झंडा एक DWORD कई झंडे युक्त में सेट है की जाँच के लिए Win32/C++ प्रोग्रामिंग में एक बहुत ही आम पैटर्न है।

+0

मैंने सभी जानकारी पढ़ने की कोशिश की और पता था कि यह बाइनरी थी लेकिन कभी-कभी विशिष्ट चीज़ को ढूंढना मुश्किल होता है। वैसे भी, स्पष्टीकरण के लिए धन्यवाद (बस मुझे क्या चाहिए)! –

+0

आपका स्वागत है। शायद एमएसडीएन दस्तावेज पर कुछ न्यूनतम नमूना कोड आपकी मदद करेंगे। –

संबंधित मुद्दे