HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0908
bBitBltについて5未解決


b

リンク

2015/9/8(Tue) 19:54:38|NO.71497


#uselib "gdi32.dll" #cfunc CreateDC "CreateDCA" sptr,sptr,sptr,int #func DeleteDC "DeleteDC" int #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int repeat buffer 1, ginfo_dispx, ginfo_dispy ScreenHDC = CreateDC("DISPLAY", 0, 0, 0) BitBlt hdc, 0, 0, ginfo_dispx, ginfo_dispy, ScreenHDC, 0, 0, $00CC0020 | $40000000 gsel 0, 1 gzoom ginfo_winx,ginfo_winy,1,0,0,ginfo_dispx,ginfo_dispy await loop DeleteDC hdcScreen
このスクリプトはディスクトップキャプチャ→スクリーンサイズに縮小しているだけですが、一つ問題が出てきます。
これをやると合わせ鏡効果で大変なことになってしまいます。
このスクリプト以外に例えば自ウインドウの下の部分を”リアルタイムで”キャプチャーとかできないでしょうか?

一度キャプっておいて表示するという方法はありますが、リアルタイムではないので透けたようになったりいろいろ不都合なことが起きます。



この記事に返信する


チャーくん

リンク

2015/9/8(Tue) 20:39:48|NO.71501

XPまでは自分をレイヤーウィンドウにして$40000000抜きでキャプる方法がありましたが…
Vistaからはこの方法はできないみたいです。
他の方法は知りません(他人任せ)



b

リンク

2015/9/8(Tue) 20:54:10|NO.71503


#include "user32.as" #uselib "Magnification.dll" #define WM_NCLBUTTONDOWN $000000A1 #define HTCAPTION 2 #func MagInitialize "MagInitialize" #func MagSetWindowTransform "MagSetWindowTransform" sptr,sptr #func MagSetWindowSource "MagSetWindowSource" sptr,sptr,sptr,sptr,sptr #func MagUninitialize "MagUninitialize" #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 1 #define LWA_ALPHA 2 #define GWL_EXSTYLE -20 #define WC_MAGNIFIER "Magnifier" #define WS_CHILD $40000000 #define MS_CLIPAROUNDCURSOR 0x0002 #define WS_VISIBLE $10000000 onexit *exit MagInitialize onclick gosub *click GetWindowLong hwnd , GWL_EXSTYLE SetWindowLong hwnd , GWL_EXSTYLE , stat | WS_EX_LAYERED winobj WC_MAGNIFIER,"MagnifierWindow",0,WS_CHILD | MS_CLIPAROUNDCURSOR | WS_VISIBLE,ginfo_dispx,ginfo_dispy,0,0 hmag=objinfo_hwnd(stat) repeat MagSetWindowSource hmag,ginfo_wx1+6,ginfo_wy1+26,ginfo_wx2,ginfo_wy2 await loop *exit clrobj MagUninitialize end *click sendmsg hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0 //ウインドウ移動 return
これでbufferが使えれば完璧..
buffer使えるんでしょうか?



b

リンク

2015/9/9(Wed) 00:05:41|NO.71510

Magnificationを使用した方法だと
・Winobjのせいでbutton等のオブジェクトを置けない
・buffer化できないため加工できない
・Magnificationを使用したウインドウ自体を再キャプチャしてそれを加工ということも無理
何かいい方法はないのか....



toto

リンク

2015/9/9(Wed) 03:52:29|NO.71512

とりあえず
>ディスクトップキャプチャ→スクリーンサイズに縮小
>button等のオブジェクト
に関しては以下でできますね。
でも画像を加工できないのは変わらないです。

#include "user32.as" #uselib "Magnification.dll" #func MagInitialize "MagInitialize" #func MagSetWindowTransform "MagSetWindowTransform" sptr,sptr #func MagSetWindowSource "MagSetWindowSource" sptr,sptr,sptr,sptr,sptr #func MagUninitialize "MagUninitialize" #define WS_EX_LAYERED 0x00080000 #define LWA_COLORKEY 1 #define LWA_ALPHA 2 #define GWL_EXSTYLE -20 #define WC_MAGNIFIER "Magnifier" #define WS_CHILD $40000000 #define MS_CLIPAROUNDCURSOR 0x0002 #define WS_VISIBLE $10000000 #module //float作成モジュール。http://sprocket.babyblue.jp/html/hsp_koneta3.htmから拝借 #defcfunc tofloat double p1 temp = p1 return lpeek(temp)>>29&7|(p1<0)<<31|lpeek(temp,4)-(p1!0)*0x38000000<<3 #global #define WS_CLIPSIBLINGS $04000000 onexit *exit screen 0,800,450 //デスクトップが16:9前提 MagInitialize GetWindowLong hwnd , GWL_EXSTYLE SetWindowLong hwnd , GWL_EXSTYLE , stat | WS_EX_LAYERED SetLayeredWindowAttributes hwnd, 0, 255, LWA_ALPHA winobj WC_MAGNIFIER,"MagnifierWindow",0,WS_CHILD | MS_CLIPAROUNDCURSOR | WS_VISIBLE |WS_CLIPSIBLINGS,ginfo_winx,ginfo_winy,0,0 hmag=objinfo_hwnd(stat) #define HWND_TOP $00000000 #define SWP_NOMOVE $00000002 #define SWP_NOSIZE $00000001 pos 380,210 button "exit",*exit SetWindowPos objinfo_hwnd(stat),HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE dim matrix,3,3 factor=double(ginfo_sx)/ginfo_dispx //拡大率 matrix(0,0)=tofloat(factor) matrix(1,1)=tofloat(factor) matrix(2,2)=tofloat(1.0) MagSetWindowTransform hmag,varptr(matrix) MagSetWindowSource hmag,0,0,ginfo_dispx,ginfo_dispy repeat InvalidateRect hmag,0,1 wait 2 loop *exit clrobj MagUninitialize end



b

リンク

2015/9/9(Wed) 21:07:30|NO.71555

自分が考えているソフトウェアですが、
・ディスクトップ縮小表示→解決
・Aero非対応機の擬似エアロ(リアルタイムブラー式)→Bufferに入れられない..

ほかに方法はないのか..
何とかしてキャプれないかな



ONION software Copyright 1997-2023(c) All rights reserved.