2012-03-22 5 views
5

हम एक प्रोग्राम लिख रहे हैं जो विशिष्ट मॉनीटर को सेटिंग धक्का दे सकता है, जिसके लिए हमें प्रत्येक डिस्प्ले डिवाइस के लिए अद्वितीय पहचानकर्ता होने की आवश्यकता होती है। अब तक, सबसे अच्छा मैं प्राप्त कर सकता हूं EnumDisplayDevices द्वारा लौटाई गई DEVMODE संरचना को एक हैंडल से पूछताछ कर रहा है और देख रहा है कि लौटा DISPLAY_DEVICE नाम में या तो "DISPLAY1" या "DISPLAY2" है (हम केवल इस सॉफ़्टवेयर के साथ दो मॉनीटर तक समर्थन करते हैं, और डिवाइस नाम DISPLAY_DEVICE संरचना का क्षेत्र \। \ DISPLAYx के रूप में है जहां x एक प्राकृतिक संख्या है, न्यूनतम 1)।विंडोज़ डिस्प्ले डिवाइस नाम कैसे निर्दिष्ट करता है? (उदाहरण के लिए \। DISPLAY1) और प्रदर्शन बंदरगाहों का निर्धारण?

मेरी समस्या यह है कि अगर कोई एक टर्मिनल से दूसरी टर्मिनल पर सेटिंग्स लागू करता है और कहता है, "मेरी सभी सेटिंग्स DISPLAY1 से और मेरी सभी सेटिंग्स को मेरे DISPLAY2 से प्राप्त करें और उन्हें अन्य टर्मिनल के DISPLAY1 और DISPLAY2 पर लागू करें," यह संबंधित बंदरगाहों से जुड़े मॉनीटर को सेटिंग्स लागू करता है? जहां तक ​​मैं कह सकता हूं, अगर केवल 1 मॉनीटर कनेक्ट है, तो उस मॉनिटर को नाम \। \ DISPLAY1 असाइन किया गया है, और यदि दो जुड़े हुए हैं, तो डीवीआई के माध्यम से कनेक्ट डिस्प्ले डिवाइस \। \ DISPLAY1 है और वीजीए पर डिवाइस है \। \ DISPLAY2।

मैंने मॉनीटर को एक समय में अनप्लग करने का प्रयास किया है, उन्हें अलग-अलग ऑर्डर में रीबूट कर रहा है, रीबूट कर रहा है, केवल एक कनेक्टेड रीबूट कर रहा है, फिर एक सेकेंड कनेक्ट कर रहा है, और ऐसा लगता है कि यह हमेशा उन्हें इस तरह असाइन करता है। मैं इसे विपरीत नामों में असाइन करने के लिए प्रतीत नहीं कर सकता। यदि यह मामला है, तो हमें ठीक होना चाहिए।

वैकल्पिक रूप से, यदि कोई प्रोग्रामिंग के तरीके के बारे में जानता है कि एमएसडीएन कॉल का उपयोग कर मॉनिटर कनेक्ट किया गया है (डीवीआई या वीजीए आदि), तो यह और भी सहायक होगा। मैंने मूल रूप से हर विकल्प को समाप्त कर दिया है जिसे मैं इस समस्या को हल करने के बारे में सोच सकता हूं।

असल में, मैं पूछ रहा हूं, क्या मैं अपनी धारणाओं में सही हूं कि Windows 7 डिस्प्ले पर नाम कैसे निर्दिष्ट करता है? यदि नहीं, तो यह कैसे किया जाता है? क्या इसे बदलने का कोई तरीका है? यदि हां, तो कैसे? क्या पोर्ट को निर्धारित करने का कोई तरीका है जिस पर मॉनीटर कनेक्ट है?

वैसे, यह एप्लिकेशन क्यूटी का उपयोग कर सी ++ में लिखा गया है, अगर यह बिल्कुल मायने रखता है।

धन्यवाद।

-Alex उर्फ ​​LeapDayWilliam

+0

मुझे यह उल्लसित लगता है कि इस पर कोई दस्तावेज नहीं है और कोई भी जवाब नहीं जानता है, लेकिन मैं सभी विचारों की सराहना करता हूं। – LeapDayWilliam

उत्तर

1

मुझे लगता है कि आप देख रहे हैं कुछ कोड आप अपने भौतिक स्थान के साथ एक मॉनिटर के विहित नाम सहयोगी मदद करने के लिए है। आप एक ऐसे समाधान की तलाश में थे जहां आप मॉनीटर के डिवाइस नामों को देखकर इस दृढ़ संकल्प को सक्षम कर सकें, लेकिन यह करने के लिए यह एक सटीक या विश्वसनीय तरीका नहीं है। मेरे अनुभव से मॉनिटर डिवाइस नामों के लिए नंबरिंग योजना के लिए कोई कविता या कारण नहीं है। आपको वास्तव में क्या चाहिए यह निर्धारित करने का एक तरीका है कि कौन सा मॉनीटर भौतिक रूप से स्थित है।

आपकी रुचि रखने वाले मॉनिटर के लिए वर्चुअल पिक्सेल स्थान के एक्स, वाई निर्देशांक को मुद्रित करने के लिए यहां कुछ बहुत ही बुनियादी कोड है। आप देखेंगे कि यदि आपके पास दो (या अधिक) एक्स मान का मॉनीटर है उन मॉनीटर मॉनीटर की चौड़ाई के बाईं ओर बढ़ेगा। आप इस जानकारी के आधार पर मॉनिटर के भौतिक स्थान की गणना कर सकते हैं।

BOOL CALLBACK enumMonitorCallback(
    __in HMONITOR hMonitor, 
    __in HDC hdcMonitor, 
    __in LPRECT lprcMonitor, 
    __in LPARAM dwData 
) 
{ 
    printf("Monitor: %p (X,Y): (%d,%d) (Width, Height): (%d,%d) \n", hMonitor, lprcMonitor->left, lprcMonitor->top, lprcMonitor->right - lprcMonitor->left, lprcMonitor->bottom - lprcMonitor->top); 
    return TRUE; 
} 

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
{ 
    int nRetCode = 0; 
    BOOL res = EnumDisplayMonitors(NULL, NULL, enumMonitorCallback, NULL); 
    getchar(); 
    return nRetCode; 
} 

मेरी मशीन में दो मॉनीटर हैं।

Monitor: 0x00C005E1 (X,Y): (0,0) (Width, Height): (1280,1024) 
    Monitor: 0x00020001 (X,Y): (1280,0) (Width, Height): (1280,1024) 

कौन सा मुझे संभाल 0x00020001 पहले की निगरानी के दाईं ओर स्थित है कि निगरानी के लिए कहता है और उस पर नजर रखने के (1280px) के संकल्प द्वारा ऑफसेट है: मैं इस उत्पादन मिलता है।

मुझे उम्मीद है कि इससे मदद मिलती है।

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