- ベストアンサー
指定ウィンドウのアイコンのキャプチャ
はじめまして、よろしくおねがいします。 アイコンだけをキャプチャするソフトを作ろうと思っています。 以下の方法を試したのですがVBのカーソルアイコンが描写されてうまくいきません。 指定ウィンドウのカーソルアイコンをコピーする方法をご教授ねがえないでしょうか。 VBのバージョンは6.0です。 SetCapture (lngHandleWindow) DrawIcon Form1.Picture1.hdc, 0, 0, GetCursor ReleaseCapture
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
確かにアプリケーション独自は取れませんねー Windows標準のカーソルを重ねればいいかなぁと思っていたけど、確かにアプリケーション独自のアイコン情報までは持ってませんね。 VB6環境もないので未検証ですが、履歴に「OleCreatePictureIndirect」のサンプルがあります。 CreatePictureFromHandle関数としてまとまっているので、それを試してみてはいかがでしょうか? http://okweb.jp/kotaeru.php3?q=508999 アイコンハンドルさえ取れているのであれば、できるかも?
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
失礼いたしました アイコン → カーソルアイコン だったのですね。 勘違いしておりました。 アイコンを含んだピクチャ取得はやったことがないのですが、参考までに以下の情報を提供します。 ↓設定一覧 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes ↓ユーザの設定情報 HKEY_CURRENT_USER\Control Panel\Cursors これとマウス座標の取得で、アイコンカーソルをロードすることが可能ですが、いかがでしょう?
お礼
情報提供ありがとうございます。 すみません、レジストリキーの使用方法が知らない人間なので使えません。<<勉強せい! この方法でアプリケーション独自に用意されたカーソルアイコンも取得できるのでしょうか? (マウスカーソルも含めたスクリーンキャプチャソフトってどうやってるんだろ?)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
http://www.mitene.or.jp/~sugisita/vb6_wnd.html ここのページの一番下のサンプル
お礼
1050YEN様、回答ありがとうございます。 紹介して頂いたサンプルを元に、マウスカーソルのアイコンを描画する以下のサンプルを早速作製してみました。 しかし、このプログラム起動をさせ、ペイントで「塗りつぶし」にカーソルアイコンを変化させても描画される アイコンは普通のアイコンから変化しませんでした。 どうやったら、VBのピクチャーボックスにアクティブなウィンドウのカーソルアイコンを描画できるでしょうか? ’フォーム Private Sub Timer1_Timer() Dim hIcon As Long Dim hwndActtiveWindow As Long Dim hwndLast As Long Dim WindowCaption As String Dim nCaptionLength As Long 'アクティブなウィンドウのハンドルを取得 hwndActtiveWindow = GetForegroundWindow If hwndActtiveWindow <> 0 Then 'バッファを確保 WindowCaption = String(250, Chr(0)) nCaptionLength = Len(WindowCaption) 'アクティブウィンドウのキャプションを表示させる Call GetWindowText(hwndActtiveWindow, WindowCaption, nCaptionLength) Label1.Caption = WindowCaption 'アイコンのハンドル取得し、ピクチャーボックスに描画 hIcon = GetClassLong(hwndActtiveWindow, GCL_HCURSOR) If hIcon <> 0 Then Picture1.AutoRedraw = True DrawIcon Picture1.hdc, 0, 0, hIcon Picture1.Refresh Else Label1.Caption = "カーソルのハンドルの取得失敗" End If Else Label1.Caption = "アクティブウィンドウの取得失敗" End If End Sub
お礼
何度もご教授ありがとうございます。 参考ページのCreatePictureFromHandleで、アイコンのハンドルを渡してみたら、見事カーソルを描画してくれました。(シングルウィンドウのアプリで確認) ペイントのような複数ウィンドウをもつアプリでは、成功しませでしたがとりあえずシングルウィンドウ用ということで、サンプルを書置きしておきます。 まだまだ未熟で完成は遠いですが、入り口は見えてきました。 1050YEN様、本当にありがとうございました。 Private Sub Timer1_Timer() Dim hIcon As Long Dim hwndActtiveWindow As Long Dim hwndLast As Long Dim WindowCaption As String Dim nCaptionLength As Long 'アクティブなウィンドウのハンドルを取得 hwndActtiveWindow = GetForegroundWindow If hwndActtiveWindow <> 0 Then 'バッファを確保 WindowCaption = String(250, Chr(0)) nCaptionLength = Len(WindowCaption) 'アクティブウィンドウのキャプションを表示させる Call GetWindowText(hwndActtiveWindow, WindowCaption, nCaptionLength) Label1.Caption = WindowCaption 'アイコンのハンドル取得する hIcon = GetClassLong(hwndActtiveWindow, GCL_HCURSOR) If hIcon <> 0 Then Picture1.AutoRedraw = True '↓http://okweb.jp/kotaeru.php3?q=508999 で定義されている関数 Picture1 = CreatePictureFromHandle(hIcon) Picture1.Refresh Else Label1.Caption = "カーソルのハンドルの取得失敗" End If Else Label1.Caption = "アクティブウィンドウの取得失敗" End If End Sub