ในบางกรณี หลังอัปเกรดเป็น Windows 10 เวอร์ชันใหม่ จะเกิดข้อผิดพลาดหรือปัญหาอื่นๆ เมื่อเรียกฟังก์ชัน CreateWindowEx จาก msctf.dll ขณะสร้างหน้าต่างในแอปพลิเคชัน 32-bit บางตัว บทความนี้จะอธิบายว่าฟังก์ชัน CreateWindowEx คืออะไร สาเหตุที่เป็นไปได้ของข้อผิดพลาด และวิธีแก้ไขที่แนะนำ
ทำความเข้าใจฟังก์ชัน CreateWindowEx

แอปพลิเคชัน Windows รวมถึงแอป .NET ที่ใช้ Windows Forms หรือ WPF สร้างหน้าต่างโดยการเรียกฟังก์ชัน CreateWindowExA หรือ CreateWindowExW
ทั้งสองฟังก์ชันเรียกฟังก์ชัน USER32 ร่วมกันซึ่งจะตรวจสอบพารามิเตอร์ เช่น สไตล์หน้าต่างและแฮนด์ที่ระบุ การสร้างหน้าต่างลูก MDI หากระบุสไตล์ขยาย WS_EX_MDICHILD และประมวลผลบริบทการเปิดใช้งานปัจจุบันสำหรับเธรดที่เรียก หากทุกอย่างดีในฝั่ง USER32 ของการเรียก CreateWindowEx จะเรียกไปที่การใช้งานโหมดเคอร์เนล (WIN32K) ของ CreateWindowEx
CreateWindowEx จะดำเนินการต่อไปนี้เมื่อพยายามสร้างออบเจกต์หน้าต่างใหม่:
- ตรวจสอบว่าการสร้างแฮนด์สำหรับออบเจกต์หน้าต่างใหม่จะเกินโควต้าแฮนด์ผู้ใช้สำหรับกระบวนการที่เรียกหรือไม่
- จัดสรรหน่วยความจำสำหรับออบเจกต์หน้าต่างใหม่จากฮีปของเดสก์ท็อป
- เริ่มต้นหน่วยความจำสำหรับออบเจกต์หน้าต่างใหม่
- สร้างแฮนด์สำหรับออบเจกต์หน้าต่างใหม่ในตารางแฮนด์ผู้ใช้
สาเหตุของความล้มเหลวของ CreateWindowEx
เงื่อนไขบางอย่างที่สามารถกระตุ้นปัญหาฟังก์ชัน CreateWindowEx ได้แก่:
- คลาสหน้าต่างที่ระบุไม่มีอยู่
- ใช้สไตล์หน้าต่างหรือสไตล์ขยายที่ไม่ถูกต้อง
- ใช้แฮนด์ผู้ใช้ที่ไม่ถูกต้อง เช่น แฮนด์หน้าต่างและแฮนด์เมนู
- พยายามสร้างหน้าต่างลูกโดยไม่ระบุหน้าต่างผู้ปกครอง
- พยายามสร้างหน้าต่างลูกหรือหน้าต่างที่ถูกครอบครอง และผู้ปกครอง/เจ้าของที่ระบุอยู่บนเดสก์ท็อปที่ต่างจากเธรดที่เรียก
- การสร้างหน้าต่างลูกหรือหน้าต่างที่ถูกครอบครองจะเกินขีดจำกัดหน้าต่างซ้อน
- การสร้างออบเจกต์หน้าต่างใหม่จะเกินโควต้าแฮนด์สำหรับกระบวนการที่เรียก
- ไม่มีฮีปเพียงพอในฮีปของเดสก์ท็อปสำหรับจัดสรรหน่วยความจำให้ออบเจกต์หน้าต่างใหม่
- ไม่มีรายการว่างในตารางแฮนด์ผู้ใช้
แก้ไขปัญหาฟังก์ชัน CreateWindowEx สำหรับแอป 32-bit ใน Windows 10
Microsoft ได้เสนอวิธีแก้ปัญหาชั่วคราวสำหรับปัญหาฟังก์ชัน CreateWindowEx
เพื่อแก้ปัญหานี้ ต้องย้อนกลับการติดตั้ง Windows 10 เป็นเวอร์ชันก่อนหน้า
ตัวเลือกย้อนกลับใน Windows 10 พร้อมใช้งานเป็นเวลา 10 วัน (ในกรณีส่วนใหญ่) หลังจากอัปเกรด Windows 10
การดำเนินการนี้เก็บไฟล์ส่วนตัวไว้ แต่ลบแอปพลิเคชันและไดรเวอร์ที่ติดตั้งหลังอัปเกรด และย้อนกลับการเปลี่ยนแปลงการตั้งค่า
หากตัวเลือกย้อนกลับไม่พร้อมใช้งาน – ให้สำรองไฟล์ส่วนตัว แล้วติดต่อฝ่ายสนับสนุน IT หรือ Microsoft Support เพื่อช่วยกู้คืนอุปกรณ์เป็น Windows 10 เวอร์ชันก่อนหน้า
แค่นี้ก็จบ!
หมายเหตุ: Microsoft กำลังทำงานหาวิธีแก้ไขและจะให้การอัปเดตใน Windows 10 รุ่นหน้า