मैंने प्रक्रिया में अपना डीएल इंजेक्शन दिया है। मैं होस्ट एप्लिकेशन के मुख्य विंडो हैंडल कैसे प्राप्त कर सकता हूं?Win32 - आवेदन के मुख्य WND हैंडल प्राप्त करें
उत्तर
होस्ट एप्लिकेशन में कई 'मुख्य विंडो' हो सकती हैं। उन्हें पता लगाने के लिए, आपको
- कॉल
GetCurrentProcessId
मौजूदा प्रक्रिया - कॉल
EnumWindows
की पीआईडी डेस्कटॉप - के सभी उच्चस्तरीय खिड़कियों से अधिक पुनरावृति करने के लिए डेस्कटॉप पर प्रत्येक विंडो के लिए,
GetWindowThreadProcessId
फोन प्राप्त करने के लिए प्राप्त करने के लिए कर सकता है प्रक्रिया का पीआईडी जिसने विंडो - बनाया है यदि विंडो की पीआईडी आपकी प्रक्रिया के पीआईडी से मेल खाती है, तो विंडो को याद रखें।
यह आपको उस प्रक्रिया द्वारा बनाई गई अपरिवर्तनीय विंडो की एक सूची देता है जिस पर आपने अपना डीएलएल इंजेक्शन दिया था। हालांकि, कृपया ध्यान दें कि यह दृष्टिकोण विंडोज़ उत्पन्न कर सकता है जो आपके द्वारा खिड़कियों की बनाई गई सूची को संसाधित करते समय नष्ट कर दिया गया है। इसलिए, विंडोज़ के साथ कुछ करने पर, IsWindow
फ़ंक्शन का उपयोग सुनिश्चित करने के लिए सुनिश्चित करें कि हाथ में खिड़की अभी भी मान्य है (यह अभी भी दौड़ की स्थिति के लिए प्रवण है क्योंकि विंडो IsWindow
पर आपकी कॉल के बीच अमान्य हो सकती है और वास्तव में विंडो तक पहुंच सकती है , लेकिन समय खिड़की बहुत छोटी है)।
यहां इस एल्गोरिदम को लागू करने वाला एक C++ फ़ंक्शन है। यह getToplevelWindows
फ़ंक्शन लागू करता है जो std::vector<HWND>
उत्पन्न करता है जिसमें वर्तमान प्रक्रिया की सभी अपूर्ण विंडो के हैंडल होते हैं।
struct EnumWindowsCallbackArgs {
EnumWindowsCallbackArgs(DWORD p) : pid(p) { }
const DWORD pid;
std::vector<HWND> handles;
};
static BOOL CALLBACK EnumWindowsCallback(HWND hnd, LPARAM lParam)
{
EnumWindowsCallbackArgs *args = (EnumWindowsCallbackArgs *)lParam;
DWORD windowPID;
(void)::GetWindowThreadProcessId(hnd, &windowPID);
if (windowPID == args->pid) {
args->handles.push_back(hnd);
}
return TRUE;
}
std::vector<HWND> getToplevelWindows()
{
EnumWindowsCallbackArgs args(::GetCurrentProcessId());
if (::EnumWindows(&EnumWindowsCallback, (LPARAM) &args) == FALSE) {
// XXX Log error here
return std::vector<HWND>();
}
return args.handles;
}
अद्यतन: इन दिनों (के बारे में चार साल के बाद मैं जवाब दिया) मैं भी प्रत्येक थ्रेड पर EnumThreadWindows
का उपयोग कर आवेदन के traversing the list of threads और उसके बाद विचार किया जाएगा। मैंने देखा कि यह कई मामलों में काफी तेज है।
तुम मेरे भगवान हो। – Hooch
- 1. Win32 में func ptr से मॉड्यूल हैंडल कैसे प्राप्त करें?
- 2. सी # में प्रक्रिया की मुख्य विंडो हैंडल कैसे प्राप्त करें?
- 3. एक WPF विंडो के मूल Win32 हैंडल
- 4. कंसोल हैंडल प्राप्त करें
- 5. एक सी ++ Win32 आवेदन
- 6. डेल्फी: आवेदन क्या है। हैंडल?
- 7. Win32: एक mutex के मालिक/प्रक्रिया को कैसे प्राप्त करें?
- 8. पायथन में एक खुली फ़ाइल के Win32 हैंडल कैसे प्राप्त करें?
- 9. एप्लिकेशन की विंडो हैंडल प्राप्त करें
- 10. एक Win32 विंडो हैंडल मान्य करना
- 11. मैं हैंडल घोषित कैसे करूं? (Win32)
- 12. QThread मुख्य आवेदन
- 13. WinForm ऐप में शीर्षतम रूप का हैंडल कैसे प्राप्त करें?
- 14. विंडो क्लास नाम से विंडो हैंडल प्राप्त करें
- 15. जीडीआई एक डॉटनेट आवेदन में हैंडल
- 16. फोंट की सूची प्राप्त करें (Win32)
- 17. Win32 थ्रेड का नाम कैसे प्राप्त करें?
- 18. किसी प्रक्रिया की सभी विंडो पर हैंडल प्राप्त करें
- 19. मैं पाइथन में मुख्य विंडो के हैंडल कैसे प्राप्त कर सकता हूं?
- 20. सूची दृश्य में प्राप्त आइटम प्राप्त करें Win32 API
- 21. स्ट्रीम के अंतर्निहित फ़ाइल हैंडल कैसे प्राप्त करें?
- 22. WIN32
- 23. अन्य पाइप हैंडल से Win32 सॉकेट हैंडल को कैसे अलग किया जाए?
- 24. Win32 C++
- 25. मुख्य गतिविधि कक्षा या मेरे आवेदन का वर्ग नाम कैसे प्राप्त करें?
- 26. डेल्फी 200 में मुख्य फॉर्म छुपाएं आवेदन
- 27. जैक्स में HttpServletRequest प्राप्त करें/Appfuse आवेदन?
- 28. उपयोगकर्ता वर्तमान खोला आवेदन कैसे प्राप्त करें?
- 29. पैकेज नाम से आवेदन जानकारी प्राप्त करें
- 30. आईओएस: वर्तमान आवेदन भाषा कैसे प्राप्त करें
मुझे लगता है कि "पीड़ित आवेदन" "मेजबान आवेदन" से बेहतर शब्द है। अगर बंदूकधारियों ने मेरे घर में घुसपैठ की और मुझे बंधक बना दिया, तो मैं मेजबान नहीं, पीड़ित होगा। –