获取其他线程的光标句柄

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  当光标被另外一个线程掌握时,就无法用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;

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答