keybord_eventを使っての画面キャプチャがうまくできません

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
まこちn+

keybord_eventを使っての画面キャプチャがうまくできません

#1 投稿記事 by まこちn+ »

コマンドボタンをクリックしたら画面をキャプチャして解析するプログラムを作っていますが 2回押さないと正常に動きません
何がおかしいのかさっぱりわからない状態です
どなたか教えてください

コード: 全て選択


Sub MainWnd_CommandButton12_Click() 
    Dim Ret As Long 
                                       : 
    keybd_event(VK_SNAPSHOT,0,0,0) 
    keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0) 
    Ret=IsClipboardFormatAvailable(CF_BITMAP) 
    if Ret = 0 then 
        return 
    endif 
     'クリップボードのデータを格納 
  Ret=OpenClipboard(NULL) 
  hBit=GetClipBordData(CF_BITMAP) 

   
投稿先が違っていたようなので再送
konisiさん すばやいお返事ありがとうございます
Sleep はすでに試したのですが変化ありませんでした
MsgBoxでIsClipboardFormatAvailableのRetを表示すると
2回押しでもBitmapを検出できなくなるので 
もう何処をどう調べればいいか解らなくなってしまいました

どうか 解決策をご指南ください
HSABP

#2 投稿記事 by HSABP »

keybd_event()を呼んだ後にメッセージを処理させます。

コード: 全て選択


'ボタンが押された
Sub MainWnd_CommandButton1_Click()
  keybd_event(VK_SNAPSHOT, &h79, KEYEVENTF_EXTENDEDKEY, 0)
  keybd_event(VK_SNAPSHOT, &h79, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0)
  DoEvents()
  
  If IsClipboardFormatAvailable(CF_BITMAP) <> 0 then 
    MessageBox(hMainWnd,"ok",0,0)
   End If
End Sub

Function DoEvents()
  Dim m As MSG
  While PeekMessage(m,NULL,0,0,PM_REMOVE)
	TranslateMessage(m)
	DispatchMessage(m)
  Wend
  DoEvents= TRUE
End Function
まこちn-

とりあえず コピペでやってみたのですが・・・

#3 投稿記事 by まこちn- »

ご指導ありがとうございます

なにぶん素人なため とりあえずコピペでコンパイルしてみましたが

うまくいかず 2回クリックでも読めなくなりました

知らない コードだらけなので 一つずつ調べてみます
まこちn+-

解決しました

#4 投稿記事 by まこちn+- »

HSABPさん ありがとうございました

konisiさんのご指導のあとで 自分なりにタイミングを疑って

その他のコマンドを前後させていたときに OpenClipBord が

2行になってしまったのが原因でした ほんとに ど素人なミスで

反省しております

本当に ありがとうございました 
返信する