เมื่อเคอร์เซอร์ถูกควบคุมโดยเธรดอื่น คุณไม่สามารถใช้อินเทอร์เฟซแอปพลิเคชัน GetCursor() เพื่อขอรับหมายเลขอ้างอิงเคอร์เซอร์ได้ บทความนี้อธิบายวิธีการขอรับหมายเลขอ้างอิงเคอร์เซอร์เมื่อเธรดใดๆ มีการควบคุมเคอร์เซอร์
================================================== =======
-
เมื่อเคอร์เซอร์ถูกควบคุมโดยเธรดอื่น คุณไม่สามารถใช้อินเทอร์เฟซแอปพลิเคชัน GetCursor() เพื่อขอรับหมายเลขอ้างอิงเคอร์เซอร์ได้
บทความนี้อธิบายวิธีการขอรับหมายเลขอ้างอิงเคอร์เซอร์เมื่อเธรดใดๆ มีการควบคุมเคอร์เซอร์
เช่น จะต้องทำอย่างไรเมื่อคุณต้องการวางเคอร์เซอร์ในโปรแกรมจับภาพหน้าจอ
-
ฟังก์ชัน GetCursorHandle: HCURSOR;
var
หน้าต่าง: HWND;
จุด: TPoint;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWord;
เริ่ม
// ตรวจสอบว่าฟอร์มใดมีเคอร์เซอร์
GetCursorPos(พอยต์);
hWindow := WindowFromPoint(pt);
// รับรหัสเธรดของเจ้าของเคอร์เซอร์
dwThreadID := GetWindowThreadPRocessId(hWindow, ไม่มี);
// รับ ID ของเธรดปัจจุบัน
dwCurrentThreadID := GetCurrentThreadId;
// ถ้าเธรดของเจ้าของเคอร์เซอร์ไม่ใช่เธรดปัจจุบัน เธรดของเจ้าของเคอร์เซอร์จะต้องถูกกำหนดให้กับเธรดปัจจุบัน
//จากนั้นเรียก GetCursor() เพื่อรับตัวจัดการเคอร์เซอร์ที่ถูกต้อง (hCursor)
ถ้า (dwCurrentThreadID <> dwThreadID) แล้ว
เริ่ม
ถ้า AttachThreadInput(dwCurrentThreadID, dwThreadID, True) แล้ว
เริ่ม
//รับที่จับเคอร์เซอร์
ผลลัพธ์ := GetCursor;
AttachThreadInput(dwCurrentThreadID, dwThreadID, เท็จ);
จบ;
จบอย่างอื่น
เริ่ม
ผลลัพธ์ := GetCursor;
จบ;
จบ;
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
var
CurPosX, CurPoxY: จำนวนเต็ม;
เคอร์เซอร์ของฉัน: TIcon;
pIconInfo: TIconInfo;
เริ่ม
MyCursor := TIcon สร้าง;
พยายาม
MyCursor.Handle := GetCursorHandle;
// รับตำแหน่งเคอร์เซอร์
GetIconInfo (MyCursor.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//วาดเคอร์เซอร์บนแบบฟอร์ม
Canvas.Draw (CurPoxY, CurPoxY, MyCursor);
ในที่สุด
เมื่อเคอร์เซอร์ถูกควบคุมโดยเธรดอื่น คุณไม่สามารถใช้อินเทอร์เฟซแอปพลิเคชัน GetCursor() เพื่อขอรับหมายเลขอ้างอิงเคอร์เซอร์ได้ บทความนี้อธิบายวิธีการขอรับหมายเลขอ้างอิงเคอร์เซอร์เมื่อเธรดใดๆ มีการควบคุมเคอร์เซอร์
================================================== =======
-
เมื่อเคอร์เซอร์ถูกควบคุมโดยเธรดอื่น คุณไม่สามารถใช้อินเทอร์เฟซแอปพลิเคชัน GetCursor() เพื่อขอรับหมายเลขอ้างอิงเคอร์เซอร์ได้
บทความนี้อธิบายวิธีการขอรับหมายเลขอ้างอิงเคอร์เซอร์เมื่อเธรดใดๆ มีการควบคุมเคอร์เซอร์
เช่น จะทำอย่างไรเมื่อคุณต้องการวางเคอร์เซอร์ในโปรแกรมจับภาพหน้าจอ
-
ฟังก์ชัน GetCursorHandle: HCURSOR;
var
หน้าต่าง: HWND;
จุด: TPoint;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWORD;
เริ่ม
// ตรวจสอบว่าฟอร์มใดมีเคอร์เซอร์
GetCursorPos(พอยต์);
hWindow := WindowFromPoint(pt);
// รับรหัสเธรดของเจ้าของเคอร์เซอร์
dwThreadID := GetWindowThreadProcessId(hWindow, ไม่มี);
// รับ ID ของเธรดปัจจุบัน
dwCurrentThreadID := GetCurrentThreadId;
// ถ้าเธรดของเจ้าของเคอร์เซอร์ไม่ใช่เธรดปัจจุบัน เธรดของเจ้าของเคอร์เซอร์จะต้องถูกกำหนดให้กับเธรดปัจจุบัน
//จากนั้นเรียก GetCursor() เพื่อรับตัวจัดการเคอร์เซอร์ที่ถูกต้อง (hCursor)
ถ้า (dwCurrentThreadID <> dwThreadID) แล้ว
เริ่ม
ถ้า AttachThreadInput(dwCurrentThreadID, dwThreadID, True) แล้ว
เริ่ม
//รับที่จับเคอร์เซอร์
ผลลัพธ์ := GetCursor;
AttachThreadInput(dwCurrentThreadID, dwThreadID, เท็จ);
จบ;
จบอย่างอื่น
เริ่ม
ผลลัพธ์ := GetCursor;
จบ;
จบ;
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
var
CurPosX, CurPoxY: จำนวนเต็ม;
เคอร์เซอร์ของฉัน: TIcon;
pIconInfo: TIconInfo;
เริ่ม
MyCursor := TIcon สร้าง;
พยายาม
MyCursor.Handle := GetCursorHandle;
// รับตำแหน่งเคอร์เซอร์
GetIconInfo (MyCursor.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//วาดเคอร์เซอร์บนแบบฟอร์ม
Canvas.Draw (CurPoxY, CurPoxY, MyCursor);
ในที่สุด
MyCursor.ReleaseHandle;
MyCursor.ฟรี;
จบ;
จบ;
// วิธีแก้ปัญหาอื่น:
ขั้นตอน TForm1.Timer1Timer (ผู้ส่ง: TObject);
var
CI:TCursorInfo;
เริ่ม
CI.cbSize := ขนาดของ(CI);
รับเคอร์เซอร์อินโฟ(CI);
Image1.Picture.Icon.Handle := CI.hCursor;
จบ;
MyCursor.ReleaseHandle;
MyCursor.ฟรี;
จบ;
จบ;
// วิธีแก้ปัญหาอื่น:
ขั้นตอน TForm1.Timer1Timer (ผู้ส่ง: TObject);
var
CI:TCursorInfo;
เริ่ม
CI.cbSize := ขนาดของ(CI);
รับเคอร์เซอร์อินโฟ(CI);
Image1.Picture.Icon.Handle := CI.hCursor;
จบ;