|
|
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からはこの方法はできないみたいです。
他の方法は知りません(他人任せ)
|
|
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使えるんでしょうか?
| |
|
2015/9/9(Wed) 00:05:41|NO.71510
Magnificationを使用した方法だと
・Winobjのせいでbutton等のオブジェクトを置けない
・buffer化できないため加工できない
・Magnificationを使用したウインドウ自体を再キャプチャしてそれを加工ということも無理
何かいい方法はないのか....
|
|
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
| |
|
2015/9/9(Wed) 21:07:30|NO.71555
自分が考えているソフトウェアですが、
・ディスクトップ縮小表示→解決
・Aero非対応機の擬似エアロ(リアルタイムブラー式)→Bufferに入れられない..
ほかに方法はないのか..
何とかしてキャプれないかな
|
|