|
|
2009/6/26(Fri) 22:01:30|NO.26035
音量や画面の照明を調節するにはどんな関数を使えばよろしいのでしょうか。
windowsモビリティセンターのような感じで調節したいと思っています。
音量の方はmixerOpenというAPI関数で調節できるんでしょうかね…。
どちらにしてもこれがどう調節に繋がるのか理解できません。
|
|
2009/6/27(Sat) 07:02:43|NO.26048
音量調節するモジュール
ttp://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200510/05100007.txt
明るさの調節は
ttp://wlog.flatlib.jp/archive/1/2009-1-29
を参考にスクリプトを組んでみましたが、
私のノートPCの場合CreateFile関数で失敗します。
スクリプトの記述が間違っているのかもしれませんが。
(※以下のスクリプトは明るさの取得のみ)
#include "kernel32.as"
#define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002
#define GENERIC_READ 0x80000000
#define GENERIC_WRITE 0x40000000
val="\\\\.\\LCD"
CreateFile val,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,3,0,0
if stat=-1:gosub *ej
hlcd=stat
sdim levelbuffer,256
DeviceIoControl hlcd,0x230494,0,0,levelbuffer,256,varptr(levelCount),0
if stat=-1:gosub *ej
stop
*ej
//エラー時にジャンプ
GetLastError
sdim e,256
FormatMessage 0x1200,0,stat,0,varptr(e),256,0
dialog e
return
ポータブル コンピュータの LCD ディスプレイのコントラスト
またはバックライトを Windows XP で調整できない
ttp://support.microsoft.com/kb/843617/ja
サービスパックは3なのですがね〜。何故だろ?
|
|
2009/6/27(Sat) 15:21:31|NO.26052
明るさの取得は出来ますが、設定がうまくいかないようです。
#include "kernel32.as"
#define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002
#define GENERIC_READ 0x80000000
#define GENERIC_WRITE 0x40000000
#define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS 0x00230494
#define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS 0x00230498
#define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS 0x0023049C
//デバイスのオープン
val="\\\\.\\LCD"
CreateFile val,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,3,0,0
if stat=-1:gosub *ej
hlcd=stat
//バックライトを何段階に調光可能か調べる
sdim levelbuffer,256
DeviceIoControl hlcd,IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS,0,0,varptr(levelbuffer),256,varptr(levelCount),0
if stat=-1:gosub *ej
repeat levelCount
tmp=peek(levelbuffer,cnt)
if tmp=0:break
lb.cnt=tmp
loop
l=""
mes ""+levelCount+"段階で明るさを調節可能です。"
repeat levelCount:l+=""+lb.cnt+" ":loop
mes l
//現在のバックライトの明るさを取得
dim bright,1:bytereturn=0
DeviceIoControl hlcd,IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS,0,0,varptr(bright),4,varptr(bytereturn),0
if stat=-1:gosub *ej
//DISPLAY_BRIGHTNESS 構造体
//http://msdn.microsoft.com/en-us/library/aa372686(VS.85).aspx
//AC電源のとき
if peek(bright,0)=1&3{
nowbright=peek(bright,1)
}else{
//DC電源
nowbright=peek(bright,2)
}
mes "現在明るさは、"+nowbright+" です。"
//明るさ変更用のボックス設置
l="":repeat levelCount:l+=""+lb.cnt+"\n":loop
combox s,,l
button "変更",*set
stop
*set
poke bright,1,lb.s:poke bright,2,lb.s
DeviceIoControl hlcd,IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,0,0,varptr(bright),4,varptr(bytereturn),0
if stat=-1:gosub *ej
stop
*ej
//エラー時にジャンプ
GetLastError
sdim e,256
FormatMessage 0x1200,0,stat,0,varptr(e),256,0
dialog e:end
return
Vista SP2にて確認。
| |
|
2009/6/30(Tue) 21:48:22|NO.26125
すみません、しばらくパソコンに手を付けていなくて返信できないままでした。
わざわざモジュールまで作って頂きありがとうございました。
自分もvistaで実行してみましたが、確かに明るさが変わりませんね。何故でしょうかね・・。
しばらく自分で頑張ってみます。ありがとうございました。
|
|
2009/6/30(Tue) 21:48:58|NO.26126
解決チェック忘れです。
|
|
2009/6/30(Tue) 22:38:10|NO.26130
スクリプトにミスがありました。
これで明るさを変更できるはずです。
*set
poke bright,1,lb.s:poke bright,2,lb.s
DeviceIoControl hlcd,IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,0,0,varptr(bright),4,varptr(bytereturn),0
if stat=-1:gosub *ej
↓以下のものに差し替え
*set
poke bright,1,lb.s:poke bright,2,lb.s
DeviceIoControl hlcd,IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,varptr(bright),4,0,0,varptr(bytereturn),0
if stat=-1:gosub *ej
|
|