วิธีการรับการจัดการหน้าต่างคอนโซล (HWND)

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 124103
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

คุณอาจเป็นประโยชน์ในการจัดการหน้าต่างที่เกี่ยวข้องกับแอพลิเคชันของคอนโซล Win32 API ให้มีวิธีโดยตรงสำหรับการขอรับหมายเลขอ้างอิงของหน้าต่างเกี่ยวข้องกับแอพลิเคชันของคอนโซล อย่างไรก็ตาม คุณสามารถรับค่าแฮนเดิลของหน้าต่าง โดย FindWindow() เรียก ฟังก์ชันนี้ดึงข้อมูลหมายเลขอ้างอิงของหน้าต่างที่ขึ้นอยู่กับคลาชื่อหรือชื่อของหน้าต่าง

เรียก GetConsoleTitle() เพื่อตรวจสอบชื่อเรื่องของคอนโซลปัจจุบัน แล้ว ใส่ชื่อเรื่องคอนโซลปัจจุบันเพื่อ FindWindow()

ข้อมูลเพิ่มเติม

เนื่องจาก windows หลายอาจมีชื่อเดียวกัน คุณควรเปลี่ยนชื่อเรื่องหน้าต่างคอนโซลปัจจุบันเมื่อต้องการชื่อเรื่องที่ไม่ซ้ำกัน ซึ่งจะช่วยป้องกันไม่ให้มีการส่งกลับค่าแฮนเดิลของหน้าต่างที่ไม่ถูกต้อง ใช้ SetConsoleTitle() เพื่อเปลี่ยนชื่อเรื่องหน้าต่างคอนโซลปัจจุบัน นี่คือกระบวนการ:
  1. เรียก GetConsoleTitle() บันทึกชื่อเรื่องหน้าต่างคอนโซลปัจจุบัน
  2. เรียก SetConsoleTitle() เพื่อเปลี่ยนชื่อเรื่องของคอนโซลการชื่อเรื่องที่ไม่ซ้ำกัน
  3. เรียก Sleep(40) เพื่อให้แน่ใจว่า มีการปรับปรุงชื่อเรื่องของหน้าต่าง
  4. โทร FindWindow (ค่า NULL, uniquetitle), รับ HWND การเรียกนี้กลับ HWND--หรือค่า NULL ถ้าการดำเนินการล้มเหลว
  5. โทร SetConsoleTitle() ด้วยค่าที่ดึงมาจากขั้นตอนที่ 1 การคืนค่าชื่อเรื่องของหน้าต่างต้นฉบับ
คุณควรทดสอบ HWND ที่เป็นผลลัพธ์ ตัวอย่างเช่น คุณสามารถทดสอบเพื่อดูว่า HWND ที่ส่งคืนตรงกับกระบวนการปัจจุบัน โดยการเรียก GetWindowText() บน HWND การเปรียบเทียบผลลัพธ์ ด้วย GetConsoleTitle()

HWND ที่เป็นผลลัพธ์จะไม่มีให้เหมาะสมสำหรับการผลิตค่าแฮนเดิลของหน้าต่างทั้งหมด

ตัวอย่างรหัส

ฟังก์ชันต่อไปนี้ดึงข้อมูลปัจจุบันคอนโซลแอพลิเคชันหน้าต่างจัดการ (HWND) ถ้าฟังก์ชันสำเร็จ ค่าส่งคืนมีหมายเลขอ้างอิงของหน้าต่างคอนโซล ถ้าฟังก์ชันล้มเหลว ค่าส่งคืนมีค่า NULL ตรวจสอบข้อผิดพลาดบางอย่างจะเว้น สำหรับ brevity
   HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Buffer size for console window titles.
       HWND hwndFound;         // This is what is returned to the caller.
       char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
                                           // WindowTitle.
       char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
                                           // WindowTitle.

       // Fetch current window title.

       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

       // Format a "unique" NewWindowTitle.

       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());

       // Change current window title.

       SetConsoleTitle(pszNewWindowTitle);

       // Ensure window title has been updated.

       Sleep(40);

       // Look for NewWindowTitle.

       hwndFound=FindWindow(NULL, pszNewWindowTitle);

       // Restore original window title.

       SetConsoleTitle(pszOldWindowTitle);

       return(hwndFound);
   }
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 124103 - รีวิวครั้งสุดท้าย: 6 มกราคม 2554 - Revision: 2.0
Keywords: 
kbhowto kbwndw kbmt KB124103 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:124103

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com