delphi获取句柄:获取其他线程的光标句柄[DELPHI]
当光标被另外一个线程掌握时,就无法用GetCursor()应用接口获得光标句柄。本文阐述如何在任何线程掌握光标时都能够获取光标句柄。
=========================================================
{
当光标被另外一个线程掌握时,就无法用GetCursor()应用接口获得光标句柄。
本文阐述如何在任何线程掌握光标时都能够获取光标句柄。
例如,想在屏幕截取程序中放置光标时该如何做。
}
function GetCursorHandle: HCURSOR;
var
hWindow: HWND;
pt:
TPoint;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID:
DWORD;
begin
// 检查哪个窗体掌握光标
GetCursorPos(pt);
hWindow :=
WindowFromPoint(pt);
// 获得光标所有者的线程ID
dwThreadID := GetWindowThreadProcessId(hWindow, nil);
// 获得当前线程的ID
dwCurrentThreadID := GetCurrentThreadId;
//
如果光标所有者的线程不是当前线程,就要把光标所有者的线程配属到当前线程。
//然后调用GetCursor()来获得正确的光标句柄(hCursor)。
if (dwCurrentThreadID <> dwThreadID) then
begin
if
AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
begin
//
获得光标句柄
Result := GetCursor;
AttachThreadInput(dwCurrentThreadID,
dwThreadID, False);
end;
end else
begin
Result :=
GetCursor;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CurPosX, CurPoxY:
Integer;
MyCursor: TIcon;
pIconInfo: TIconInfo;
begin
MyCursor :=
TIcon.Create;
try
MyCursor.Handle := GetCursorHandle;
//
获得光标位置
GetIconInfo(MyCursor.Handle, pIconInfo);
CurPosX :=
pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//
在窗体上画出光标
Canvas.Draw(CurPoxY, CurPoxY, MyCursor);
finally
当光标被另外一个线程掌握时,就无法用GetCursor()应用接口获得光标句柄。本文阐述如何在任何线程掌握光标时都能够获取光标句柄。
=========================================================
{
当光标被另外一个线程掌握时,就无法用GetCursor()应用接口获得光标句柄。
本文阐述如何在任何线程掌握光标时都能够获取光标句柄。
例如,想在屏幕截取程序中放置光标时该如何做。
}
function GetCursorHandle: HCURSOR;
var
hWindow: HWND;
pt:
TPoint;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID:
DWORD;
begin
// 检查哪个窗体掌握光标
GetCursorPos(pt);
hWindow :=
WindowFromPoint(pt);
// 获得光标所有者的线程ID
dwThreadID := GetWindowThreadProcessId(hWindow, nil);
// 获得当前线程的ID
dwCurrentThreadID := GetCurrentThreadId;
//
如果光标所有者的线程不是当前线程,就要把光标所有者的线程配属到当前线程。
//然后调用GetCursor()来获得正确的光标句柄(hCursor)。
if (dwCurrentThreadID <> dwThreadID) then
begin
if
AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
begin
//
获得光标句柄
Result := GetCursor;
AttachThreadInput(dwCurrentThreadID,
dwThreadID, False);
end;
end else
begin
Result :=
GetCursor;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CurPosX, CurPoxY:
Integer;
MyCursor: TIcon;
pIconInfo: TIconInfo;
begin
MyCursor :=
TIcon.Create;
try
MyCursor.Handle := GetCursorHandle;
//
获得光标位置
GetIconInfo(MyCursor.Handle, pIconInfo);
CurPosX :=
pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//
在窗体上画出光标
Canvas.Draw(CurPoxY, CurPoxY,
MyCursor);
finally
MyCursor.ReleaseHandle;
MyCursor.Free;
end;
end;
// 另外一种解决办法:
procedure TForm1.Timer1Timer(Sender: TObject);
var
CI:
TCursorInfo;
begin
CI.cbSize :=
SizeOf(CI);
GetCursorInfo(CI);
Image1.Picture.Icon.Handle :=
CI.hCursor;
end;
转载于:https://www.cnblogs.com/piaoliuxia/archive/2008/12/19/1937278.html
- 点赞
- 收藏
- 分享
- 文章举报
- delphi获取句柄:获取其他线程的光标句柄[DELPHI]
- 获取其他线程的光标句柄[DELPHI]
- delphi获取句柄:获取其他线程的光标句柄[DELPHI]
- 获取其他线程的光标句柄[DELPHI]
- delphi 获取其他进程句柄的几种方法
- Delphi 获取其他程序窗口句柄
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)
- 通过api获取句柄控制其他窗体
- 如何用C语言写一个获取窗口句柄和其他信息的小程序.
- 通过api获取句柄控制其他窗体
- Delphi实现获取句柄并发送消息的方法
- DELPHI 跨进程获取其他程序的DBGrid内容
- Delphi获取句柄并发送消息!
- 获取线程句柄的三种方法
- Delphi通过IE窗口句柄获取网页接口(IWebBrowser2)
- 获取真正的进程/线程句柄
- 获取当前线程句柄
- Delphi获取句柄并发送消息
- Delphi获取其它进程窗口句柄的3种方法
- 在其他控件中获取JFrame引用句柄