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でアクティブウィンドウのキャプチャを
クリップボードを使用し、フォームのピクチャボックスに貼り付けることは
可能でしょうか
No.1ベストアンサー
- 回答日時:
Windows 7 の場合 PC によって Shift キーを併用しないとprtscr が動作しない等があります。
今回のように、行にブレイクを入れて、一旦プログラムを停止し再開するとOK との事なら
下記のように待ち時間を作ってやれば 多分 取得できるはずです。
待ち時間は、PC の性能によって変わってきますので、0.1 ~ 1.0 位の間で調整して見て下さい
クリップボードにコピーしてから、取得するまでの間にも入れるようにして下さい。
(クリップボードに書き込みされる前に読みにいっている可能性があります)
後は、様子を見ながら、DoEvents を書いているところに入れて見る等試してみて下さい。
Dim sngSt As Single
sngSt = Timer
Do While Timer - sngSt < 0.5
DoEvents
Loop
花ちゃん様
ご回答ありがとうございます。
頂いたコードをピクチャボックスに貼り付ける直前に行うことで解決しました。
当方でも取得するまでに時間がかかるのでは、と思いつき
同じ場所でsleepやloopによる待機を行ったのですがうまくいきませんでした。
ちなみに上記コードだとDo While内のDoEventsが通常1回しか実行されませんが
問題なく動作します。
同様にLoopをなくしてDoEventsを単体で実行させると動作しなくなりますが
その違いが理解できませんでした。
本題と離れてしまいますが、教えていただけると幸いです
No.3
- 回答日時:
実際の状況に近い状態の確認ならこちらの方が。
Private Sub Command1_Click()
Dim sngSt As Single
sngSt = Timer
Dim n As Long
Do While Timer - sngSt < 0.1 '0.5秒間ループを繰り返す(0,5秒間待機する)
DoEvents
n = n + 1
Loop
Debug.Print n
End Sub
これで、どの位 DoEvents が実行されたか解りましたか?
本来は、DoEvents や sleep 等は使用すべきではありませんが、多用しなかったり、ご自分の
ソフト内で問題が起きない範囲内なら...。
No.2
- 回答日時:
>ちなみに上記コードだとDo While内のDoEventsが通常1回しか実行されませんが
>問題なく動作します。
1回しか実行されないってどのようにして確認しましたか?
そもそも何をしているのか理解されていないような。
>同様にLoopをなくしてDoEventsを単体で実行させると動作しなくなりますが
>その違いが理解できませんでした。
下記を試して見て下さい。
Private Sub Command1_Click()
Dim sngSt As Single
sngSt = Timer
Do While Timer - sngSt < 0.5 '0.5秒間ループを繰り返す(0,5秒間待機する)
' DoEvents
Debug.Print "AAAA"
Loop
End Sub
0.5 の所を 1.0 とか 0.1 とかに変えてどのように変化するとかも見ておいて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
プログラミング ソースコード
-
なんかC言語でプログラム書いて...
-
VB上で実行中の無限ループの止め方
-
getchar()の意味・・・
-
sendkeysにてALT+CTRL+INSERTを...
-
C言語で途中までしか、プログラ...
-
VBAで外部プログラムを非表示で...
-
fortran a.exe システムエラー
-
MACで動く実行ファイルをWindow...
-
終了してもプログラムが実行し...
-
一瞬で消える
-
VB.NETで作ったプログラムがサ...
-
初期化は、main関数の外で...
-
NORTiプログラムのROM化
-
VB6やVB.NETはコンパイル無しで...
-
Java Autoupdater
-
インスタンスとは何ですか?
-
JavaScriptでレースゲームを作...
-
C言語のFFTについて教えてくだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
なんかC言語でプログラム書いて...
-
プログラミング ソースコード
-
MACで動く実行ファイルをWindow...
-
実行時エラー429
-
Windows10でDOSゲーム
-
VB上で実行中の無限ループの止め方
-
他のPC上にあるexeを、そのP...
-
sendkeysにてALT+CTRL+INSERTを...
-
VBAで外部プログラムを非表示で...
-
システム資源とは?
-
プロセス間通信について
-
アクセス[ファイルを開かずに、...
-
C言語でプログラムを再起動
-
C言語で途中までしか、プログラ...
-
system関数を使用してsuコマン...
-
終了してもプログラムが実行し...
-
PIC のデータEEPROMに書き込み...
-
実行中の実行ファイルの上書き
-
他の実行ファイルを実行するプ...
おすすめ情報