#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #トリガー・キーロック #Trigger_KeyLock.mscr #キーロックと連動して、複数のプログラムを起動できるMortScript。 #また、拙作の各種mscrに対応した、最適な処理も行ってくれます。 #(対象が存在しなければ無視するので、気にせず利用して下さい。) #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #・使用の準備を整えます。(詳細は後述) #・キーロックをオンにすると、オン設定のアプリ群を起動します。 #・設定が有効なら、オン時に画面を消灯することもできます。 #・キーロックをオフにすると、オフ設定のアプリ群を起動します。 #・設定が有効なら、オフ時に画面を点灯することもできます。 #・拙作の対応mscrを利用していれば、それに応じた処理も行います。 #●使用の準備 #"cmdRegistryNotifyApp"をインストールした上で、 #本文設定AutocRNApp=1にし、本mscrを実行すれば自動適用します。 #この方法が最も安定して動作すると思います。※ #自前で動作環境を構築する場合は、AutocRNApp=0にして、 #[HKEY_CURRENT_USER\Software\Sharp\PhoneStatus] #"Status0"=dword:00000001(10進)(キーロックオン) #及び、dword:00000000(10進)(キーロックオフ) #を、トリガーにして本mscrを起動するようにして下さい。 #("MortScript" "cmdRegistryNotifyApp" "RegCondExec" 等) #またはキーロック時に本mscrを実行できる環境を用意して下さい。 #"KLChgExec"が有用だと思います。 #(基本動作が重複するのであまり意味は無いかもしれませんが。) #●動作確認デバイス #Advanced/W-ZERO3[es], WILLCOM 03 #他ZERO3系デバイスでも、動くかもしれません。 #キーロックの処理上、その他機種は動かないと思います。 #もし他のWindows Mobile機でも動いたらご報告頂けると嬉しいです。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・cmdRegistryNotifyApp (非常駐でレジストリを監視) # http://ssipa.web.fc2.com/ #・RegCondExec (常駐してレジストリを監視) # http://www20.atwiki.jp/zero3_392/pages/10.html #・KLChgExec (キーロック時に任意のプログラムを実行) # http://w03holic.seesaa.net/article/64774968.html #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行されたmscrが、 #処理を無視される場合があります。 #これを回避するには本mscrで他のmscrの起動代行を管理し、 #各起動のタイミングを、ほんの少しずらす様に設定して下さい。 #W-ZERO3系デバイスでは、キーロックの通知メッセージによって #MortScript側の処理が一時停止するという弊害があります。 #これをサイレント化する手段として、本mscrは #[HKEY_CURRENT_USER\Software\Sharp\PhoneStatus\DispLockIcon] #が2であれば恒久的に1以下(ロックの初回メッセージのみ停止)、また #[HKLM\HARDWARE\DEVICEMAP\KEYBD\KeyLocked]を一時的に0にします。 #本体動作に影響はありませんが、別アプリがこの値を参照する場合 #誤作動をする可能性がありますので、その点にご注意ください。 #アンインストールの際は、"AutocRNApp"による #登録を行っていれば解除して、本mscrを削除するだけで大丈夫です。 #その他レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■本mscrを、cmdRegistryNotifyAppで登録し実行する=1、しない=0。 #また登録用、解除用それぞれのパスも合わせて下さい。 #初回実行時のみ登録/解除を行います。後はそのまま使用して下さい。 #本mscrの名前やパスを変更した場合、再度実行すれば再登録します。 #注意!本mscrを削除する際は、事前に=0にして解除実行して下さい。 #予めファイル名に任意の文字を加えておけば、忘れないと思います。 AutocRNApp=1 cRNAppPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" cRStopPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" #■キーロックオン時に、画面を消灯する=1、しない=0。 SwOnDisp=1 #■キーロックオフ時に、画面を点灯する=1、しない=0。 SwOffDisp=1 #■キーロックオン時に実行させるプログラムを指定。※詳細は後述 OnCmd[1]="\Program Files\MortScript\VibMute_KeyFree.mscr" OnSlp[1]=300 #■キーロックオフ時に実行させるプログラムを指定。※詳細は後述 OffCmd[1]="\Program Files\MortScript\VibMute_KeyFree.mscr" OffSlp[1]=1000 #※Cmdは実行パス、Argはその引数、Slpは実行までの待機時間(ms)。 #複数指定は、以下の例を参考に設定項目を連番で追加して下さい。 #OnCmd[2]="オン時、2番目に実行するプログラムのパス" #OnArg[2]="オン時、2番目に実行するプログラムの引数" #OffCmd[3]="オフ時、3番目に実行するプログラムのパス" #OffSlp[3]=オフ時、3番目のプログラム実行までの待機時間(ms) #("Arg"と"Slp"のみ、項目自体を省略しても構いません。) #記述ルールはMortScript準拠なので、マニュアルを参照して下さい。 # http://home.att.ne.jp/wave/deox_pop/mortscript.html#7.3 #複雑な処理が必要なら自身でmscrを組んだ方が便利かも知れません。 #■デフォルト対応のmscrパスを指定。 #対象mscrを利用していなければ、特に指定変更の必要はありません。 #(故意に利用しないのであれば、""内を空欄にでもして下さい。) #この設定が有効の場合は、OnCmd側に登録の必要はありません。 #尚、処理内容は、PowWow_Sp有効時はオフ時にPowWowの終了処理、 #TCPMP_Sp有効時はオン時にPowWow_SpとTCPMP_Spの切替判定をします。 PowWow_SpPath="\Program Files\MortScript\PowWow_Sp.mscr" TCPMP_SpPath="\Program Files\MortScript\TCPMP_Sp.mscr" #--------------------------------------------------------------- #バージョン履歴 #1.01 使用法によりPowWowが終了しない状況が出るバグを修正 #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 #■cmdRegistryNotifyApp登録/解除 Call ("AutocRNAppChk") #■メインセクション RegKeyLock="RegRead (""HKCU"",""Software\Sharp\PhoneStatus"",""Status0"")" EndFlag=0 While (EndFlag=0) #■オン処理 If (Eval(RegKeyLock)=1) Call ("DefOnProc") SwMode="On" Call ("UsrProc") #■オフ処理 Else Call ("DefOffProc") SwMode="Off" Call ("UsrProc") EndIf #■出口調査 Call ("EndProc") EndWhile #--------------------------------------------------------------- #Sub Script #■Call ("UsrProc") ユーザー設定処理 Sub UsrProc i=1 ForEach Cmd in array (SwMode&"Cmd") Arg=[SwMode&"Arg["&i&"]"] Slp=[SwMode&"Slp["&i&"]"] If (Slp>=1) Sleep (Slp) EndIf If (Arg eq "") Run (Cmd) Else Run (Cmd,Arg) EndIf i=i+1 EndForEach EndSub #■Call ("DefOnProc") Sub DefOnProc If (SwOnDisp=1) ToggleDisplay (False) EndIf OnProcOk=1 OffProcOk=0 If ( FileExists (TCPMP_SpPath)\ and ProcExists ("player.exe") ) Run (TCPMP_SpPath) Else Run (PowWow_SpPath) EndIf EndSub #■Call ("DefOffProc") Sub DefOffProc If (FileExists (PowWow_SpPath)) ErrorLevel ("syntax") Close ("PowWow") ErrorLevel ("error") EndIf If (SwOffDisp=1) ToggleDisplay (True) EndIf OnProcOk=0 OffProcOk=1 If (RegRead ("HKCU","Software\Sharp\ShPhoneLib","WrapperActiveComm")=0) KillScript (FileBase (TCPMP_SpPath)&".mscr") EndIf EndSub #■Call ("EndProc") Sub EndProc Sleep (500) If (Eval(RegKeyLock)=1) If (OnProcOk=1) EndFlag=1 EndIf Else If (OffProcOk=1) EndFlag=1 EndIf EndIf EndSub #■Call ("AutocRNAppChk") cmdRegistryNotifyApp登録/解除 Sub AutocRNAppChk cmdID="Trigger_KeyLock.AutocRNApp" ThisFilePath=SystemPath ("ScriptPath")\SystemPath ("ScriptName")&SystemPath ("ScriptExt") MortScriptPath=SystemPath ("ScriptExe")\"MortScript.exe" RegNtfKeyExs="RegKeyExists (""HKLM"",""System\Notifications\"&cmdID&""")" RegNtfAppVal="RegRead (""HKLM"",""System\Notifications\"&cmdID&""",""Application"")" AutocRNAppRsl=0 If (AutocRNApp=0) If (Eval (RegNtfKeyExs)=1) If ( FileExists (cRNAppPath) and FileExists (cRStopPath) ) SetOff="3;"&cmdID Run (cRStopPath,SetOff) AutocRNAppRsl=1 Else AutocRNAppRsl=2 EndIf EndIf ElseIf (Eval (RegNtfAppVal) ne """"&MortScriptPath&""" """&ThisFilePath&"""") If ( FileExists (cRNAppPath) and FileExists (cRStopPath) ) cmdReg="HKCU;Software\Sharp\PhoneStatus;Status0" cmdComp=0 cmddwMask="1" cmddw=0 SetOff="0;"&cmdID RunWait (cRStopPath,SetOff) Sleep (300) SetOn="3;"&cmdID&";"&cmdReg&";"&MortScriptPath&";'"""\ &ThisFilePath&"""';-;-;-1;1;"&cmdComp&";"&cmddwMask&";"&cmddw Run (cRNAppPath,SetOn) AutocRNAppRsl=1 Else AutocRNAppRsl=2 EndIf EndIf If (AutocRNAppRsl=1) Exit ElseIf (AutocRNAppRsl=2) If (Not FileExists (cRNAppPath)) Message ("cmdRegistryNotifyApp.exe^NL^が見つかりません。") EndIf If (Not FileExists (cRStopPath)) Message ("cmdRegistryStopNotification.exe^NL^が見つかりません。") EndIf Exit EndIf EndSub