Windows7-VB6でのアクティブウィンドウキャプチャ
Windows7-VB6でのアクティブウィンドウキャプチャ
お世話になります。
Private Declare Sub keybd_event Lib "User32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_LMENU = &HA4
Private Const VK_SNAPSHOT = &H2C
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Command1.SetFocus
DoEvents
Load form2
Clipboard.Clear
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
DoEvents
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
※form2.picPrint.Picture = Clipboard.GetData()
上記コードはWinXPであれば問題なく動作するのですが
Win7ではform2のピクチャボックスにイメージが貼り付けられません
※行にブレイクを入れて、一旦プログラムを停止し再開するとOKで
その他にもALTキーの送信をしないでprtscrのみでも動作可能です。
win7-vb6でアクティブウィンドウのキャプチャを
クリップボードを使用し、フォームのピクチャボックスに貼り付けることは
可能でしょうか
お礼
何度もご教授ありがとうございます。 参考ページの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