別のデスクトップからスクリーンショットをキャプチャする

0_o

を使用して2つ目のデスクトップを作成しましたが、CreateDesktop切り替えません。また、Explorer.exeやWinrar.exeのようないくつかのプロセスを作成しました。次に、現在のデスクトップのスクリーンショットをクリップボードに取り込むコードがあります。CreateDesktopとScreenshotはどちらも機能しますが、その新しいデスクトップまたはウィンドウのスクリーンショットは黒いビットマップを返します

これは、現在のデスクトップを返すデスクトップのウィンドウのスクリーンショットです。

// hwnd is handle to winrar or ... created in a new desktop retrieved by EnumDesktopWindow
RECT rc;
GetClientRect(hwnd, &rc);
const HDC hScreenDC = GetDC(nullptr);
const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
const int width = GetDeviceCaps(hScreenDC, HORZRES);
const int height = GetDeviceCaps(hScreenDC, VERTRES);
const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
HBITMAP(SelectObject(hMemoryDC, hBitmap));
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

OpenClipboard(nullptr);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();

DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);

私はこの両方のメソッドをc#で実装しましたが、同じことがそこで起こります。

次のような優れたリソースがあります。

非表示のデスクトップのスクリーンショットをキャプチャする

createdesktopapiを使用して作成されたデスクトップのスクリーンショットを撮ります

C#– VISTA DWMを使用したスクリーンキャプチャ(SHARED DIRECT3D SURFACE)

WM_PRINTメッセージを使用したウィンドウコンテンツのキャプチャ

別のデスクトップから画面をキャプチャする方法は?(CreateDesktop)

また、これは死んだトピックのようなものであり、新しい記事、説明、または解決策はありません。

私はそれらのほとんどを読みましたが、運がありません、これは私が思う最も近い試みでした。また、言語は私にとって重要ではありません:C#、C ++、Pythonまたは...。

0_o

私は解決策を見つけました、それは面白いですが完璧ではありません、ただ私のニーズを解決します。

後にCreateDesktop呼び出すことでOpenDesktop、その後SetThreadDesktopのスクリーンショットコードを使用して、あなたがCreateDesktop、その中にExplorer.exeを作成するためにも必要はありません内部で作成されたウィンドウのスクリーンショットを取得し、あなただけのウィンドウをしたい場合:

CreateDesktopW(L"NewDesktop"); // CreateDesktop code here. This is my function
const HDESK Handle = OpenDesktopW(L"NewDesktop", 0, 0, GENERIC_ALL);
SetThreadDesktop(Handle);

// Above ScreenShot code here ...

スクリーンショットコードにはPrintWindowが必要です。

RECT rc;
GetClientRect(hwnd, &rc);
const HDC hScreenDC = GetDC(nullptr);
const HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
const int width = GetDeviceCaps(hScreenDC, HORZRES);
const int height = GetDeviceCaps(hScreenDC, VERTRES);
const HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
HBITMAP(SelectObject(hMemoryDC, hBitmap));
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);

/// ADDED CODE
PrintWindow(hWnd, hMemoryDC, PW_CLIENTONLY);
///

OpenClipboard(nullptr);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();

DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);

私は、非アクティブなデスクトップ内のwinrar.exeウィンドウを操作しました。これを試してから貼り付けてペイントすると、結果を確認できます。

1つだけあります。スクリーンショットのビットマップの領域全体が黒ですが、必要なウィンドウハンドルを除いて、私は問題ありません。私はすべてのウィンドウを下から上に順番に処理してからそれらを混ぜ合わせる必要があると思います。

これへのすべての追加はありがたいです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GenyMotionでスクリーンショットをキャプチャする

分類Dev

スクリーンショットをキャプチャする方法は?

分類Dev

スクリーンショットをキャプチャする

分類Dev

ブラックリストを使用して現在のアプリケーションのスクリーンショットをキャプチャする

分類Dev

アラートのスクリーンショットをキャプチャする

分類Dev

AndroidでビデオをストリーミングするときにVideoViewのスクリーンショットをキャプチャする方法

分類Dev

Rubyでウィンドウのスクリーンショットをキャプチャする方法

分類Dev

スクリーンキャプチャアプリケーションに別のデスクトップイメージを表示するにはどうすればよいですか?

分類Dev

WindowsスクリーンショットキャプチャビットマップをDirectXテクスチャとしてレンダリングする

分類Dev

pythonseleniumスクリーンショットキャプチャ画像

分類Dev

Windows8.1でPCのスクリーンショット全体をキャプチャする

分類Dev

httpPOSTリクエストのフラッターでTextFormFieldからデータをキャプチャする

分類Dev

Androidモバイルデバイス管理:すべてのアプリでスクリーンショットのキャプチャを無効にする

分類Dev

プライマリ以外の隣接するディスプレイにスクリーンショットをキャプチャするためのショートカットはどれですか?

分類Dev

リモートデスクトップクライアントの「ビットマップキャッシュ」オプションは何をしますか?

分類Dev

データベースからC#(チャットアプリケーション)に送信されるイベントをキャッチする方法

分類Dev

15.10でワインのショートカットを作成する:ランチャーからではなくデスクトップから隠す方法は?

分類Dev

別のアプリケーションからのバックグラウンドブロードキャストを停止する

分類Dev

スプライトキット、アニメーションテクスチャをメモリから削除

分類Dev

境界線のないスクリーンショットのキャプチャ

分類Dev

別のアプリケーションのテキストボックスからキャレットの位置を取得するにはどうすればよいですか?(座標ではなく、テキストボックス内の実際のインデックス)

分類Dev

チーム内のチャットボットを1つのAzureサブスクリプションから別のサブスクリプションに移動する

分類Dev

不足しているPythonでスクリーンショットをキャプチャする方法は?

分類Dev

スクリーンショットのキャプチャと保存

分類Dev

Windows 8OSでのスクリーンショットキャプチャ

分類Dev

フラッターゴールデンテストは空のスクリーンショットをキャプチャします

分類Dev

デスクトップアイコンからアプリケーションスイッチャー

分類Dev

シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

分類Dev

シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

Related 関連記事

  1. 1

    GenyMotionでスクリーンショットをキャプチャする

  2. 2

    スクリーンショットをキャプチャする方法は?

  3. 3

    スクリーンショットをキャプチャする

  4. 4

    ブラックリストを使用して現在のアプリケーションのスクリーンショットをキャプチャする

  5. 5

    アラートのスクリーンショットをキャプチャする

  6. 6

    AndroidでビデオをストリーミングするときにVideoViewのスクリーンショットをキャプチャする方法

  7. 7

    Rubyでウィンドウのスクリーンショットをキャプチャする方法

  8. 8

    スクリーンキャプチャアプリケーションに別のデスクトップイメージを表示するにはどうすればよいですか?

  9. 9

    WindowsスクリーンショットキャプチャビットマップをDirectXテクスチャとしてレンダリングする

  10. 10

    pythonseleniumスクリーンショットキャプチャ画像

  11. 11

    Windows8.1でPCのスクリーンショット全体をキャプチャする

  12. 12

    httpPOSTリクエストのフラッターでTextFormFieldからデータをキャプチャする

  13. 13

    Androidモバイルデバイス管理:すべてのアプリでスクリーンショットのキャプチャを無効にする

  14. 14

    プライマリ以外の隣接するディスプレイにスクリーンショットをキャプチャするためのショートカットはどれですか?

  15. 15

    リモートデスクトップクライアントの「ビットマップキャッシュ」オプションは何をしますか?

  16. 16

    データベースからC#(チャットアプリケーション)に送信されるイベントをキャッチする方法

  17. 17

    15.10でワインのショートカットを作成する:ランチャーからではなくデスクトップから隠す方法は?

  18. 18

    別のアプリケーションからのバックグラウンドブロードキャストを停止する

  19. 19

    スプライトキット、アニメーションテクスチャをメモリから削除

  20. 20

    境界線のないスクリーンショットのキャプチャ

  21. 21

    別のアプリケーションのテキストボックスからキャレットの位置を取得するにはどうすればよいですか?(座標ではなく、テキストボックス内の実際のインデックス)

  22. 22

    チーム内のチャットボットを1つのAzureサブスクリプションから別のサブスクリプションに移動する

  23. 23

    不足しているPythonでスクリーンショットをキャプチャする方法は?

  24. 24

    スクリーンショットのキャプチャと保存

  25. 25

    Windows 8OSでのスクリーンショットキャプチャ

  26. 26

    フラッターゴールデンテストは空のスクリーンショットをキャプチャします

  27. 27

    デスクトップアイコンからアプリケーションスイッチャー

  28. 28

    シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

  29. 29

    シャッター(または他のスクリーングラブツール)を設定して、キーボードショートカットからプリセット領域をキャプチャします

ホットタグ

アーカイブ