سؤال

كيف يمكنني العثور على عنوان WNDProc (من نافذة عملية أخرى). حتى لو قمت بحفز DLL ومحاولة العثور عليه مع إما GetClassinfoex () أو GetWindowLong () أو GetWindowLongptr ()، فأنا أحصل دائما على قيم مثل 0xFFFF0SE، وهذا بالتأكيد ليس عنوانا قابل للتنفيذ. إنه وفقا ل MSDN: "... عنوان إجراء النافذة، أو مقبض يمثل العنوان من إجراء النافذة. "

لسوء الحظ، هذا ليس جيدا بما يكفي بالنسبة لي أحتاج إلى العنوان الفعلي. Spy ++ هل المهمة حق معظم الوقت (ولكن حتى أنه يفشل في بعض الأحيان). لذلك يجب أن يكون ممكنا. ثناكس.


تحرير:] مجد كريس becke. لتوفير حل فائق سريع وصحيح لمشكلتي الصغيرة!

هل كانت مفيدة؟

المحلول

ربما تكون متطبقا لأنك تسأل عن الإصدار الخاطئ من WindowProc.

نافذة procs، مثل التطبيقات، تحدث في اثنين من النكهات: ansi و unicode. لا يمكن ل Windows إعادة مؤشر RAW إلى نافذة ANSI إلى تطبيق Unicode أو Versa Versa، حيث سيحاولون استدعاءها بنوع السلسلة الخاطئة.

لذلك، لا توجد وظيفة getwindowindowlongptr. لها ماكرو يحل إلى وظيفتين "حقيقي" يوفر Windows API: GetWindowlongptra و GetWindowlongptrw. إذا كانت النافذة نافذة Unicode، فسيتم استدعاء GetWindowLongPTRA Windows سيعود مقبض بدلا من المؤشر الخام، بحيث يمكنه اعتراض المكالمات (مصنوعة عبر CallWindowProc) و Marshal السلسلة من ANSI إلى Unicode. التحويل المعاكس يحمل في الاتجاه الآخر.

حتى إذا قمت بالاتصال بالوظيفة الصحيحة، فلا يزال قد تحصل على مقبض مرة أخرى - من الممكن تماما أن يقوم رمز ANSI بتصفية نافذة Unicode. لذلك تم استبدال WindowRoc بالكامل بأحد مقابض CallWindowProc.

في هذه الحالة - حظا صعبا أعتقد.

نصائح أخرى

لإدخال إجابة كريس Becke (التي حل مشكلتي، شكرا!):

لذلك، لا توجد وظيفة getwindowindowlongptr. لها ماكرو يحل إلى وظيفتين "حقيقي" يوفر Windows API: GetWindowlongptra و GetWindowlongptrw. إذا كانت النافذة نافذة Unicode، فسيتم استدعاء GetWindowLongPTRA Windows سيعود مقبض بدلا من المؤشر الخام، بحيث يمكنه اعتراض المكالمات (مصنوعة عبر CallWindowProc) و Marshal السلسلة من ANSI إلى Unicode. التحويل المعاكس يحمل في الاتجاه الآخر.

يمكنك التحقق مما إذا كانت النافذة المعنية هي نافذة Unicode أو ANSI عن طريق الاتصال IsWindowUnicode وظيفة. باستخدام هذه المعلومات يمكنك تحديد أي GetWindowLongPtr يجب استدعاء الوظيفة (في وقت التشغيل)،

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top