2010-10-04 19 views
11

मैं अक्सर अपने विंडोज 7 पीसी को दूसरे कंप्यूटर पर जुड़े केवीएम स्विच के साथ बूट करता हूं। जब मैं बूट किए गए पीसी पर स्विच करता हूं, तो डिस्प्ले रेज़ोल्यूशन गलत होता है (और दूसरा संलग्न मॉनीटर नहीं मिला है)।मैं विंडोज़ में डिस्प्ले डिटेक्शन कैसे लगा सकता हूं?

मैं Screen Resolution चुनकर और Detect पर क्लिक करके डेस्कटॉप पर राइट-क्लिक करके इसे सही कर सकता हूं। इससे विंडोज़ संलग्न डिस्प्ले का पता लगाता है और सबसे इष्टतम रिज़ॉल्यूशन में समायोजित करता है।

मैं इसे स्वचालित रूप से करने के लिए एक छोटी उपयोगिता लिखना चाहता हूं। मैं किस Win32 एपीआई कॉल या सी # ऑब्जेक्ट का उपयोग करना चाहिए?

+0

मेरे पास रीफ्रेश विकल्प नहीं है। यह वीडियो कार्ड निर्माता से ऐड-ऑन हो सकता है। –

+0

क्षमा करें, हंस, यह वास्तव में कहता है 'पता लगाएँ' - मैंने सवाल संपादित किया है। मेरा मानना ​​है कि यह एक मानक बटन है। –

उत्तर

1

आप कोशिश कर सकते हैं:

  1. आप जासूस ++ खिड़कियां खुली हुई हैं और उनके गुणों और संदेशों पर एक नज़र के लिए खोज करने के लिए उपयोग कर सकते हैं।
  2. "rundll32.exe shell32.dll, Control_RunDLL desk.cpl" शुरू करने के लिए प्रक्रिया का उपयोग करें या यह देखने के लिए प्रयोग करें कि आप विंडो हैंडल प्राप्त कर सकते हैं या नहीं, विचारों के लिए लिंक नीचे देखें।
  3. कोड "send button click to external app" कोड का उपयोग करें और इसे "स्क्रीन रेज़ोल्यूशन" के साथ विंडो की खोज करने के लिए संशोधित करें और कैप्शन "पता लगाएँ" के साथ बालविंडो को एक BN_CLICK भेजें।
  4. चूंकि कंप्यूटर पहले से ही आपके पास लॉगऑन पर स्वचालित रूप से इसे आग लगाना चाहता है, इसके लिए कार्य शेड्यूलर का उपयोग करें।
+0

यदि किसी कारण से कार्य शेड्यूलर के साथ काम नहीं करता है, तो Win7 UAC परेशानी हो सकती है क्योंकि इसे अपने उपयोगकर्ता के रूप में चलाने के लिए इसे सेट करने का प्रयास करें। – Marlon

1

सुनिश्चित नहीं है कि यह आपके लिए काम करेगा, लेकिन आप इस तरह कुछ कोशिश कर सकते हैं। कम से कम यह आपको शुरू कर सकता है।

[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 714)] 
public struct DISPLAY_DEVICE 
{ 
    [FieldOffset(0)] 
    public int cb; 
    [FieldOffset(4)] 
    public char DeviceName; 
    [FieldOffset(68)] 
    public char DeviceString; 
    [FieldOffset(324)] 
    public int StateFlags; 
    [FieldOffset(328)] 
    public char DeviceID; 
    [FieldOffset(584)] 
    public char DeviceKey; 
} 

[DllImport("User32.dll", SetLastError = true)] 
static extern Boolean EnumDisplayDevices(
     string lpDevice, 
     uint iDevNum, 
     ref DISPLAY_DEVICE lpDisplayDevice, 
     uint dwFlags 
); 

public void DetectDevices() 
{ 
    var flag = true; 
    for (uint i = 0; flag && i < 100; i++) 
    { 
     var device = new DISPLAY_DEVICE(); 
     device.cb = Marshal.SizeOf(device); 
     flag = EnumDisplayDevices(null, i, ref device, 1); 
    } 
} 
+0

गाह और यह सी/सी ++ में एक लाइनर हो सकता है, क्यों लोग सी # सी के साथ अपने रास्ते से परेशान होते हैं और सी + सी ++ प्राकृतिक पसंद करते हैं? –

+1

शायद क्योंकि उसने सी # के लिए कहा था। –

1

यह आपको आधे रास्ते वहाँ मिल जाएगा:

निष्पादित करें: नियंत्रण कक्ष desk.cpl, सेटिंग्स, @ सेटिंग

कि सीधे स्क्रीन संकल्प पैनल लाएगा।

मैं http://en.wikipedia.org/wiki/Windows_Script_Host जैसे एक स्क्रिप्टिंग टूल का सुझाव भी दे सकता हूं और एक उपयोगिता लिखूंगा जो पैनल खोल देगा और बटन पर क्लिक करेगा।

यह कहकर कि यह संभव है कि नियंत्रण कक्ष सीधे विंडोज़ में कॉल करता है। डीएल जिसे आप सीधे लोड कर सकते हैं और कोड में आवेक कर सकते हैं, लेकिन उसे पहचानने के लिए कुछ स्लेथिंग की आवश्यकता होगी। (आप एक डीबगर में .cpl चलाकर शुरू कर सकते हैं और देख सकते हैं कि जब आप पहचान पर क्लिक करते हैं तो क्या होता है)।

1

क्यों न सिर्फ Do It Again का उपयोग करें और एक मैक्रो अपने माउस और कीबोर्ड कार्यों को रिकॉर्ड करके आप के लिए संकल्प रीसेट करता है कि लिखना?

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