ナビ 制作 公式 ヘルプ


 NADE BBS

 トップ 最新 新規書込 検索

2017-11-16 22:10:17 -木 曜-

338 : Re:範囲を指定してキャプチャ - うぇいく さん


APIを使用する感じで試すと以下のような感じでしょうか。
本来、コピー先となる画像の格納先は、コピー元と互換のあるものを
作成すべきところなのですが、イメージ部品に移すために2度目のコピーが
必要になってしまうため、あえて手を抜いています。

---------------
# キャプチャテスト

Aとはイメージ
Aの幅は100
Aの高さは100

対象ウィンドウとは整数
対象ウィンドウ=GetDesktopWindow()

対象ウィンドウの100,100をAへ部分キャプチャ

●部分キャプチャ(HWNDのX,Yを{グループ}IMGへ)
 hdcとは整数
 rtnとは整数
 hdc=GetDC(HWND)
 # SRCCOPY=$00CC0020
 rtn=BitBlt(IMG→ハンドル,0,0,IMG→幅,IMG→高さ,hdc,X,Y,$00CC0020)
 rtn=ReleaseDC(HWND,hdc)

●GetDC(hWnd)=DLL("user32.dll",
"HDC GetDC(
  HWND hWnd   // ウィンドウのハンドル
)")
●BitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop)=DLL("gdi32.dll",
"BOOL BitBlt(
  HDC hdcDest, // コピー先デバイスコンテキストのハンドル
  int nXDest,  // コピー先長方形の左上隅の x 座標
  int nYDest,  // コピー先長方形の左上隅の y 座標
  int nWidth,  // コピー先長方形の幅
  int nHeight, // コピー先長方形の高さ
  HDC hdcSrc,  // コピー元デバイスコンテキストのハンドル
  int nXSrc,   // コピー元長方形の左上隅の x 座標
  int nYSrc,   // コピー元長方形の左上隅の y 座標
  DWORD dwRop  // ラスタオペレーションコード
)")
●ReleaseDC(hWnd,hDC)=DLL("user32.dll",
"int ReleaseDC(
  HWND hWnd,  // ウィンドウのハンドル
  HDC hDC     // デバイスコンテキストのハンドル
)")
●GetDesktopWindow()=DLL("user32.dll",
"HWND GetDesktopWindow(
)")
---------------


(編集パスワード送信)

子記事

親記事 (No.335)
返信した記事(元) (No.335)

この内容(No.338)に返信

この内容(No.338)をダウンロード

この内容(No.338)のテキスト表示


2017-11-16 22:01:10 -木 曜-

337 : 「デスクトップ」を窓キャプチャからが早いかも - とけい さん


キャプチャ系の命令の時間を計ってみました。

 260ms  ハンドルを指定して「窓ハンドルキャプチャ」する
 260ms  ウィンドウ名を指定して「窓キャプチャ」する
 34ms  画面全体を「窓キャプチャ」して、必要部分を画像コピーする

結果:画面全体をキャプチャして、自力で必要な部分を画像コピーする方法は
   窓ハンドルキャプチャより7倍くらいはやいっぽい
※ 窓キャプチャの引数に「デスクトップ」を指定すると画面全体が撮れます


#---------------ここから 10回やって10で割って1回あたりの時間を測定---------------------
TEMPイメージとはイメージ
その可視はオフ
●窓ハンドルキャプチャB({グループ}objへ,hを)
 hの窓ハンドルサイズ取得
 それを「,」で区切って「x1,y1,x2,y2」へ変数分配
 w=x2-x1
 h=y2-y1
 obj→Wはw
 obj→Hはh
 objを画面クリア
 TEMPイメージへ「デスクトップ」を窓キャプチャ
 TEMPイメージのx1,y1,w,hをobjの0,0へ画像部分コピー

キャプチャ用イメージとはイメージ
その可視はオン

time = システム時間
10回
 //キャプチャ用イメージへ母艦ハンドルを窓ハンドルキャプチャ
 //キャプチャ用イメージへ(母艦のタイトル)を窓キャプチャ
 キャプチャ用イメージへ母艦ハンドルを窓ハンドルキャプチャB
time=(システム時間-time)/10
timeを言う


(編集パスワード送信)

子記事

親記事 (No.335)
返信した記事(元) (No.335)

この内容(No.337)に返信

この内容(No.337)をダウンロード

この内容(No.337)のテキスト表示


2017-11-16 16:52:25 -木 曜-

336 : Re:範囲を指定してキャプチャ - UNOパパ さん


残念ながら、なでしこの命令を使って、画面上(起動アプリ上)の任意の場所を
切り取ってくる命令はない様です。

どの部分に時間がかかっているのか不明ですが、なでしこ側のキャプチャ命令が
遅い様でしたら、その部分をWindowsの「ALT + PrintScreen」で置き換えて
クリップボードへのコピーに置き換えてみていはいかがでしょうか?(クリップ
ボードを使う方法になってしまいますが)。以下、サンプルです。

#---ここから---
「calc.exe」を起動
1秒待つ
ハンドル=「電卓」の窓ハンドル検索
ハンドルに『%{PRTSC}』を窓ハンドルキー送信
0.2秒待つ
capとはイメージ
imgとはイメージ
capの画像は『クリップボード』
capの10,10,100,100をimgの0,0へ画像部分コピー
imgを「{デスクトップ}test.bmp」へ画像保存
capを画面クリア
imgを画面クリア
ハンドルに『%{F4}』を窓ハンドルキー送信
#---ここまで---

電卓を起動して窓ハンドルを取得し、それに対して『%{PRTSC}』で
「ALT + PrintScreen」で電卓全体の画像をクリップボードにコピー
してます。それを一旦イメージオブジェクトとしてなでしこ側で
capに読み取り、そのイメージオブジェクトからimgeに部分コピー
する様にしてます。それをファイルに保存しているので、そこは
遅い気がしますが、キャプチャだけならば、Windowsの機能を使って
いる分、なでしこの命令使うよりは高速かと思います。

(編集パスワード送信)

子記事

親記事 (No.335)
返信した記事(元) (No.335)

この内容(No.336)に返信

この内容(No.336)をダウンロード

この内容(No.336)のテキスト表示


2017-11-15 17:57:27 -水 曜-

335 : 範囲を指定してキャプチャ - マミ さん



特定のウィンドウ内の範囲を指定して静止画キャプチャは可能でしょうか。

窓ハンドルキャプチャor窓ハンドル内キャプチャで連続キャプチャをしていますが、
重いので他の方法に変えようと思っています。

指定範囲のみキャプチャできれば負荷軽減ができると思うのですが
API等含め、指定範囲内キャプチャまたは代替の負荷軽減できる方法をご存知の方いらっしゃいますでしょうか。

出来ればクリップボードは占有したくありませんが、不可避であれば仕方ありません。
あと、行っているのは動画(WebCam等)専用キャプチャではありません、通常のスクリーンショット等で得られる画像のキャプチャです。

(編集パスワード送信)

親記事

この内容(No.335)に返信

この内容(No.335)をダウンロード

この内容(No.335)のテキスト表示

子記事

341 Re:Re:範囲を指定してキャプチャ (17-11-20)
340 Re:Re:範囲を指定してキャプチャ (17-11-20)
339 Re:「デスクトップ」を窓キャプチャからが早いかも (17-11-20)
338 Re:範囲を指定してキャプチャ (17-11-16)
337 「デスクトップ」を窓キャプチャからが早いかも (17-11-16)
336 Re:範囲を指定してキャプチャ (17-11-16)

2017-11-13 03:52:08 -月 曜-

334 : Re:Re:osk.exeはマウスクリックで操作できます - スイカ さん


追伸

おかげさまで、わからなかったinput構造体の中にどういう形で記述すればいいのかがやっと判明しました。
私が見かけたサイトに掲載されてるスキャンコードと実際のは違っていたみたいで
なんとか物理キーボードに偽装してキー送信することが出来ました。

(編集パスワード送信)

子記事

親記事 (No.327)
返信した記事(元) (No.329)

この内容(No.334)に返信

この内容(No.334)をダウンロード

この内容(No.334)のテキスト表示


戻る < < < > > > 次へ



RSS


www.eznavi.net