delphi - Is there a way to get a VCL Control's name through the windows API? -


मेरे पास एक वीसीएल नियंत्रण का एचडब्ल्यूड है जो कि किसी अन्य प्रक्रिया 'विंडो पर स्थित है क्या खिड़कियों एपीआई के माध्यम से उस नियंत्रण का अपना वीसीएल नाम ( TControl.Name सम्पत्ति) प्राप्त करने का कोई तरीका है? मुझे उस नाम की आवश्यकता है क्योंकि उस खिड़की पर कई टीडीटी हैं और मुझे इसके लिए एक WM_SETTEXT संदेश भेजने के लिए एक की पहचान करना होगा।

दोनों अनुप्रयोगों के साथ बनाया गया था डेल्फी 2010।

डेल्फी में निर्मित फ़ंक्शन है FindControl () जो देता है निर्दिष्ट एचडब्ल्यूडब्ल्यूड के TWINControl लेकिन यह वीसीएल के एक ही उदाहरण के लिए काम करता है मुझे लगता है कि आपको इसकी जांच करनी चाहिए। आपके पास TWinControl के सूचक होने के बाद, इसका नाम (स्ट्रिंग) +8 ऑफसेट पर स्थित है आप इसे पढ़ने के लिए ReadProcessMemory का प्रयास कर सकते हैं।

संपादित करें: (अंत में यह मिल गया है: डी) GetWinControlName फ़ंक्शन कॉल करें

  // पॉइंटर को प्राप्त करने के लिए यहां की मुख्य समस्या है FindControl TWINControl एक अन्य प्रक्रिया फ़ंक्शन में GetWinControl (Wnd: HWND; आउट प्रोसेसआईडी: थेंडल): सूचक; Var विंडोएटॉमस्ट्रिंग: स्ट्रिंग; विंडोएटम: एटॉम; यदि GetWindowThreadProcessId (Wnd, ProcessId) = 0 तब आरंभ करें, तो RaiseLastOSError; // यह दूरस्थ प्रक्रिया के लिए परमाणु है (इस पर विवरण के लिए नियंत्रण देखें) WindowAtomString: = प्रारूप ('डेल्फी% .8X', [प्रोसेसआईडी]); WindowAtom: = ग्लोबलफाइंडएटम (पीसीहार (विंडोएटॉमस्ट्रिंग)); अगर WindowAtom = 0 तब RaiseLastOSError; परिणाम: = पॉइंटर (GetProp (Wnd, MakeIntAtom (WindowAtom))); समाप्त; समारोह GetWinControlName (Wnd: एचडब्ल्यूएनडी): स्ट्रिंग; Var प्रक्रिया आईआईडी: थेंडल; ObjSelf: सूचक; बुफ़: सूचक; बाइट्स: कार्डिनल; Dest प्रसंस्करण: थेंडल; ObjSelf शुरू करें: = GetWinControl (Wnd, ProcessId); DestProcess: = ओपनप्रक्रिया (PROCESS_VM_READ, TRUE, ProcessId); अगर destProcess = 0 तब RaiseLastOSError; GetMem (Buf, 256) का प्रयास करें; कोशिश अगर नहीं ReadProcessMemory (destProcess, सूचक (कार्डिनल (ObjSelf) + 8), Buf, 4, बाइट्स) तो RaiseLastOSError; अगर नहीं ReadProcessMemory (destProcess, पॉइंटर (कार्डिनल (Buf ^)), Buf, 256, बाइट्स) तो RaiseLastOSError; परिणाम: = पीसीहार (बुफ़); अंत में फ्रीम (बफ); समाप्त; अंततः क्लोज हँडल (डिस्टप्रक्रिया); समाप्त; समाप्त;    

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

jsp - Google line chart x-axis shrinks on transition -

java - Reaching JTextField in a DocumentListener -