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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0625
ポチ多重ウインドウのタスクバーアイコンを非表示にしたいのですが・・・。8解決


ポチ

リンク

2011/6/25(Sat) 23:21:17|NO.39836

多重ウインドウのタスクバーアイコンを非表示にしたいのですが・・・。
色々やってみましたが、ID1,ID2の方が非表示に出来ません。
(bgscr 1,400,400,10,・・・にしても上手く行きません)。
(WindowsXPおよびWindows7)

http://blog.livedoor.jp/leearu/archives/50052711.html
(参考)


#uselib "user32.dll" #func SetWindowLong "SetWindowLongA" int,int,int hwnd_=hwnd bgscr 3,1,1,2,10//踏み台ウィンドウ SetWindowLong hwnd_,-8,hwnd//踏み台を親に buffer 3,1,1,10 bgscr 0,1,1,2 #include "hspmath.as" #include "d3m.hsp" #uselib "user32.dll" #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #const LWA_COLORKEY 1 ;透明色を指定 #const LWA_ALPHA 2 ;アルファー値を指定 #const GWL_EXSTYLE -20 ;拡張ウィンドウスタイル #const WS_EX_LAYERED $00080000 ;透明なウィンドウ属性 #module ;▼必要となるAPIや定数の定義 #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" sptr #cfunc GetProcAddress "GetProcAddress" int,sptr #func FreeLibrary "FreeLibrary" int ;▼外部dllのリンク (dllを読込みハンドルを取得) #deffunc dllload str prm1 pdll=LoadLibrary(prm1) if pdll==0 : return -1 return pdll ;▼外部dllの関数アドレスの取得 #deffunc funcprocadr var prm1,int prm2,str prm3 funcptr=GetProcAddress(prm2,prm3) if funcptr==0 : return -1 prm1=funcptr return 0 ;▼外部dllの関数実行 #deffunc funcproc var prm1,array prm2,int prm3,int prm4 prm1=callfunc (prm2,prm3,prm4) return 0 ;▼リンクした外部dllの開放 #deffunc dllfree int prm1 FreeLibrary prm1 return #global #uselib "kernel32.dll" #func VirtualProtect "VirtualProtect" var,int,int,var #define xdim(%1,%2)dim %1,%2 : VirtualProtect %1,(%2)*4,$40,AZSD #define obj_wmnclbtndown sendmsg hwnd,$00A1,2,0 gsel 0,-1 #func GetWindowLongA "GetWindowLongA" int , int #func SetWindowLongA "SetWindowLongA" int , int , int #func SetLayered "SetLayeredWindowAttributes" int , int , int , int #func SendMessageA "SendMessageA" int , int , int , int #func PostMessageA "PostMessageA" int , int , int , int #func SetCapture "SetCapture" int #func ReleaseCapture "ReleaseCapture" redraw 0 *start offset=5 bgscr 0,400,400,2,200-offset,200-offset gsel 0 bgscr 1,400,400,2,200,200 SetWindowLong hwnd, -20, stat | $80 bgscr 2,400,400,2,200+offset,200+offset SetWindowLong hwnd, -20, stat | $80 color0 =150 ;hsvcolor 初期値 dcolor =5 ;hsvcolor 増分 now0=int(d3timer()/1000) al0=0 ;ID0 本体 透明度初期値 al1=230;ID1 影2 透明度初期値 al2=210;ID2 影3 透明度初期値 redraw 0 gsel 0 onclick *move repeat -1 color 255,255,255 boxf if al0<255:al0=al0+10 if al0>=255:al0=255:break gsel 0,2 alpha =al0;本体 透明度 gosub *ddd0 redraw 1 wait 2 loop rrt=0 sst=10 dcolor=10 al0=255 al1=0 al2=0 redraw 0 repeat -1 gsel 2 hsvcolor fmod(color0,190),200,225 boxf if (al2<170)&(sst>0):al2=al2+sst if al2>=170:al2=170 if (al2>=0)&(sst<0):al2=al2+sst if al2<=0:al2=0 gsel 2,1 alpha =al2 gosub *ddd0 gsel 1 hsvcolor fmod(color0+10,190),200,225 boxf if (al1<200)&(sst>0):al1=al1+sst if al1>=200:al1=200 if (al1>=0)&(sst<0):al1=al1+sst if al1<=0:al1=0 gsel 1,1 alpha =al1 gosub *ddd0 gsel 0 color 255,255,251 boxf al0=al0+rrt if al0<=0:al0=0 gsel 0,2 color 0 pos 50,50 mes "右クリックで終了" alpha =al0 gosub *ddd0 wait 20 color0=color0+dcolor if int(d3timer()/1000)> now0+23:sst=-10 if int(d3timer()/1000)> now0+26:rrt=-10 if int(d3timer()/1000)> now0+29:al0=0:break loop redraw 0 gsel 2,-1 gsel 1,-1 gsel 0,-1 gosub *ddd0 stop *ddd0; color 255,255,255 SetWindowLong hwnd,-20,WS_EX_LAYERED SetLayeredWindowAttributes hwnd,0,alpha,LWA_ALPHA xdim code,153 code(0) =$83EC8B55,$5653B8C4,$C458B57,$508B188B,$E0558904,$8908488B,$508BDC4D,$D855890C code(8) =$8910488B,$508BD44D,$D0558914,$8918488B,$408BCC4D,$C845891C,$8B08458B,$55891450 code(16) =$84D8BC4,$890C418B,$558BC045,$44A8B08,$8BBC4D89,$508B0845,$B8558908,$8B084D8B code(24) =$A081,$FC458900,$C07D83,$45C70974,$01EC,$C707EB00,$3EC45,$558B0000 code(32) =$55AF0FBC,$E85589EC,$81E84D8B,$03E1,$49057980,$41FCC983,$04B8,$25C12B00 code(40) =$80000003,$83480579,$8940FCC8,$45C7E845,$64F8,$F8558B00,$8304E2C1,$6A5220C2 code(48) =$89D3FF02,$4D8BE445,$55FF51E4,$33F88BDC,$2007C7C0,$8D000000,$47C71057,$0104 code(56) =$C478900,$6A084789,$6A006A00,$52006A00,$33D055FF,$F44D89C9,$3BF4458B,$8D0FB845 code(64) =$0131,$48B8458B,$8BF4452B,$AF0FE855,$FD88BD0,$FBC5DAF,$3EC5DAF,$DA03C45D code(72) =$753BF633,$FB8D0FBC,$83000000,$7400C07D,$8AC03306,$3318EB03,$8AD233C0,$38A0153 code(80) =$3308E2C1,$10E0C1C9,$B024B8A,$3BC10BC2,$840FFC45,$00C1,$46F07589,$7DBC753B code(88) =$EC5D0332,$C07D83,$C0330674,$18EB038A,$D233C033,$8A01538A,$8E2C103,$E0C1C933 code(96) =$24B8A10,$C10BC20B,$74FC453B,$753B4606,$8BCE7CBC,$453B0847,$8B2A72F8,$FF52E455 code(104)=$4583D855,$26A64F8,$C1F84D8B,$C18304E1,$458B5120,$55FF50E4,$E44589E0,$52E4558B code(112)=$8BDC55FF,$20478DF8,$42F4558B,$4D8B5652,$558B51F4,$4F8B52F0,$4E1C108,$FF50C103 code(120)=$478BD055,$F0453B10,$458B067E,$104789F0,$3B14578B,$67EF455,$89F44D8B,$773B144F code(128)=$89037E18,$458B1877,$473B40F4,$8B077E1C,$8942F455,$47FF1C57,$EC5D0308,$BC753B46 code(136)=$FF058C0F,$45FFFFFF,$F44D8BF4,$FB84D3B,$FFFECF8C,$458B57FF,$4E0C1F8,$5020C083 code(144)=$55FF006A,$6AD88BCC,$458B5301,$34508B08,$C855FF52,$51E44D8B,$8BD455FF,$5B5E5FC3 code(152)=$C25DE58B,0 ;▼呼び出す関数のアドレスを格納 dllload "kernel32.dll" : D_KERNEL=stat dllload "user32.dll" : D_USER=stat dllload "gdi32.dll" : D_GDI=stat funcprocadr func(0),D_KERNEL,"GlobalAlloc" funcprocadr func(1),D_KERNEL,"GlobalReAlloc" funcprocadr func(2),D_KERNEL,"GlobalLock" funcprocadr func(3),D_KERNEL,"GlobalUnlock" funcprocadr func(4),D_KERNEL,"GlobalFree" funcprocadr func(5),D_USER, "SetRect" funcprocadr func(6),D_GDI, "ExtCreateRegion" funcprocadr func(7),D_USER, "SetWindowRgn" pfunc=varptr(code) mref bmscr,67 ;▼関数パラメータを指定 prm=varptr(bmscr),varptr(func) funcproc dllret,prm,pfunc,2 redraw 1 return *move if wparam==2 end stop



この記事に返信する


ポチ

リンク

2011/6/25(Sat) 23:31:08|NO.39837

スクリプトが長くなってしまって申し訳ありません。

実際には背景を透過させて半透明表示にするために最速(?)

と思われる不定形リージョンを使っています。

もっと速く効率が良い不定形リージョンがあったら紹介して下さると嬉しいのですが・・・。



Cookies

リンク

2011/6/26(Sun) 16:06:34|NO.39840

SetWindowLong hwnd, -20, stat | $80
のなかでstatと論理和をとってますが、何のためだとお思いで?

これは、(特にポチさんの載せた参考サイトでは)GetWindowLongによってとった
もともとのウィンドウスタイルを維持し、そこに$80を付け足すためです。

なのに、勝手にGetWindowLongの行をポチさんはすべてとってしまっています。
これでは直前の命令の返り値が、何の関係もないのにSetWindowLongに使われてしまっています。

そしたらタイトルバーがないスタイルも取れてしまうのは当たり前でしょう。


簡単に言うと、GetWindowLongの行を勝手にとるなっ!ってことですww



ポチ

リンク

2011/6/27(Mon) 13:28:45|NO.39850

Cookies様、ありがとうございます。おっしゃる通りです。
そもそもきちんと理解しないでWindowsAPIを使おうとした自分が間違っています。
多重ウインドウでない場合はGetWindowLongを取ってもきちんと動作していました。
(#include "user32.as"と#uselib "user32.dll"及び他のDLLを同時に使う場合は
GetWindowLong...の部分でエラーになって動作しなくなってしまいました。
そこで、色々試みてこの行を削除して使っていました。)
間違ったやりかたでやっていて正しく動作しないのは当然でした。

仕事を掛け持ちしていてじっくり勉強する時間が持てずに、いい加減な事をしてしまいました。

もっと勉強します。
大変失礼致しました。



Cookies

リンク

2011/6/27(Mon) 18:16:33|NO.39851

>そもそもきちんと理解しないでWindowsAPIを使おうとした自分が間違っています。
いえ、別に理解してなくても使ってもいいとは思いますが…
使ってからいろいろ理解できることもありますし。

別にいい加減じゃないですよ…いいんですよ…

ちょっと書き方きつかったでしょうか。すいません。



whoさん

リンク

2011/6/27(Mon) 18:25:36|NO.39852

ま、がんばれ!



ポチ(夜勤明け&早朝バイト明け)

リンク

2011/6/28(Tue) 13:10:06|NO.39857

Cookies様、whoさん様・・・暖かいお言葉ありがとうございます。
がんばります!!



apo

リンク

2011/7/26(Tue) 16:24:10|NO.40214

>実際には背景を透過させて半透明表示にするために最速(?)
>と思われる不定形リージョンを使っています。

そのマシン語スクリプトより ぷまたん作
標準命令+API版のモジュールの方が2倍程 速いという衝撃の事実。

投稿者:ぷま [HomePage]  投稿日:2008/11/26(水) 17:16:08 No.16
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200807/08110023.txt



ポチ(休日)

リンク

2011/7/27(Wed) 15:26:33|NO.40237

apoさま

大変有用な情報、ありがとうございます。

早速検証してみたいと思います。



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