الأعراض

المكالمات العودية لوظائف إدارة إطار تصدرها USER32. قد ترجع DLL دون القيام بالعملية المطلوبة ودون تعيين رمز خطأ. يحدث هذا عادة في تطبيقات ذات تسلسل هرمي إطار متداخلة بدرجة كبيرة. بين الأعراض قد تواجه:

  • تفشل تطبيقات ذات تسلسل هرمي إطار متداخلة بدرجة كبيرة لتغيير حجم الإطارات التابعة بشكل صحيح عند تغيير حجم إطار الإطار. Windows نقل و/أو تغيير حجمه باستدعاء MoveWindow أو SetWindowPos أو ديفيرويندووبوس.

  • لم يتم نشر رسائل إطار windows الأصلية أو الإطارات التابعة كما هو متوقع. قد لا تنشر ديفويندووبروك رسائل إلى الإطار الأصل أو الإطارات التابعة لإطار تلقي الرسالة بنجاح.

  • إرسال رسائل إطار إلى إطار باستدعاء دالة SendMessage، لم يتم استلام SendMessageTimeout أو سيندميساجيكالباك بالإطار المحدد.

بالإضافة إلى ذلك، التطبيقات إلا تعمل بشكل طبيعي قد أيضا تواجه الأعراض الموضحة أعلاه إذا تم تعيين مؤشرات ربط إطار WH_CALLWNDPROC أو WH_CALLWNDPROCRET على مؤشرات ترابط في التطبيق لديك windows. يمكن تعيين مؤشرات ربط إطار على كمبيوتر معين أو على كافة مؤشرات ترابط واجهة المستخدم عن طريق استدعاء الدالة SetWindowsHookEx.

السبب

يعتبر هذا السلوك نتيجة لعدم القدرة على زيادة حجم رصة kernel من مؤشر ترابط استدعاء لتنفيذ العملية المطلوبة Windows. سبب رصة kernel إضافية معالجة الإجراءات الضرورية في x64 بيئة Windows، رصة kernel يمكن أن يكون المستهلكة بمعدل أسرع في x86 بيئة Windows عند إجراء متداخل استدعاء إلى وظائف إدارة إطار تصدير USER32. DLL. على الرغم من أن الأعراض الموضحة في هذه المقالة من المرجح أن تحدث في x64 الأنظمة الأساسية ل Windows، فمن الممكن للمكالمات العودية لاستعمال مكدس مؤشر ترابط kernel على x86 الأنظمة الأساسية ل Windows.

الحل

يمكن استخدام الحلول التالية لحل هذه المشكلة

  1. تغيير حجم الإطارات التابعة عند التعامل مع الرسائل إطار WM_WINDOWPOSCHANGED بدلاً من تمريرها إلى ديفويندووبروك.

  2. تغيير حجم الإطارات التابعة بشكل متزامن عند تغيير حجم الإطار الأصل بدلاً من تغيير حجم الإطارات التابعة أثناء معالجة رسالة إطار WM_SIZE أو في WM_WINDOWPOSCHANGED.

  3. إعادة تصميم واجهة مستخدم التطبيق لتقليل عمق النافذة المتداخلة.

مزيد من المعلومات

يتم تنفيذ أجزاء من النظام الفرعي Win32 في برنامج تشغيل جهاز وضع kernel (WIN32K. SYS). استدعاءات الدالات التي تم تصديرها ب USER32. DLL لتغيير حالة إطار الحجم والموضع، سيدعو إلى WIN32K. SYS لتنفيذ العملية المطلوبة. يؤدي وظائف عادة بتعديل حالة إطار إطار الرسائل المرسلة إلى إطار يتم تعديله، حيث WIN32K. SYS يجعل وسيلة شرح وضع مستخدم لاستدعاء الإجراء إطار الإطار يتم تعديله. على سبيل المثال، WIN32K. SYS سترسل إطار رسالة إطار WM_WINDOWPOSCHANGING ورسالة إطار WM_WINDOWPOSCHANGED عند تعديل حجم و/أو موضع النافذة عن طريق استدعاء الدالة SetWindowPos. إرسال ديفويندووبروك الإطار المحدد رسالة WM_SIZE عند استدعاء بواسطة رسالة WM_WINDOWPOSCHANGED وتم تغيير حجم الإطار. تغيير التطبيقات الإطارات التابعة عند تلقي الإطار الأصل رسالة إطار WM_WINDOWPOSCHANGED أو WM_SIZE، الأمر الذي يؤدي إلى إجراء استدعاءات التداخل في WIN32K. SYS للتدرجات الهرمية لإطار المتداخلة بدرجة كبيرة. أيضا قد تواجه التطبيقات التي تعمل عادة إلا الأعراض الموضحة في هذه المقالة عند تعيين خطافات WH_CALLWNDPROC أو WH_CALLWNDPROCRET على مؤشرات الترابط في العملية. ويرجع مساحة مكدس kernel الإضافية التي يتم استهلاكها عند WIN32K. SYS معالجة استدعاء الإجراءات موضع الإضافة في الروتين. عادة استدعاء دالة SendMessage لإرسال رسالة إطار لإطار المملوكة مؤشر ترابط استدعاء سيتم استدعاء الإجراء إطار الإطار تلقي الرسالة دون الحاجة إلى الاتصال في WIN32K. SYS. ومع ذلك، سوف تستدعي دالة SendMessage WIN32K. SYS إذا كان هناك مواقع ربط WH_CALLWNDPROC أو WH_CALLWNDPROCRET ربط مجموعة على مؤشر ترابط استدعاء ك WIN32K. SYS إدارة هوكس ومقابض استدعاء الإجراءات موضع الإضافة في الروتين. كما ذكر أعلاه، ديفويندووبروك سوف ترسل الإطار المحدد في رسالة WM_SIZE عند استدعاء بواسطة رسالة WM_WINDOWPOSCHANGED وتم تغيير حجم الإطار. ربط WH_CALLWNDPROC أو WH_CALLWNDPROCRET يؤدي استدعاء دالة SendMessage يجعل ديفويندووبروك بمرحلة انتقالية في وضع kernel لاستدعاء الإجراءات موضع الإضافة في الروتين. تغيير حجم الإطارات التابعة عند معالجة رسائل إطار WM_WINDOWPOSCHANGED بدلاً من WM_SIZE إطار رسائل إلى تقليل استخدام مكدس kernel بالاستغناء عن SendMessage للانتقال إلى وضع kernel في أمر استدعاء الإجراءات موضع الإضافة في الروتين. يجب على مطوري تطبيقات Windows Forms التي تواجه هذه المشكلة الرجوع إلى مقالة قاعدة المعارف 953934للحصول على معلومات إضافية.

هل تحتاج إلى مزيد من المساعدة؟

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Microsoft Insider

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

ما مدى رضاك عن جودة اللغة؟
ما الذي أثّر في تجربتك؟

نشكرك على ملاحظاتك!

×