Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Συμπτώματα

Επαναλαμβανόμενες κλήσεις σε λειτουργίες διαχείρισης παράθυρο που εξάγονται από το API USER32. DLL ενδέχεται να επιστρέψει, χωρίς να εκτελέσει τη λειτουργία που ζητήθηκε και χωρίς να ορίσετε έναν κωδικό σφάλματος. Αυτό συμβαίνει συνήθως σε εφαρμογές με μια ιεραρχία ένθεσης παράθυρο. Από τα συμπτώματα που ενδέχεται να αντιμετωπίσετε:

  • Εφαρμογές με μια ιεραρχία ένθεσης παράθυρο αποτύχει να αλλάξετε εξαρτημένα παράθυρα σωστά όταν αλλάξει το μέγεθος του παραθύρου του πλαισίου. Τα Windows έχουν μετακινηθεί ή/και αλλαγή μεγέθους, καλώντας τον αριθμό MoveWindow, SetWindowPos ή DeferWindowPos.

  • Παράθυρο μηνυμάτων δεν μεταβιβάζονται windows γονικό ή εξαρτημένα παράθυρα, όπως αναμένεται. DefWindowProc δεν μπορεί να μεταδώσει με επιτυχία μηνύματα στο γονικό παράθυρο ή εξαρτημένα παράθυρα από το παράθυρο λαμβάνει το μήνυμα.

  • Παράθυρο μηνύματα αποστέλλονται σε ένα παράθυρο από την κλήση SendMessage, SendMessageTimeout ή SendMessageCallback δεν λαμβάνονται από το καθορισμένο παράθυρο.

Επιπλέον, οι εφαρμογές που διαφορετικά λειτουργεί κανονικά ενδέχεται επίσης να αντιμετωπίσετε τα συμπτώματα που περιγράφονται παραπάνω, αν WH_CALLWNDPROC ή WH_CALLWNDPROCRET των άγκιστρων παραθύρου ορίζονται σε νήματα στην εφαρμογή που κατέχουν τα παράθυρα. Άγκιστρων παραθύρου μπορεί να οριστεί σε ένα συγκεκριμένο νήμα ή σε όλα τα νήματα UI καλώντας τη συνάρτηση SetWindowsHookEx.

Αιτία

Αυτή η συμπεριφορά προκαλείται από Windows αδυναμίας να αναπτυχθεί η στοίβα πυρήνα του νήματος κλήσης για την εκτέλεση της ζητούμενης λειτουργίας. Λόγω στοίβα πυρήνα πρόσθετες χειρισμό διαδικασίες που είναι απαραίτητη για την x64 περιβάλλον των Windows, η στοίβα πυρήνα μπορεί να χρησιμοποιηθεί με ταχύτερο ρυθμό από σε ένα x86 περιβάλλον των Windows, όταν κάνουν περιοδικότητας κλήσεις σε λειτουργίες διαχείρισης παράθυρο εξαγωγή από το API USER32. DLL. Αν και τα συμπτώματα που περιγράφονται σε αυτό το άρθρο είναι πιο πιθανό να προκύψει σε x64 πλατφόρμες των Windows, είναι πιθανό για κλήσεις περιοδικότητας να καταναλώσουν ένα νήμα της στοίβας πυρήνα σε x86 πλατφόρμες των Windows.

Επίλυση

Μπορούν να χρησιμοποιηθούν οι παρακάτω λύσεις για να επιλύσετε αυτό το ζήτημα

  1. Αλλαγή μεγέθους εξαρτημένα παράθυρα όταν Χειρισμός μηνυμάτων παραθύρου WM_WINDOWPOSCHANGED αντί να διέρχεται το μήνυμα για να DefWindowProc.

  2. Αλλάξτε το μέγεθος του εξαρτημένα παράθυρα ασύγχρονα όταν προσαρμόζεται το γονικό παράθυρο αντί για αλλαγή μεγέθους εξαρτημένα παράθυρα κατά την επεξεργασία του WM_WINDOWPOSCHANGED ή WM_SIZE παράθυρο μηνύματος.

  3. Επανασχεδιασμό την εφαρμογή περιβάλλοντος εργασίας Χρήστη για να μειώσετε το βάθος ένθετο παράθυρο.

Περισσότερες πληροφορίες

Τμήματα του υποσυστήματος Win32 υλοποιούνται σε ένα πρόγραμμα οδήγησης λειτουργίας πυρήνα (WIN32K. SYS). Κλήσεις σε συναρτήσεις που εξάγονται από το API USER32. DLL για να αλλάξετε την κατάσταση ενός παραθύρου, συμπεριλαμβανομένου του μεγέθους και της θέσης, θα καλούν WIN32K. SYS για την εκτέλεση της λειτουργίας που ζητήθηκε. Λειτουργίες που τροποποιούν την κατάσταση ενός παραθύρου συνήθως έχει ως αποτέλεσμα το παράθυρο μηνυμάτων που αποστέλλονται στο παράθυρο τροποποιείται, όπου WIN32K. SYS κάνει μια επεξήγηση λειτουργίας χρήστη να καλέσει τη διαδικασία παραθύρου του παραθύρου που τροποποιείται. Για παράδειγμα, WIN32K. SYS θα στείλει ένα παράθυρο WM_WINDOWPOSCHANGING παράθυρο μηνύματος και ένα μήνυμα παραθύρου WM_WINDOWPOSCHANGED όταν το μέγεθος ή/και τη θέση του παραθύρου τροποποιούνται με την κλήση της συνάρτησης SetWindowPos. DefWindowProc θα στείλει το καθορισμένο παράθυρο WM_SIZE μήνυμα όταν καλείται με ένα μήνυμα WM_WINDOWPOSCHANGED και έχει αλλάξει το μέγεθος του παραθύρου. Οι εφαρμογές συνήθως αλλάζει, εξαρτημένα παράθυρα το γονικό παράθυρο λαμβάνει μια WM_WINDOWPOSCHANGED ή WM_SIZE παράθυρο μηνύματος, που οδηγεί σε τηλεφωνήματα περιοδικότητας σε WIN32K. SYS για ιεραρχίες ένθεσης παράθυρο. Εφαρμογές που διαφορετικά λειτουργεί κανονικά ενδέχεται επίσης να αντιμετωπίσετε τα συμπτώματα που περιγράφονται σε αυτό το άρθρο όταν άγκιστρα WH_CALLWNDPROC ή WH_CALLWNDPROCRET που έχουν οριστεί για τα νήματα της διεργασίας. Αυτό επιβάλλεται λόγω ο χώρος στοίβας πυρήνα πρόσθετες δηλαδή όταν καταναλώνονται WIN32K. SYS χειρίζεται την κλήση διαδικασιών άγκιστρο. Κλήση SendMessage για να στείλετε ένα μήνυμα παραθύρου σε ένα παράθυρο συνομιλίας που ανήκουν συνήθως θα καλέσει τη διαδικασία παραθύρου του παραθύρου που λαμβάνει το μήνυμα χωρίς να χρειάζεται να καλούν WIN32K. SYS. Ωστόσο, SendMessage, θα καλούν WIN32K. SYS, εάν υπάρχουν άγκιστρα WH_CALLWNDPROC ή WH_CALLWNDPROCRET αγκιστρώνει το σύνολο σε συνομιλίας, ως WIN32K. SYS διαχειρίζεται τα άγκιστρα και λαβές κλήση διαδικασιών άγκιστρο. Όπως προαναφέρεται, DefWindowProc θα στείλει το καθορισμένο παράθυρο WM_SIZE μήνυμα όταν καλείται με ένα μήνυμα WM_WINDOWPOSCHANGED και έχει αλλάξει το μέγεθος του παραθύρου. Ένα άγκιστρο WH_CALLWNDPROC ή ένα WH_CALLWNDPROCRET θα προκαλέσει την κλήση SendMessage DefWindowProc πραγματοποιεί Μετάβαση σε κατάσταση λειτουργίας πυρήνα προκειμένου να καλούν τη διαδικασία αγκίστρου. Αλλαγή μεγέθους εξαρτημένα παράθυρα όταν Χειρισμός μηνυμάτων παραθύρου WM_WINDOWPOSCHANGED αντί για WM_SIZE παράθυρο μηνυμάτων θα μειώσει χρήση στοίβας πυρήνα, εξαλείφοντας την ανάγκη για SendMessage Μετάβαση σε λειτουργία πυρήνα με σειρά καλέσουν διαδικασίες αγκίστρου. Οι προγραμματιστές εφαρμογών Windows φόρμες που αντιμετωπίζετε αυτό το ζήτημα πρέπει να ανατρέξουν στο άρθρο KB 953934για περισσότερες πληροφορίες.

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×