0

最終的には、クリップボードからimgファイル(.bmp、JPEGなど)に画像を保存したいと思います。これは長い道のりなので、画像をウィンドウにロードしたいのですが、GetClipboardData()で成功することはないようです。常にNULLを返します。検索は私を助けませんでした..クリップボードからHBITMAPを取得するためのコード:

HWND hwnd = FindWindow("ConsoleWindowClass", NULL);
if(!OpenClipboard(hwnd)) printf("Error opening clipboard\n");
HBITMAP hbmp;
EmptyClipboard();
Sleep(3000);
if((hbmp = (HBITMAP)GetClipboardData(CF_BITMAP)) == NULL) printf("Error geting clipboard data\n");

出力:クリップボードデータの取得中にエラーが発生しました

GetLastError()をフォーマットなどで使用してみましたが、ファイルが見つかりませんと表示されます。スリープは、クリップボードにデータがあることを確認するために、印刷画面を押すのを待つことです。

4

2 に答える 2

1

ここのコメントを参照してください:

アプリケーションがhwndをNULLに設定してOpenClipboardを呼び出すと、EmptyClipboardはクリップボードの所有者をNULLに設定します。これにより、SetClipboardDataが失敗します。

FindWindownullを返さないことを確認しましたか?もしそうなら、OpenClipboardそれでも成功GetClipboardDataしますが失敗します。私の賭けは、これがまさに起こっていることです。

于 2013-03-23T19:33:11.423 に答える
1

問題はクリップボードが空であるために関係しSleep()EmptyClipboard()
GetClipboardData()失敗します。正確なエラーは、「スレッドでクリップボードが開いていません」です。
これを使用CF_TEXTしない場合、文字列をnullで埋めることはできると思いますがHBITMAP、ビットマップコンテンツのハンドル以外のものを取得することはできません。
Print Screenを押すために以前は使用しSleep(3000)ていましたが、アプリケーションでスナップショットを開いているため、スナップショットがクリップボードに保存されません。削除EmptyClipboard()すると問題が解決するため、プログラムで開く前にクリップボードにスナップショットが既に存在します。

于 2013-03-24T16:11:44.527 に答える