C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 >>
■99481  Re[5]: PrintWindowでChromeウインドウを取得する
□投稿者/ 魔界の仮面弁士 -(2022/04/15(Fri) 20:48:01)
    No99478 (ぜん さん) に返信
    > nflagsにはPW_CLIENTONLYのオプションしかないように思えたのですが
    > 他にオプションがあったのですね。

    PrintWindow API は XP/2003 からの機能で、
    PW_CLIENTONLY は Windows 8.1 で追加されたオプションですね。
    現時点ではドキュメントに記載のない隠しフラグになります。


    > オプションを使い分ければもっと良い動作ができるのではないかと思い
    0 だとウィンドウ全体、
    1 だとクライアント領域のみ(PW_CLIENTONLY)
    2 がフルコンテキスト(PW_RENDERFULLCONTENT)のようですが、そのほかに
    3 を渡すこともできるみたいですね。undocumented ゆえ詳細は不明ですが。

    上記以外の値を渡した時は、当方環境では戻り値が FALSE となりました。
    ※エラー 87 (パラメーターが間違っています。)
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

■99483  Re[6]: PrintWindowでChromeウインドウを取得する
□投稿者/ 魔界の仮面弁士 -(2022/04/15(Fri) 21:12:17)
    2022/04/15(Fri) 21:13:57 編集(投稿者)

    No99481 (魔界の仮面弁士) に追記
    >>オプションを使い分ければもっと良い動作ができるのではないかと思い
    > 0 だとウィンドウ全体、
    > 1 だとクライアント領域のみ(PW_CLIENTONLY)
    > 2 がフルコンテキスト(PW_RENDERFULLCONTENT)のようですが、そのほかに
    > 3 を渡すこともできるみたいですね。undocumented ゆえ詳細は不明ですが。

    https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-printwindow
    によれば
      By default, the entire window is copied.
      既定ではウィンドウ全体がコピーされる。
    とあり、PW_CLIENTONLY を指定した場合は
      Only the client area of the window is copied to hdcBlt.
      ウィンドウのクライアント領域のみがhdcBltにコピーされる。
    とあることから、1 (PW_CLIENTONLY) だけでなく 0 も有効であると読み取ることができます。

    2 (PW_RENDERFULLCONTENT) は、WinUser.h の記載から、
    PrintWindow に渡せるのだと推察できますが、このフラグの意味は、
    現時点において、明確に文書化されてはいないようです。

    3 については、当方で実際に試してみたら動いた、という状況です。
    メモ帳で試した場合、1 と 3 は、共に「クライアント領域」を描画しました。


    Chrome の場合は、タイトルバー部にタブを重ねているので、
    ウィンドウ全体の撮影なのかクライアント領域の撮影なのか区別し辛いですが
    手元の環境では、2 と 3 の内容がほぼ同じになりました。
    しかし、たまに違う結果になるウィンドウもありました。謎。

    0 = 黒一色(0x000000)。稀に、左端と下端に、ビジュアル スタイルのウィンドウ枠が現れる事もある。
    1 = 黒一色。
    2 = 0 でウィンドウ枠が出ていた場合は、左端に黒い余白が入る。
    3 = 2 を指定したようなズレは生じず、全体が綺麗に描画された。
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

■99485  Re[7]: PrintWindowでChromeウインドウを取得する
□投稿者/ 魔界の仮面弁士 -(2022/04/15(Fri) 21:51:45)
    No99483 (魔界の仮面弁士) に追記
    > Chrome の場合は、タイトルバー部にタブを重ねているので、
    > ウィンドウ全体の撮影なのかクライアント領域の撮影なのか区別し辛いですが
    > 手元の環境では、2 と 3 の内容がほぼ同じになりました。
    > しかし、たまに違う結果になるウィンドウもありました。謎。
    >
    > 0 = 黒一色(0x000000)。稀に、左端と下端に、ビジュアル スタイルのウィンドウ枠が現れる事もある。
    > 1 = 黒一色。
    > 2 = 0 でウィンドウ枠が出ていた場合は、左端に黒い余白が入る。
    > 3 = 2 を指定したようなズレは生じず、全体が綺麗に描画された。


    参考までに、フラグ 0〜4 に変化させて Chrome を撮影した結果を載せておきます。
    前半は通常サイズのウィンドウで、後半は最小化されている状態で PrintWindow したものです。

    https://www.vb-user.net/junk/replySamples/2022.04.15.21.45/PrintWindow.apng

    ※PNG アニメで保存しているので、IE 以外のブラウザで見てください。
記事No.99458 のレス / END /過去ログ173より / 関連記事表示
削除チェック/

■99480  Re[5]: PrintWindowでChromeウインドウを取得する
□投稿者/ ぜん -(2022/04/15(Fri) 20:36:43)
    https://jpdebug.com/p/117894

    これを見ると
    二つしかオプションなさそうですね。

    どうもありがとうございました。
記事No.99458 のレス / END /過去ログ173より / 関連記事表示
削除チェック/

■99482  Re[6]: PrintWindowでChromeウインドウを取得する
□投稿者/ ぜん -(2022/04/15(Fri) 20:53:50)
    ありがとうございます。

    気になっているのですが
    オプション0と1って違うものなのでしょうか?
    https://jpdebug.com/p/117894

    このページでは
    "Only the client area of the window is copied to hdcBlt. By default, the entire window is copied.")]
    と書かれてありますが、
    デフォルトの設定だと1を選んだとしてもウインドウ全体を取得することになるが、
    何か設定するとクライアント領域のみを取得できるという意味なのでしょうか??
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

■99484  Re[7]: PrintWindowでChromeウインドウを取得する
□投稿者/ ぜん -(2022/04/15(Fri) 21:40:22)
    文書化されていないオプションが存在するのですね。
    ユーザーがどうやって発見したのか気になりますね。
    どうもありがとうございました。
記事No.99458 のレス / END /過去ログ173より / 関連記事表示
削除チェック/

■99486  Re[8]: PrintWindowでChromeウインドウを取得する
□投稿者/ ぜん -(2022/04/15(Fri) 22:22:43)
    2よりも謎の設定の3の方が
    黒い枠が入らないのでベターということなのですね。

    ちなみに2で撮った時の画像で左端に黒い帯が出るのはなぜなのでしょうか?

    > 2 = 0 でウィンドウ枠が出ていた場合は、左端に黒い余白が入る。
    ここのウインドウ枠が出ていた場合、
    というのは別のウインドウがオーバーラップしていた場合という意味ですか?
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

■99506  Re[9]: PrintWindowでChromeウインドウを取得する
□投稿者/ 魔界の仮面弁士 -(2022/04/20(Wed) 02:38:31)
    No99486 (ぜん さん) に返信
    > 2よりも謎の設定の3の方が
    > 黒い枠が入らないのでベターということなのですね。

    どうでしょうね。現時点では undocumented なので、ベターかどうかは誰も保証できないと思います。
    try & error で、結果から自己判断するしかないところですが、そもそも再現手順すら明確ではなく…。


    当方環境では、対 Chrome に「0」を指定した時に、ビジュアル スタイルのウィンドウ枠が現れる事があり、
    その状況下においては、「2」よりも「3」の方が有効な結果が得られています。

    しかし、同じ PC 上の Chrome でも、「0」でそのようなウィンドウ枠が出ないこともあり、
    その場合は「2」と「3」に違いがみられません。

    自分の環境の Chrome では、 2 と 3 が同じ結果になることの方が多かったですが、
    先に書いたように、2 と 3 が違う結果になることもあるんですよね…。

    また、Chrome ではなくメモ帳(notepad)を相手にした場合にはさらに状況が変わり、
    「1」と「3」が同じ内容で、「2」とは異なる結果になっていたりもします。


    謎ですね。


    > ちなみに2で撮った時の画像で左端に黒い帯が出るのはなぜなのでしょうか?
    先の動画でいうと、0 に映り込んだ枠線部に相当しているように見えますね。
    https://www.vb-user.net/junk/replySamples/2022.04.15.21.45/PrintWindow.apng


    >>2 = 0 でウィンドウ枠が出ていた場合は、左端に黒い余白が入る。
    > ここのウインドウ枠が出ていた場合、
    > というのは別のウインドウがオーバーラップしていた場合という意味ですか?
    他のウィンドウとの重なり合わせは関係なかったですね。

    枠が撮影される Chrome インスタンスと、
    枠が撮影されない Chrome インスタンスの差は発見できませんでしたし、
    どのように起動すると、その違いが生じるのかも現時点では不明です。
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

■99507  Re[10]: PrintWindowでChromeウインドウを取得する
□投稿者/ radian -(2022/04/20(Wed) 09:07:24)
    No99506 (魔界の仮面弁士 さん) に返信
    > ■No99486 (ぜん さん) に返信
    >>2よりも謎の設定の3の方が
    >>黒い枠が入らないのでベターということなのですね。
    >
    > どうでしょうね。現時点では undocumented なので、ベターかどうかは誰も保証できないと思います。
    > try & error で、結果から自己判断するしかないところですが、そもそも再現手順すら明確ではなく…。

    テスト可能な特定PCでしか使わない前提ならいいんですが、
    不特定多数に配布する前提だとドキュメントにもSDKのヘッダにも無いオプションを指定するのは
    ちょっと怖い気はしますね。
記事No.99458 のレス /過去ログ173より / 関連記事表示
削除チェック/

<前の20件

<< 0 | 1 >>

パスワード/

- Child Tree -