int totalScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); で仮想画面の縦の長さが正確に取れないのを解決したい

実現したいこと

int totalScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); で仮想画面の縦の長さを正確に取るか
ディスプレイ設定 拡大縮小とレイアウト で何%なのかを取りたい。

前提

画面キャプチャーソフトを作っているのですが拡大縮小設定していると画面が正常に取れない。
の続きのようで失礼します。

発生している問題・エラーメッセージ

int totalScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
で取って
// 画面をキャプチャ
BitBlt(memDC, 0, 0, totalScreenWidth, totalScreenHeight, screenDC, GetSystemMetrics(SM_XVIRTUALSCREEN), GetSystemMetrics(SM_YVIRTUALSCREEN), SRCCOPY);
としても全部の画面が取れない
ディスプレイ設定で
3 2

上記のようになっていて1のディスプレイ設定 拡大縮小とレイアウト が150%だと途中までしか取れない。

ちなみに
// 画面全体の幅と高さを計算
int totalScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN);
totalScreenHeight = totalScreenHeight * 1.5;
とすると取れています。

該当のソースコード

// 画面全体の幅と高さを計算 int totalScreenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); int totalScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); //totalScreenHeight = totalScreenHeight * 1.5; // 画面全体のスクリーンショット用のデバイスコンテキストを作成 HDC screenDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); // ビットマップを作成 HDC memDC = CreateCompatibleDC(screenDC); HBITMAP hBitmap = CreateCompatibleBitmap(screenDC, totalScreenWidth, totalScreenHeight); HBITMAP hOldBitmap = (HBITMAP)SelectObject(memDC, hBitmap); // 画面をキャプチャ BitBlt(memDC, 0, 0, totalScreenWidth, totalScreenHeight, screenDC, GetSystemMetrics(SM_XVIRTUALSCREEN), GetSystemMetrics(SM_YVIRTUALSCREEN), SRCCOPY);

試したこと

ググったりしたけど見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

VisualStudio2022で開発しております。

簡単に言えば
3 2

とディスプレイ設定していて
int totalScreenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
で取ると縦の長さが正確に取れない。

1の画面はディスプレイ設定>拡大縮小>150%
としているのでそれが原因だと思いますが解決方法をご存知でしたら教えて頂きたい。

です。

お忙しいところ大変申し訳ないのですが上記お問い合わせいたします。

コメントを投稿

0 コメント