ab.com コミュニティ
https://www.activebasic.com/forum/

keybord_eventを使っての画面キャプチャがうまくできません
https://www.activebasic.com/forum/viewtopic.php?t=2622
ページ 11

作成者:  まこちn+ [ 2010年2月28日(日) 12:33 ]
記事の件名:  keybord_eventを使っての画面キャプチャがうまくできません

コマンドボタンをクリックしたら画面をキャプチャして解析するプログラムを作っていますが 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 [ 2010年2月28日(日) 23:09 ]
記事の件名: 

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- [ 2010年3月01日(月) 23:30 ]
記事の件名:  とりあえず コピペでやってみたのですが・・・

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

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

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

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

作成者:  まこちn+- [ 2010年3月01日(月) 23:59 ]
記事の件名:  解決しました

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

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

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

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

反省しております

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

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/