2009-08-25 13 views
6

मुझे उत्सुकता है कि जासूस ++ फाइंडर टूल विंडो के लिए खिड़की के हैंडल को कैसे ढूंढता है जिस पर माउस है। क्या शीर्ष पर मौजूद किसी भी पिक्सेल पर कब्जा करने वाली शीर्षतम विंडो के हैंडल प्राप्त करने के लिए कोई WIN32 फ़ंक्शन है?जासूस ++ कैसे पता लगाता है कि स्क्रीन पर एक निश्चित बिंदु पर विंडो क्या है?

उत्तर

11

WindowFromPoint() फ़ंक्शन है।

+0

, होगा' किसी अन्य प्रक्रिया से खिड़कियों के साथ काम WindowFromPoint' –

+5

HWNDs पूरे भर में मान्य हैं ओएस, तो हाँ। – DeusAduro

+0

धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। मैंने इस बीएफओ की तरह कुछ इस्तेमाल किया पुन: एचडब्ल्यूएनडी wnd = (एचडब्ल्यूएनडी) 0x ....; SendMessage (WND, ...); और यह ठीक काम करता है (यह किसी अन्य एप्लिकेशन के लिए एक खिड़की थी), इसलिए मुझे लगता है कि यह उस हैंडल के साथ भी काम करता है। :) – Razvi

0

मुझे इस पर उद्धरण न दें, लेकिन मेरा मानना ​​है कि जासूस ++ WH_CALLWNDPROC हुक स्थापित करेगा। इसके बाद वे अपने लक्षित विंडो तक पहुंचने से पहले सभी WM_MOUSEMOVE संदेशों को भेज देते हैं। इस प्रकार जैसे ही आप खिड़की पर माउस करते हैं, जासूस ++ एक संदेश प्राप्त करता है जो इसे बताता है कि कौन सी खिड़की।

+1

शायद यह मामला नहीं है: Spy ++ संभवतः माउस कैप्चर लेता है (SetCapture ()) जब आप क्रॉसहेयर पर क्लिक करते हैं, तो जब आप पॉइंटर के नीचे विंडो नहीं खींचते हैं तो यह WM_MOUSEMOVE संदेशों को खींचता है। जासूस ++ शायद विंडोफ्रॉमपॉइंट/चाइल्डविंडोफ्रॉमपॉइंट का उपयोग कर रहा है क्योंकि यह माउस चाल करता है - कोई हुकिंग आवश्यक नहीं है। – BrendanMcK

4

जासूस की ++ यहां internals पर कुछ अच्छा जानकारी नहीं है: http://blogs.msdn.com/b/vcblog/archive/2007/01/16/spy-internals.aspx। यह DeusAduro के उत्तर का समर्थन करता है, कि जासूस ++ वैश्विक हुक स्थापित करता है (वास्तव में 3 हुक, जिनमें से एक WH_CALLWNDPROC है)।

आप यहां जासूस ++ - क्लोन पर कुछ और जानकारी भी प्राप्त कर सकते हैं: http://www.codeproject.com/KB/dialog/windowfinder.aspx

इसके अलावा, वहाँ एसडीके यहाँ में एक बहुत ही इसी तरह के अनुप्रयोग के लिए एक डाउनलोड किया जाना चाहिए: http://msdn.microsoft.com/en-us/library/Aa231779 लेकिन वह टूटा हुआ (कोई डाउनलोड - MSDN :(पर इतने सारे लिंक की तरह) लगता है

आप क्या पर निर्भर करता है। प्राप्त करना चाहते हैं (अगर यह एक hwnd नहीं है) आप भी एक AutomationElement प्राप्त कर सकते हैं: कि के बाद से वापस आने वाले `HWND`

System.Windows.Point pt = new System.Windows.Point(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y); 
AutomationElement ae = AutomationElement.FromPoint(pt); 
संबंधित मुद्दे