tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル別アプリの画面を拡大表示させたい
記事No14408
投稿日: 2010/01/22(Fri) 11:26
投稿者クレマ
クレマと申します。
いつも参考にさせていただいております。

以下ご教授もしくはヒントなどいただければ幸いです。
別アプリの画面の一部を静止画でなく常に更新した状態で
vb6でのフォーム上に拡大表示できるようにしたいのです。
録画したいなどではなく単に拡大し表示させたいのです。
どのようにコードをかけばいいのでしょうか?

よろしくお願いします。

[ツリー表示へ]
タイトルRe: 別アプリの画面を拡大表示させたい
記事No14409
投稿日: 2010/01/22(Fri) 18:47
投稿者花ちゃん
> いつも参考にさせていただいております。

だったら、初めにお読み下さいに書いてある内容や、このすぐ上に書いてある事位は
ご存じですよね。

今一度下記をよく読んでその内容に沿った質問をするようにして下さい、そうすれば、
レスも付くかと思いますよ。
 http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

今の状況なら、
>どのようにコードをかけばいいのでしょうか?
自分のやりたい事をコードに書いたら良いのではないでしょうか? とか
それで、貴方は、どこまでできてどこが解らないのですか とか
拡大したい画像を取得して、ピクチャーボックスにでも表示して拡大する作業を
タイマーコントロールでも使って延々と繰返し下さい としか答えられません。

[ツリー表示へ]
タイトルRe^2: 別アプリの画面を拡大表示させたい
記事No14410
投稿日: 2010/01/23(Sat) 09:19
投稿者クレア
> 拡大したい画像を取得して、ピクチャーボックスにでも表示して拡大する作業を
> タイマーコントロールでも使って延々と繰返し下さい としか答えられません。
お返事ありがとうございます。
ピクチャーボックスとタイマーコントロールをヒントに
過去ログを検索した結果できるようになりました。
StretchBltのAPIを利用し表示させました。
動画にこだわっていたのが反省点です。
もっと別な見方ができるように質問する前には気をつけたいと思います。
ありがとうございました

[ツリー表示へ]
タイトルRe: 別アプリの画面を拡大表示させたい
記事No14411
投稿日: 2010/01/23(Sat) 09:31
投稿者魔界の仮面弁士
> 以下ご教授もしくはヒントなどいただければ幸いです。
意図的にそう書かれたのかも知れませんが、一応ツッコミ。
http://www.tt.rim.or.jp/~rudyard/torii009.html

> 別アプリの画面の一部を静止画でなく常に更新した状態で
> vb6でのフォーム上に拡大表示できるようにしたいのです。
拡大鏡表示の為の API もあったりします。
http://msdn.microsoft.com/en-us/library/ms692162.aspx

[ツリー表示へ]
タイトルRe^2: 別アプリの画面を拡大表示させたい
記事No14412
投稿日: 2010/01/24(Sun) 11:36
投稿者クレア
> 意図的にそう書かれたのかも知れませんが、一応ツッコミ。
ご指摘ありがとうございます。今後気をつけます。

> 拡大鏡表示の為の API もあったりします。

あれから問題発生しました。
GetDesktopWindowからStretchBltによるプログラムと
教えていただいたアクセシビリティの拡大鏡でも正常に画像取得できない
アプリがありました。
もしかしたらdirectxを使用すればいいのかと思って今調べ中です。
もしご存知でしたらヒントお願いできればと思います。

[ツリー表示へ]
タイトルRe^3: 別アプリの画面を拡大表示させたい
記事No14416
投稿日: 2010/01/24(Sun) 15:24
投稿者花ちゃん
> あれから問題発生しました。
> GetDesktopWindowからStretchBltによるプログラムと
> 教えていただいたアクセシビリティの拡大鏡でも正常に画像取得できない
> アプリがありました。
> もしかしたらdirectxを使用すればいいのかと思って今調べ中です。
> もしご存知でしたらヒントお願いできればと思います。

今一度下記をよく読んでその内容に沿った質問をするようにして下さい、そうすれば、
レスも付くかと思いますよ。
 http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

と書いていましたが、読まれましたか?
正常に取得できないアプリとだけ書いて、これを見ている人にその状況が理解できますか?
(又、ご自分のハンドルネーム変更しないで下さい。 クレマ→クレア)

[ツリー表示へ]
タイトルRe^3: 別アプリの画面を拡大表示させたい
記事No14417
投稿日: 2010/01/25(Mon) 10:39
投稿者魔界の仮面弁士
> GetDesktopWindowからStretchBltによるプログラムと
> 教えていただいたアクセシビリティの拡大鏡でも正常に画像取得できない
> アプリがありました。

取得できない物は、レイヤードウィンドウでしょうか?
それとも、オーバレイ表示されるアプリ(地デジ関連、Media Player等)でしょうか?
また、ラスタオペレーションコードは何を指定しておられますか?

相手が Layered Window の場合には、CAPTUREBLT が必要です。
http://technet.microsoft.com/ja-jp/magazine/2009.02.windowsconfidential.aspx

ちなみに、拡大鏡ツールなどでマウス操作を下のウィンドウに透過させる際には
WS_EX_TRANSPARENT を利用する事が出来ます。蛇足までに。

[ツリー表示へ]
タイトルRe^4: 別アプリの画面を拡大表示させたい
記事No14418
投稿日: 2010/01/26(Tue) 09:39
投稿者クレア
> 正常に取得できないアプリとだけ書いて、これを見ている人にその状況が理解できますか?
> (又、ご自分のハンドルネーム変更しないで下さい。)

簡略化しすぎました。ごめんなさい。今後注意します。

> 取得できない物は、レイヤードウィンドウでしょうか?
> それとも、オーバレイ表示されるアプリ(地デジ関連、Media Player等)でしょうか?
> また、ラスタオペレーションコードは何を指定しておられますか?
>
お返事ありがとうございます。
GetDesktopWindow→StretchBltとして処理する際
教えていただいたラスターオペレーションを
1.SRCCOPY = &HCC0020
とした場合は正常取得可能でした。
ただし特定のアプリ(地デジやゲームなどです)でブラックアウトしました。

2.CAPTUREBLT = &H40000000
とした場合 すべてのアプリでブラックアウト

オーバレイかレイヤードウィンドウかどうかはわかりません。
知識不足で申し訳ございません。
ご教示いただければ幸いです。

[ツリー表示へ]
タイトルRe^5: 別アプリの画面を拡大表示させたい
記事No14419
投稿日: 2010/01/26(Tue) 10:38
投稿者魔界の仮面弁士
> 1.SRCCOPY = &HCC0020
> 2.CAPTUREBLT = &H40000000

CAPTUREBLT を単独で指定していませんか?

CAPTUREBLT はビットフラグとして利用される物なので、
SRCCOPY などと組み合わせて利用してみてください。

[ツリー表示へ]
タイトルRe^6: 別アプリの画面を拡大表示させたい
記事No14430
投稿日: 2010/01/27(Wed) 18:59
投稿者クレア
> CAPTUREBLT を単独で指定していませんか?
いろいろとご親切にありがとうございます。
.netでは|で連記が出来ると書いてあったのですがVB6ではできないようですね。

   StretchBlt hDC, 0, 0, W, H, hDCSrc, 0, 0, nW, nH, CAPTUREBLT
   StretchBlt hDC, 0, 0, W, H, hDCSrc, 0, 0, nW, nH, SRCCOPY
としたら正常取得しましたがやはり特定のアプリが(前述のとおりかわらず)ブラックアウトします。DCへの登録方法が問題かもと考えてGetWindowDCとGetDCの2パターンで試しても、結果はかわりませんでした。

[ツリー表示へ]
タイトルRe^7: 別アプリの画面を拡大表示させたい
記事No14431
投稿日: 2010/01/27(Wed) 19:25
投稿者魔界の仮面弁士
> > CAPTUREBLT を単独で指定していませんか?
> いろいろとご親切にありがとうございます。
両者を加算(ビット和演算)しましょう。

> .netでは|で連記が出来ると書いてあったのですがVB6ではできないようですね。
C/C++ にて利用されている 『| 演算子』によるビット演算とは、
VB6/VB.NET でいうところの『Or 演算子』によるビット演算の事ですよ。


> StretchBlt hDC, 0, 0, W, H, hDCSrc, 0, 0, nW, nH, CAPTUREBLT
> StretchBlt hDC, 0, 0, W, H, hDCSrc, 0, 0, nW, nH, SRCCOPY
同時に指定してください。
CAPTUREBLT を単独で指定した場合、ブラックアウトするかと思います。


以下蛇足:

VB2005 には、画面コピー用に CopyFromScreen というメソッドが
用意されているのですが、これは .NET Framework 側に実装バグがあるため、
[CaptureBlt] と [SourceCopy] を同時指定ができないそうです。

で、CaptureBlt を単独で指定しても、真っ黒な画像が取得されてしまうだけなので、
その解決のために、結局、BitBlt/StretchBlt API の呼び出しが必要になるのだとか。

http://social.msdn.microsoft.com/forums/ja-JP/csharpgeneralja/thread/1c60509a-ad5d-4ff0-90eb-8a279036a6ec/
http://dobon.net/vb/bbs/log3-33/20025.html

[ツリー表示へ]
タイトルRe^8: 別アプリの画面を拡大表示させたい
記事No14444
投稿日: 2010/01/28(Thu) 18:17
投稿者クレア
> C/C++ にて利用されている 『| 演算子』によるビット演算とは、
> VB6/VB.NET でいうところの『Or 演算子』によるビット演算の事ですよ。
知りませんでした。恥ずかしい限りです。

> CAPTUREBLT を単独で指定した場合、ブラックアウトするかと思います
おしえていただいたor演算子で(SRCCOPY、CAPTUREBLT )を同時指定しても結果が変わりませんでした。
GOMプレイヤーなどの動画再生中でも表示できません。

無知でもうしわけありませんが今一度ご教示願えませんでしょうか。

[ツリー表示へ]