#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #バイブミュート・キーフリー #VibMute_KeyFree.mscr #着信によるバイブをキーロックオン時限定にし、 #キーロックオフ(解除)時はバイブをミュートさせるMortScript。 #バイブが必要なのは非操作時であると判断し、電池節約を試みます。 #(但しマナーモードや別プログラムが呼び出す場合は、動作します。) #●使用方法概要 #・使用の準備を整えます。(詳細は後述) #・キーロックオフの状態で、本体のバイブ設定を行います。 #・キーロックオンにすると、バイブ設定が本mscrに記録されます。 #・キーロックオフ(解除)にすると、同時にバイブも解除されます。 #・再びキーロックをオンにすると、同時にバイブも有効になります。 #・設定によりUSBデバイス接続もバイブミュート対象にできます。 #●使用の準備 #別途、拙作の"Trigger_KeyLock.mscr"を利用して、 #キーロックオンオフ両方で本mscrが起動するように設定して下さい。 #この方法が最も安定して連動する環境だと思います。 #"cmdRegistryNotifyApp"の直接利用は、その他別のmscrが #キーロックを利用して起動するケースが多いので推奨しません。※ #自前で動作環境を構築する場合は、AutocRNApp=0にして、 #[HKEY_CURRENT_USER\Software\Sharp\PhoneStatus] #"Status0"=dword:00000001(10進)(キーロックオン) #及び、dword:00000000(10進)(キーロックオフ) #をトリガーとして、本mscrを起動するようにして下さい。 #"MortScript" "RegCondExec" が有用だと思います。 #またはキーロック時に本mscrを実行できる環境を用意して下さい。 #"KLChgExec"が有用だと思います。 #●動作確認デバイス #Advanced/W-ZERO3[es], WILLCOM 03 #他ZERO3系デバイスでも、動くかもしれません。 #SHARPの電話アプリが対象なので、その他機種は動かないと思います。 #もし他のWindows Mobile機でも動いたらご報告頂けると嬉しいです。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・Trigger_KeyLock (キーロックで指定アプリ群起動) # http://www.ac-promenade.net/text/windowsmobile/index.html#Trigger_KeyLock #・cmdRegistryNotifyApp (非常駐でレジストリを監視) # http://ssipa.web.fc2.com/ #・RegCondExec (常駐してレジストリを監視) # http://www20.atwiki.jp/zero3_392/pages/10.html #・KLChgExec (キーロック時に任意のプログラムを実行) # http://w03holic.seesaa.net/article/64774968.html #・ExecMulti (複数アプリの起動代行管理) # http://www.momo-lab.net/inu/execmulti.html #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行された#mscrが #起動を無視される場合があります。 #これを回避するには、"MortScript"や"ExecMulti"等を利用して #各mscrの起動タイミングを、ほんの少しずらす様にして下さい。 #W-ZERO3系デバイスでは、キーロックの通知メッセージによって #MortScript側の処理が一時停止するという弊害があります。 #これをサイレント化する手段として、本mscrは #[HKEY_CURRENT_USER\Software\Sharp\PhoneStatus\DispLockIcon] #が2であれば恒久的に1以下(ロックの初回メッセージのみ停止)、また #[HKLM\HARDWARE\DEVICEMAP\KEYBD\KeyLocked]を一時的に0にします。 #本体動作に影響はありませんが、別アプリがこの値を参照する場合 #誤作動をする可能性がありますので、その点にご注意ください。 #アンインストールの際は、本mscrを削除するだけで大丈夫です。 #レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■USBケーブル接続時もバイブミュート対象とする=1、しない=0。 #USB給電や、USB使用時にバイブは必要ないと言った判断に有効です。 #これを有効にする場合は、自前でトリガー環境を用意して下さい。 #[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers] #"UsbCableDetect"=dword:00000001(10進)(接続有り) #及び、dword:00000000(10進)(接続無し)、です。 USBDetect=0 #--------------------------------------------------------------- #バージョン履歴 #1.00 公開。 #--------------------------------------------------------------- #Main Script #■PPC制限 If(MortScriptType() ne "PPC") message("This script is PPC only.") Exit EndIf #■キーロックメッセージオフ RegWriteDWord ("HKLM","HARDWARE\DEVICEMAP\KEYBD","KeyLocked",0) If (RegRead ("HKCU","Software\Sharp\PhoneStatus","DispLockIcon")>=2) RegWriteDWord ("HKCU","Software\Sharp\PhoneStatus","DispLockIcon",1) EndIf RegKeyLock="RegRead (""HKCU"",""Software\Sharp\PhoneStatus"",""Status0"")" RegUsbDetect="RegRead (""HKLM"",""Drivers\USB\FunctionDrivers"",""UsbCableDetect"")" #■復帰用前回設定 (LastDataSt,LastDataEdはコメント変更不可) #LastDataSt PrePhone=-2147483647 PreLightMail=-2147483646 PreEmail=-2147483646 #LastDataEd AppType[1]="Phone" AppType[2]="LightMail" AppType[3]="Email" VibRecv[1]="VibIncoming" VibRecv[2]="VibRecvLMail" VibRecv[3]="VibRecvMail" #■トリガーチェック(インデント無し) TriggerChk=1 While (TriggerChk=1) StartReg1 = Eval(RegKeyLock) StartReg2 = Eval(RegUsbDetect) #■現行バイブ3項目設定取得 ForEach FEBox in array ("AppType") [FEBox]=RegRead ("HKCU","ControlPanel\Incoming"\FEBox,"VibrationType") EndForEach ForEach FEBox in array ("VibRecv") [FEBox]=RegRead ("HKCU","Software\Sharp\ShPhoneLib",FEBox) EndForEach #■バイブオフするか?(ロックオフ、又はUSB利用接続時) If ( (Eval (RegKeyLock)=0) or ((USBDetect=1) and (Eval (RegUsbDetect)=1)) ) #■且つ現行オン設定があれば、フルオフ (パターン値参照して1桁整数値を代入) If ([AppType[1]]+[AppType[2]]+[AppType[3]]<0) i=1 ForEach FEBox in array ("AppType") If (RegRead ("HKCU","ControlPanel\Incoming"\FEBox,"VibrationType")<0) RegWriteDWord ("HKCU","ControlPanel\Incoming"\FEBox,"VibrationType",[VibRecv[i]]) EndIf i=i+1 EndForEach #■保存されてるバイブ設定と、フルオフ直前の設定に、違いがあれば保存 If ( ([AppType[1]]<>["Pre"&AppType[1]])\ or ([AppType[2]]<>["Pre"&AppType[2]])\ or ([AppType[3]]<>["Pre"&AppType[3]]) ) ThisFilePath=SystemPath ("ScriptPath")\SystemPath ("ScriptName")&SystemPath ("ScriptExt") ThisFileTxt=ReadFile (ThisFilePath,0,"jis") LastData="" ForEach FEBox in array ("AppType") LastData=LastData&"^NL^Pre"&FEBox&"="&[FEBox] EndForEach PostFile=Part (PreFile,"^NL^#LastDataSt",1,0)\ &"^NL^#LastDataSt"\ &LastData\ &"^NL^#LastDataEd"\ &Part (ThisFileTxt,"^NL^#LastDataEd",-1,0) Sleep (300) WriteFile (ThisFilePath,PostFile,0,"jis") EndIf EndIf #■バイブオン呼ぶか?(ロックオン、且つUSB利用切断)、且つ現行フルオフなら ElseIf ( ([AppType[1]]>=0) and ([AppType[2]]>=0) and ([AppType[3]]>=0) ) #■前データからオン設定箇所部分を、バイブパターンと照合して反映。 i=1 ForEach FEBox in array ("AppType") If (["Pre"&FEBox]<0) RegWriteDWord ("HKCU","ControlPanel\Incoming"\FEBox,"VibrationType",[VibRecv[i]]-2147483648) EndIf i=i+1 EndForEach EndIf #■トリガーチェック(インデント無し) If ((StartReg1 = Eval(RegKeyLock))\ and (StartReg2 = Eval(RegUsbDetect))) TriggerChk=0 EndIf EndWhile