SetParentを使うと黒が透過する
ぴよこ 2013/8/3(Sat) 21:17:02|NO.56112
壁紙を一時的に変えるようなソフトウェアを作っています。
http://www.orangemaker.sakura.ne.jp/labo/memo/sdk-mfc/win7Desktop.html
http://www.placeark.com/program_hsp_sample.htmlのウィンドウの上に他のウィンドウが重なっていないかを判定するのプログラム
を参考にWindows7でAeroを有効にしていてもSetParentでデスクトップウィンドウの子ウィンドウにすることで常に最背面にするプログラムを作りました。
ですがこれを実行すると黒色の部分が透過してしまいました。
何がいけないのでしょうか
#include "user32.as"
#include "kernel32.as"
#module
// 全てのトップレベルウィンドウのハンドルのリストを取得
#deffunc getHwndList array hwndarray,local prm
dim codeenumwnd, 10
codeenumwnd( 0) = $0824448b, $3b08488b, $067c0448, $08488941, $108b0eeb, $24748b56
codeenumwnd( 6) = $8a348908, $5e0840ff, $c240c033, $00000008
VirtualProtect varptr(codeenumwnd), 40, $40, AZSD
prm = 0, 0, 0
EnumWindows varptr(codeenumwnd), varptr(prm)
dim hwndarray, prm(2)
prm = varptr(hwndarray), prm(2), 0
EnumWindows varptr(codeenumwnd), varptr(prm)
return(hwndarray)
//ウィンドウがデスクトップウィンドウか判別する
//myhWnd:判別するハンドル
//返り値1:違う
//返り値0:デスクトップウィンドウ
#deffunc IsDesktopWindow int myhWnd
sdim className, 260
GetClassName myhWnd, varptr(className), 260
s=className
if((s=="Progman")|(s=="WorkerW")){
FindWindowEx myhWnd, 0, "SHELLDLL_DefView", ""
hDt=stat
if (hDt == 0){
return 1
}else{
return 0
}
}
return 1
//ウィンドウを最背面に
#deffunc windowBackground
flg=0
getHwndList hwndarray
foreach hwndarray
IsDesktopWindow hwndarray(cnt)
if (stat == 0){
SetParent hwnd, hwndarray(cnt)
flg=1
break
}
loop
if (flg=0):dialog"最背面にできませんでした":end
return
#global
dialog "jpg|png|bmp|gif|ico",16
if stat==0:end
buffer 1:picload refstr
picX=ginfo_winx:picY=ginfo_winy
bgscr 0,ginfo_dispx,ginfo_dispy,screen_hide,0,0,ginfo_dispx,ginfo_dispy //枠なしメインウィンドウ作成
pos (ginfo_dispx/2)-(picX/2),(ginfo_dispy/2)-(picY/2)
color:boxf 0,0,ginfo_dispx,ginfo_dispy
gcopy 1,0,0,picX,picY
//右クリック&左クリックで終了
gsel 0,1:windowBackground:onclick gosub *rightExit //ウィンドウを最背面にする
stop
*rightExit
getkey rkey,2
getkey lkey,1
if ((rkey==1)&(lkey==1)){
repeat
getkey rkey,2
getkey lkey,1
if ((rkey==0)&(lkey==0)):end
await
loop
}
return