快快请起,真是折煞老夫啊!
是这样的,我们只能怪borland的API帮助对getcursor没有说明清楚,
如果你要得到其他程序/线程的cursor,必须要先把它的输入处理(input process)
挂接到自己的线程里面,代码改动如下:
//在timer事件里不断显示当前cursor
procedure TForm1.Timer1Timer(Sender: TObject);
var ico:Ticon;
hld:hwnd;
threadld:dword;
mp:tpoint;
begin
getcursorpos(mp);
canvas.FillRect(rect(0,0,32,32));
hld:=Windowfrompoint(mp);
threadld:=GetWindowThreadProcessId(hld,nil);
AttachThreadInput(GetCurrentThreadId,threadld,true);
ico:=ticon.Create;
ico.Handle:=getcursor;
AttachThreadInput(GetCurrentThreadId,threadld,false);
canvas.Draw(0,0,ico);
ico.free;
end;