麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

獲取其他線程的光標(biāo)句柄[DELPHI]

2019-11-18 18:40:53
字體:
供稿:網(wǎng)友
 

當(dāng)光標(biāo)被另外一個(gè)線程掌握時(shí),就無法用GetCursor()應(yīng)用接口獲得光標(biāo)句柄。本文闡述如何在任何線程掌握光標(biāo)時(shí)都能夠獲取光標(biāo)句柄。

=========================================================

{
 當(dāng)光標(biāo)被另外一個(gè)線程掌握時(shí),就無法用GetCursor()應(yīng)用接口獲得光標(biāo)句柄。
 本文闡述如何在任何線程掌握光標(biāo)時(shí)都能夠獲取光標(biāo)句柄。
 例如,想在屏幕截取程序中放置光標(biāo)時(shí)該如何做。
}

function GetCursorHandle: HCURSOR;
var
  hWindow: HWND;
  pt: TPoint;
  pIconInfo: TIconInfo;
  dwThreadID, dwCurrentThreadID: DWord;
begin
  // 檢查哪個(gè)窗體掌握光標(biāo)
  GetCursorPos(pt);
  hWindow := WindowFromPoint(pt);

  // 獲得光標(biāo)所有者的線程ID
  dwThreadID := GetWindowThreadPRocessId(hWindow, nil);

  // 獲得當(dāng)前線程的ID
  dwCurrentThreadID := GetCurrentThreadId;

  // 如果光標(biāo)所有者的線程不是當(dāng)前線程,就要把光標(biāo)所有者的線程配屬到當(dāng)前線程。
  //然后調(diào)用GetCursor()來獲得正確的光標(biāo)句柄(hCursor)。

  if (dwCurrentThreadID <> dwThreadID) then
  begin
    if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
    begin
      // 獲得光標(biāo)句柄
      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;
    // 獲得光標(biāo)位置
    GetIconInfo(MyCursor.Handle, pIconInfo);
    CurPosX := pIconInfo.xHotspot;
    CurPoxY := pIconInfo.yHotspot;
    // 在窗體上畫出光標(biāo)
    Canvas.Draw(CurPoxY, CurPoxY, MyCursor);
  finally

當(dāng)光標(biāo)被另外一個(gè)線程掌握時(shí),就無法用GetCursor()應(yīng)用接口獲得光標(biāo)句柄。本文闡述如何在任何線程掌握光標(biāo)時(shí)都能夠獲取光標(biāo)句柄。

=========================================================

{
 當(dāng)光標(biāo)被另外一個(gè)線程掌握時(shí),就無法用GetCursor()應(yīng)用接口獲得光標(biāo)句柄。
 本文闡述如何在任何線程掌握光標(biāo)時(shí)都能夠獲取光標(biāo)句柄。
 例如,想在屏幕截取程序中放置光標(biāo)時(shí)該如何做。
}

function GetCursorHandle: HCURSOR;
var
  hWindow: HWND;
  pt: TPoint;
  pIconInfo: TIconInfo;
  dwThreadID, dwCurrentThreadID: DWORD;
begin
  // 檢查哪個(gè)窗體掌握光標(biāo)
  GetCursorPos(pt);
  hWindow := WindowFromPoint(pt);

  // 獲得光標(biāo)所有者的線程ID
  dwThreadID := GetWindowThreadProcessId(hWindow, nil);

  // 獲得當(dāng)前線程的ID
  dwCurrentThreadID := GetCurrentThreadId;

  // 如果光標(biāo)所有者的線程不是當(dāng)前線程,就要把光標(biāo)所有者的線程配屬到當(dāng)前線程。
  //然后調(diào)用GetCursor()來獲得正確的光標(biāo)句柄(hCursor)。

  if (dwCurrentThreadID <> dwThreadID) then
  begin
    if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
    begin
      // 獲得光標(biāo)句柄
      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;
    // 獲得光標(biāo)位置
    GetIconInfo(MyCursor.Handle, pIconInfo);
    CurPosX := pIconInfo.xHotspot;
    CurPoxY := pIconInfo.yHotspot;
    // 在窗體上畫出光標(biāo)
    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;

    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;


上一篇:Delphi與Excel的親密接觸

下一篇:談Delphi下Internet的編程技巧(一)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 日韩精品99久久久久久 | 人成免费网站 | 98色视频| 久久影院免费观看 | 日本aⅴ在线 | 欧美a在线看 | 一级成人毛片 | 国产精品av久久久久久网址 | 一本色道久久99精品综合蜜臀 | 婷婷久久青草热一区二区 | 国产精品久久国产精品 | 成人毛片免费 | 国产在线地址 | 久久精品视频12 | 成年人网站视频免费 | 韩国美女一区 | 精品亚洲成a人在线观看 | 成人一级毛片 | 一区二区三区日韩在线观看 | 免费小毛片 | 在线91观看 | 九九热免费视频在线观看 | 欧美精品一区二区三区在线 | 末成年女av片一区二区 | 欧美人xx| 欧洲黄色一级视频 | 成人18免费观看 | 国产亚洲精品美女久久久 | 久久艹精品| 午夜小视频免费观看 | 成人激情久久 | 国产九色在线播放九色 | 天天看成人免费毛片视频 | 性少妇videosexfreexx入片 | 九一免费国产 | 精品亚洲二区 | 国产精品久久久乱弄 | 日韩在线欧美在线 | 美女视频黄视大全视频免费网址 | 中文字幕伦乱 | 羞羞的视频免费观看 |