ページ 11

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

Posted: 2010年2月28日(日) 12:33
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を検出できなくなるので 
もう何処をどう調べればいいか解らなくなってしまいました

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

Posted: 2010年2月28日(日) 23:09
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

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

Posted: 2010年3月01日(月) 23:30
by まこちn-
ご指導ありがとうございます

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

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

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

解決しました

Posted: 2010年3月01日(月) 23:59
by まこちn+-
HSABPさん ありがとうございました

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

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

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

反省しております

本当に ありがとうございました