“รูปแบบการลักพาตัว” ตามชื่อก็คือการลากรูปแบบของแอพพลิเคชั่นอื่น ๆ หรือแม้แต่โปรแกรมระบบมาอยู่ในรูปแบบของโปรแกรมนี้แบบมีชีวิต การบังคับ "ลักพาตัว" ประเภทนี้โดยไม่ได้รับความยินยอมจากโปรแกรมอื่นอาจมีบทบาทพิเศษในบางสถานการณ์ บทความนี้จะกล่าวถึงเทคโนโลยีและการประยุกต์ใช้แบบฟอร์ม "ลักพาตัว" และยกตัวอย่างโปรแกรม "โจร" ที่สมบูรณ์
ในทางเทคนิคแล้ว เพื่อดำเนินการ "ลักพาตัว" จะต้องมีวัตถุ MDIForm ในโปรแกรม "โจร"
เงื่อนไขที่สองในการตระหนักถึง "การลักพาตัว" คือคุณต้องรู้รูปแบบของ "การลักพาตัว" การทำเช่นนี้ไม่ใช่เรื่องยาก ตัวอย่างเช่น เมื่อเลื่อนเมาส์บนหน้าจอ เราสามารถใช้ฟังก์ชัน API GetCursorPos เพื่อรับพิกัดตำแหน่งปัจจุบันของตัวชี้เมาส์ จากนั้นใช้ฟังก์ชัน API อื่น WindowFromPoint เพื่อรับหมายเลขอ้างอิงของหน้าต่างจุดที่ระบุ หรือใช้ FindWindow เพื่อรับหมายเลขอ้างอิงหน้าต่าง
ด้วยเงื่อนไขสองข้อข้างต้น โปรแกรม "robber" สามารถเริ่มใช้งาน "การลักพาตัว" ได้: ขั้นแรกให้ใช้คำสั่ง GW_CHILD ของฟังก์ชัน API GetWindow เพื่อค้นหาหมายเลขอ้างอิงของหน้าต่างย่อยแรกของโปรแกรม จากนั้นใช้ฟังก์ชัน API อื่น SetParent เป็น "ลักพาตัว" แบบฟอร์ม "ลักพาตัว" ระบุ "ผู้ปกครองใหม่" ซึ่งเป็นตัวจัดการหน้าต่างลูกด้านบน ทันใดนั้น ทั้งสองรูปแบบเดิมที่ไม่เกี่ยวข้องกันมีความสัมพันธ์แบบ "พ่อ-ลูก": หน้าต่าง "ลักพาตัว" ปรากฏขึ้นภายในรูปแบบ "โจร"!
2. ความปลอดภัยของ “การลักพาตัว”
การ "ลักพาตัว" ตามอำเภอใจเป็นสิ่งที่อันตรายมาก อย่างไรก็ตาม สามารถรับประกันความปลอดภัยได้ตราบใดที่ปฏิบัติตามหลักการสองประการต่อไปนี้:
ขั้นแรกก่อนที่จะปิดโปรแกรม "robber" ให้ใช้ฟังก์ชัน SetParent เพื่อ "ปล่อย" แบบฟอร์ม "ลักพาตัว" นั่นคือคืนค่า "พ่อ" ดั้งเดิมของคน "ถูกลักพาตัว"
ประการที่สอง อย่า "ลักพาตัว" หน้าต่างระบบ โดยทั่วไปหน้าต่างระบบประกอบด้วย: หน้าต่างแถบงาน หน้าต่างที่สร้างโดยการกด "Start" หน้าต่างที่สร้างโดยการกด "Ctrl+Alt+Del" หน้าต่างที่สร้างโดยการคลิกขวาที่เมาส์ ฯลฯ
เทคโนโลยี "การลักพาตัว" ถูกนำมาใช้กันอย่างแพร่หลายใน VB ตัวอย่างเช่น การควบคุมสามารถวางไว้ภายในตัวควบคุมคอนเทนเนอร์ในขณะที่โปรแกรมกำลังทำงานอยู่ (เช่น การตั้งค่าปุ่มเป็นหน้าต่างลูกของตัวควบคุมรูปภาพหรือแบบฟอร์ม) หรือการย้ายตัวควบคุมจากคอนเทนเนอร์ ไปอีกแบบหนึ่ง
รหัส:
กำหนดไว้ในแบบส่วนตัวของแบบฟอร์ม
hwndOldParent:HWND;
hwndNotePad:HWND;
ตั้งค่า FormStyle ของหน้าต่างเป็น fsMDIForm
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
hwndNotePad:=FindWindow(PChar('Notepad'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,ที่จับ);
จบ;
ขั้นตอน TForm1.FormDestroy (ผู้ส่ง: TObject);
เริ่ม
Windows.SetParent(hwndNotePad,hwndOldParent);
จบ;
สำหรับข้อมูลเพิ่มเติม โปรดดู: http://lincosoft.go.nease.net/