クリップボードのキャプチャ画像取得 – プログラミング – Home

クリップボードのキャプチャ画像取得
 
通知
すべてクリア

[解決済] クリップボードのキャプチャ画像取得


きた
 きた
(@きた)
ゲスト
結合: 22年前
投稿: 32
Topic starter  

お世話になっております。
デスクトップのイメージをキャプチャして、
すぐに画像を取ってこようと思うのですが、うまく行きません。
最後のIsClipboardFormatAvailableでfalseが返ります。
関数を抜けてから別スレッドでIsClipboardFormatAvailableを呼ぶと
うまく行きます。
VBのサンプルを見るとDoEventsをすれば良いみたいなのですが、
VCでは適当に下記のようDoEventsしてみました。
何とか単一スレッドでちゃんとキャプチャできているかどうか
確かめたいのですが良い方法がありますでしょうか
宜しくお願い致します。

BOOL CPrintScreen::CaptureDesktopTest()
{
BOOL bRet;

// クリップボードを一旦クリア
bRet = ::OpenClipboard( NULL );
bRet = ::EmptyClipboard();
bRet = ::CloseClipboard();

// キャプチャキーを押す
::keybd_event( VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0 );
::keybd_event( VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,
0 );

// DoEvents?
MSG msg;
if( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}

// クリップボードにイメージがあるかどうか調べる。
bRet = ::IsClipboardFormatAvailable( CF_BITMAP );

return bRet;
}


引用未解決
トピックタグ
きた
 きた
(@きた)
ゲスト
結合: 22年前
投稿: 32
Topic starter  

すいません。環境を書き忘れました。
VC++6.0 WinXp


返信引用
きた
 きた
(@きた)
ゲスト
結合: 22年前
投稿: 32
Topic starter  

また、上の関数をデバッグで、一行ずつステップ実行していくと、
IsClipboardFormatAvailableでtrueが返ってきます。
keybd_eventの後にSleep(5000)を入れても結果は同じです。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 21年前
投稿: 33
 

シェルのキーコンビネーションなんか使わないで、自力で表示画面全体のコピーを取得
すればいいんじゃないでしょうか。


返信引用
ぬ
 ぬ
(@ぬ)
ゲスト
結合: 18年前
投稿: 39
 

直接とる場合、GetDC(NULL)で確かいけたような。
ただ、これだとレイヤードウィンドウとオーバレイは取得できないのですよね…。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

DoEventsに対応する部分を10回くらい
連続で呼び出してやるだけでも動く可能性アップかと。


返信引用
きた
 きた
(@きた)
ゲスト
結合: 22年前
投稿: 32
Topic starter  

ご回答ありがとうございました。

>シェルのキーコンビネーションなんか使わないで、自力で表示画面全体のコピーを取得
>すればいいんじゃないでしょうか。

すいません。やり方が検討がつきません。

>直接とる場合、GetDC(NULL)で確かいけたような。
>ただ、これだとレイヤードウィンドウとオーバレイは取得できないのですよね…。

Get(NULL)でデスクトップ全体のDCを取れるのでしょうか。
試してみます。

>DoEventsに対応する部分を10回くらい
>連続で呼び出してやるだけでも動く可能性アップかと。

このご回答を参考に以下のように変えてみると
確実に成功するようになりました。

while( ::PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}

ただ無限ループにならないのか心配しています。
大丈夫なんでしょうか。
とりあえず解決とさせていただきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました