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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0829
RichAeroについて6解決


Rich

リンク

2015/8/29(Sat) 16:03:35|NO.71112

Aeroモジュールを作っているんですが、
XPなどのAeroに対応していないときや、Aeroを表示させないようにしている時の
取得方法がわかりません。
教えてください。

#module//モジュール始め #uselib "dwmapi.dll" #func DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int, var #uselib "user32.dll" #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #cfunc GetWindowLong "GetWindowLongA" int,int #func SetWindowLong "SetWindowLongA" int,int,int //SetExtendFrameClientArea Aeroエリアを広げる // //SetExtendFrameClientArea hnd,px,py,sx,sy,bc // hnd = ハンドル // px~sy = 広げるサイズ // bc = グラスにする色(BBGGRR) //SetLayeredWindow レイヤーウィンドウにする // //SetLayeredWindow hnd,phnd,bc // hnd = 子ハンドル // phnd = 親ハンドル // bc = 透明にする色(BBGGRR) #deffunc SetExtendFrameClientArea int hnd,int px,int py,int sx,int sy,int bc margins = px, py, sx, sy DwmExtendFrameIntoClientArea hnd,margins return #deffunc SetLayeredWindow int hnd , int phnd , int bc SetWindowLong hnd, (-8), phnd SetWindowLong hnd,-20, GetWindowLong(hnd,-20) |0x80000 SetLayeredWindowAttributes hnd,bc,255,3 return #global//モジュール終わり #if 0//1にするとサンプル実行 //サンプル //タイトルバーにボタン #include "user32.as" buffer 3 color 245,245,0:boxf color 255,255,200:line 0,0,91,0 font "Meiryo UI",12 pos 25,3:color 0,0,0:mes "Menu ▼" color 255,255,255 pset 0,19:pset 90,19 screen 1,480,400 hWindow=hwnd color 0,0,0:boxf 0,0,480,2 title "" SetExtendFrameClientArea hwnd,0,0,3,0,0 oncmd gosub *OnMoveing,0x0216 oncmd gosub *OnSize,0x0005 bgscr 2,91,20,,ginfo(4)+28,ginfo(5)+7//レイヤードウィンドウ(ボタン表示用) hWButton=hwnd cls 0 SetLayeredWindow hwnd,hWindow,0xFFFFFF objimage 3 objsize 91,20:button gosub "",*Menu:hButton=objinfo(stat,2) dim RECT,4 CreatePopupMenu:hMenu= stat AppendMenu hMenu ,0x000,0,"New(&N) Ctrl+N" AppendMenu hMenu ,0x000,0,"Open...(&O) Ctrl+O" AppendMenu hMenu ,0x000,0,"Save(&S) Ctrl+S" AppendMenu hMenu ,0x000,0,"SaveAs..(&A)" AppendMenu hMenu ,0x800,0,0 AppendMenu hMenu ,0x000,0,"Exit(&E) Alt+F4" //Aero時計 screen 0,480,80 title "" cls 4 SetExtendFrameClientArea hwnd,-1,0,0,0,0 color 255,255,255 font "Meiryo UI",40,1 repeat gsel 0 redraw 0 pos 0,0 color 0,0,0:boxf color 255,255,255 mes ""+gettime(0)+"/"+gettime(1)+"/"+gettime(3)+" "+strf("%02d", gettime(4) )+":"+strf("%02d", gettime(5) )+":"+strf("%02d", gettime(6) ) redraw 1 wait 1 loop stop *Menu gsel 1,1 dim RECT,4 GetWindowRect hButton, varptr(RECT) TrackPopupMenuEx hMenu, 0,RECT(0),RECT(3), hwnd, 0 return *OnMoveing dupptr rect,lparam,16 MoveWindow hWButton ,rect(0)+28,rect(1)+7,91,20,1 return *OnSize gsel 1 MoveWindow hWButton,ginfo(4)+28,ginfo(5)+7,91,20,1 return



この記事に返信する


kanamaru

リンク

2015/8/29(Sat) 16:31:00|NO.71114

varptrを使って、使う関数が存在するか調べるのはどうでしょうか?



b

リンク

2015/8/29(Sat) 20:27:29|NO.71118

DwmIsCompositionEnabled 関数とOSバージョン照合組み合わせはどうでしょうか?

DwmIsCompositionEnabled 使用方法:
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa969518(v=vs.85).aspx



Rich

リンク

2015/9/3(Thu) 19:02:05|NO.71291

こんな感じですかね。

Enable=1 DwmIsCompositionEnabled varptr(Enable) if stat!0|Enable=0 : dialog "Aero無効" : Enable=0
DwmapiはWindowsVistaから入っているみたいなのでDwmapi.dllがあるか調べたいんですけど、
プログラム制御命令は、
振り分けはできないようなので別の方法でDLLを読み込む方法を教えてください。



b

リンク

2015/9/3(Thu) 19:29:06|NO.71292


#uselib "dwmapi.dll" //使うdll #func DwmIsCompositionEnabled "DwmIsCompositionEnabled" var //定義 DwmIsCompositionEnabled(Enable) //呼び出し if(stat == 0 ){ //正常動作か確認 if(Enable==1){ //1なら有効 mes "有効" }else{ mes "無効" } }
Vista以降ならこれで使える。
問題の関数が使えるかどうかということですが、
方法
C:\System32\Dwmapi.dllがあるかをexsist等で調べてしまう
方法
varptr(使い方はマニュアル等で)を使いDwmAPIの適当な関数のアドレスを調べてチェックする



暇人

リンク

2015/9/3(Thu) 20:06:02|NO.71293

最初に有効かどうか調べるだろうから
その命令のアドレス調べれば手っ取り早い

#uselib "dwmapi.dll" //使うdll #func DwmIsCompositionEnabled "DwmIsCompositionEnabled" var //定義 if varptr(DwmIsCompositionEnabled) { DwmIsCompositionEnabled Enable if stat {Enable=-1} }else{Enable=-1} if Enable<0 { mes "Aero無し" }else{ if Enable=1 {mes "有効"}else{mes "無効"} }



Rich

リンク

2015/9/5(Sat) 15:35:00|NO.71378

kanamaruさん bさん 暇人さんありがとうございます。
がんばって、ちゃんとAeroが機能するソフトを作ります。



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