このスレッドはロックされています。記事の閲覧のみとなります。
トップページ > 記事閲覧
アプリケーション独自のマウスカーソルを取得する方法
日時: 2005/04/03 19:34
名前: WoodyBells管理人

WinShotのようなスクリーンキャプチャソフトを開発する場合、

1.画面イメージを取得
2.マウスカーソルを取得
3.画面イメージにマウスカーソルを合成

などというやり方を行います(私だけ?
マウスカーソルを取得する際、GetCursor API を行っても、
アプリケーション固有のマウスカーソルが取得できずWindowsの
標準カーソルになってしまいます。

私も長い間、それで悩んでいたのですが解ってみれば答えは簡単でした。

当該アプリケーションのスレッドにアタッチしてから 、GetCursor を行えば良いのです。

以下、簡単なサンプルです。

var
  cursor_pos: TPoint;
  hCursor: THandle;
  ahwnd:   THandle;
  thread1: THandle;
  thread2: THandle;
begin
  // マウスカーソルの位置を取得し、マウスが乗っているWindowHandleを取得
  GetCursorPos(cursor_pos);
  aHwnd := WindowFromPoint(cursor_pos);

  // スレッドを取得し、アタッチします。このソースの肝です。
  thread1 := GetCurrentThreadId;
  thread2 := GetWindowThreadProcessId(ahwnd, nil);
  if thread2 <> thread1 then
    AttachThreadInput(thread2, thread1, True);
  try

    hCursor := GetCursor; // 独自カーソルのハンドルが取得できます

    // 以降、DrawIconで描画したりカーソルファイルとして保存したり
    // ご自由にどうぞ。

  finally
    if thread2 <> thread1 then
      AttachThreadInput(thread2, thread1, False);
  end;
end;
メンテ

Page: 1 |

Re: アプリケーション独自のマウスカーソルを取得する方法 ( No.1 )
日時: 2006/02/28 13:27
名前: 悩める人

管理人さんと同じくアプリケーションのカーソルが取得できず悩んでました
本当に助かりました
メンテ

Page: 1 |