アプリケーション独自のマウスカーソルを取得する方法 |
- 日時: 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;
|
|