#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #トリガー・SHARPフォンHB #Trigger_ShPhone_HB.mscr #電話状態と連動して、複数のプログラムを起動できるMortScript。 #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #・使用の準備を整えます。(詳細は後述) #・電話着信時 #・電話発信時 #・通話開始時 #・待機開始時 #・以上の各状態に応じて、指定した任意のアプリ群を起動できます。 #●使用の準備 #"cmdRegistryNotifyApp"をインストールした上で、 #本文設定AutocRNApp=1にし、本mscrを実行すれば自動適用します。 #この方法が最も安定して動作すると思います。※ #自前で動作環境を構築する場合は、AutocRNApp=0にして、 #[HKEY_LOCAL_MACHINE\System\State\Phone] #"Status"=dword:00210032(16進)(電話着信時) # 及び、dword:00220032(16進)(電話発信時) # 及び、dword:20200032(16進)(通話開始時) # 及び、dword:00200032(16進)(待機開始時) #を、トリガーにして本mscrを起動するようにして下さい。 #"MortScript" "RegCondExec" が有用だと思います。 #(基本動作が重複するのであまり意味は無いかもしれませんが。) #●動作確認デバイス #HYBRID W-ZERO3 #SHARPの電話アプリが対象なので、その他機種は動かないと思います。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・cmdRegistryNotifyApp (非常駐でレジストリを監視) # http://ssipa.web.fc2.com/ #・ShPhone_Sp_HB (通話画面消灯、必要ならタイマーも。) # http://www.ac-promenade.net/text/windowsmobile/index.html#ShPhone_Sp_HB #・RegCondExec (常駐してレジストリを監視) # http://www20.atwiki.jp/zero3_392/pages/10.html #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行されたmscrが、 #処理を無視される場合があります。 #これを回避するには、本mscrに起動を代行させて #各mscrの起動タイミングを、ほんの少しずらす様にして下さい。 #アンインストールの際は、"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" #■電話着信時に実行させるプログラムを指定。※詳細は後述 #ComeCmd[1]="" #■電話発信時に実行させるプログラムを指定。※詳細は後述 #SendCmd[1]="" #■通話開始時に実行させるプログラムを指定。※詳細は後述 CallCmd[1]="\Program Files\MortScript\ShPhone_Sp_HB.mscr" #■待機開始時に実行させるプログラムを指定。※詳細は後述 WaitCmd[1]="" #※Cmdは実行パス、Argはその引数、Slpは実行までの待機時間(ms)。 #複数指定は、以下の例を参考に設定項目を連番で追加して下さい。 #ComeCmd[2]="電話着信時、2番目に実行するプログラムのパス" #ComeArg[2]="電話着信時、2番目に実行するプログラムの引数" #CallCmd[3]="通話開始時、3番目に実行するプログラムのパス" #CallSlp[3]=通話開始時、3番目のプログラム実行までの待機時間(ms) #("Arg"と"Slp"のみ、項目自体を省略しても構いません。) #記述ルールはMortScript準拠なので、マニュアルを参照して下さい。 # http://home.att.ne.jp/wave/deox_pop/mortscript.html#7.3 #複雑な処理が必要なら自身でmscrを組んだ方が便利かも知れません。 #--------------------------------------------------------------- #バージョン履歴 #1.00 公開。 #--------------------------------------------------------------- #Main Script #■PPC制限 If(MortScriptType() ne "PPC") message("This script is PPC only.") Exit EndIf #■cmdRegistryNotifyApp登録/解除 Call ("AutocRNAppChk") #■メイン処理 RegLockPhone="RegRead (""HKLM"",""System\State\Phone"",""Status"")" ValLockPhone=Eval (RegLockPhone) While (1) Switch (ValLockPhone) Case (2162738) SwMode="Come" Call ("UsrProc") Case (2228274) SwMode="Send" Call ("UsrProc") Case (538968114) SwMode="Call" Call ("UsrProc") Case (2097202) SwMode="Wait" Call ("UsrProc") EndSwitch Sleep (500) OutValLockPhone=Eval (RegLockPhone) If (OutValLockPhone<>ValLockPhone) ValLockPhone=OutValLockPhone Else Exit EndIf EndWhile #--------------------------------------------------------------- #Sub Script #■Call ("UsrProc") ユーザー設定処理 Sub UsrProc If ([SwMode&"Cmd[1]"] ne "") 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 EndIf EndSub #■Call ("AutocRNAppChk") cmdRegistryNotifyApp登録/解除 Sub AutocRNAppChk cmdID="Trigger_ShPhone.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="HKLM;System\State\Phone;Status" cmdComp=0 cmddwMask="-" 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