2009-04-28 41 views
7

माइक्रोसॉफ्ट विनैपी दस्तावेज यह सुझाव देता है कि user32.dll में GetNextWindow() नामक एक फ़ंक्शन शामिल है जो माना जाता है कि इस फ़ंक्शन को बार-बार कॉल करके एक को अपने Z क्रम में खुली विंडो को गिनने की अनुमति मिलती है।मैं सी # में GetNextWindow() का उपयोग कैसे कर सकता हूं?

Pinvoke आमतौर पर मुझे सी # से WinAPI कार्यों का उपयोग करने के लिए आवश्यक DllImport कथन देता है। हालांकि, GetNextWindow() के लिए इसमें कोई प्रविष्टि नहीं है। इसलिए मैं का निर्माण करने की कोशिश की अपने ही:

[DllImport("user32.dll")] 
static extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd); 

दुर्भाग्य से, जब यह कॉल करने के लिए कोशिश कर रहा है, मैं एक EntryPointNotFoundException कह मिलती है:

Unable to find an entry point named 'GetNextWindow' in DLL 'user32.dll'. 

यह GetNextWindow() पर ही लागू होती है; पिनवोक पर सूचीबद्ध अन्य फ़ंक्शन ठीक हैं। मैं अपवाद फेंकने के बिना GetTopWindow() और GetWindowText() पर कॉल कर सकता हूं।

बेशक, यदि आप अपने वर्तमान जेड ऑर्डर में विंडोज़ को गिनाने के लिए एक पूरी तरह से अलग तरीका सुझा सकते हैं, तो मुझे यह भी सुनकर खुशी हो रही है।

उत्तर

24

GetNextWindow() वास्तव में GetWindow(), बजाय एक वास्तविक एपीआई विधि के लिए एक मैक्रो है। यह Win16 एपीआई के साथ पिछड़ा संगतता के लिए है।

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); 

enum GetWindow_Cmd : uint { 
    GW_HWNDFIRST = 0, 
    GW_HWNDLAST = 1, 
    GW_HWNDNEXT = 2, 
    GW_HWNDPREV = 3, 
    GW_OWNER = 4, 
    GW_CHILD = 5, 
    GW_ENABLEDPOPUP = 6 
} 

(Pinvoke.net से)

+1

सही GW_HWNDNEXT या GW_HWNDPREV ध्वज के साथ GetWindow समारोह कॉल करने जैसा ही है। और यह धागा (http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/afa69b03-5425-4124-b9b4-f8c6cb9bcc9c) दिखाता है कि इसका उपयोग कैसे करें "अगला" – hometoast

+0

शानदार, धन्यवाद आप लोड करते हैं! – Timwi

+0

गेटविंडो() के रूप में क्या एक ही तर्क लेते हैं, तो गरीब पिनवॉकर्स को भ्रमित करने के अलावा GetNextWindow() का क्या मतलब है? – Traubenfuchs

2

GetNextWindow एक C++ मैक्रो GetWindow कहता है, तो आप इसे नेट से फोन नहीं कर सकते हैं। इसके बजाय GetWindow पर कॉल करें।

MSDN से:

इस समारोह का उपयोग करते हुए सेट

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