#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #ポケットマップル・サポート #PocketMapple_Sp.mscr #PocketMappleD 起動後にMenuKeyHelperが効くようにしたり、 #起動時に読み込むrcmファイルを指定したり、 #住所検索や駅名検索でなぜか効かないボタン決定を代行したり、 #引数を与えてズーム倍率を相対値や絶対値で変化させたり、 #よく使う倍率を予め登録して拡大縮小したりもできるMortScript。 #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #環境設定を確認し、使用の準備を整えます。(詳細は後述) #本mscrを実行すると、ポケットマップルを起動します。 #起動引数としてrcmファイル等を指定していれば同時に開きます。 #起動完了後、自動で地図画面窓をアクティブ状態にします。 #(これでMenuKeyHelperやSortInchKeyでの操作が効くようになります。 #効かなくなったら再度本mscrを実行すると戻せます。) #住所検索や駅名検索画面の時に地名や駅名をハイライトにした状態で #本mscrを実行すると、その項目を決定します。 #ポケットマップル起動中に、本mscrにズーム引数を渡して実行すると、 #ズーム倍率を各種変更できます。 #ポケットマップルが起動していない時にズーム倍率引数を渡すと、 #指定したズーム倍率でポケットマップルを起動します。 #本mscrに渡せる引数は、現在以下のものがあります。 #本mscrに引数を渡す方法については、補足事項を確認して下さい。※ #Zoom=1 (〜24) 指定したズーム倍率にします。 #ZoomUp=1 (〜24) 現在値から指定した数の分、拡大します。 #ZoomDn=1 (〜24) 現在値から指定した数の分、縮小します。 #ZoomId= (1〜?) 指定したインデックス番号のズーム倍率にします。 #ZoomIdUp= (1〜?) 現在値からインデックス番号数の分、拡大します。 #ZoomIdDn= (1〜?) 現在値からインデックス番号数の分、縮小します。 #インデックス番号=(ユーザーが予めよく使う倍率を指定したもの) #●動作確認デバイス (PocketMappleD Ver.9) #Advanced/W-ZERO3[es], WILLCOM 03, HYBRID W-ZERO3 #SHARP独自のステータスは参照していないと思うので、 #もし他のWindows Mobile機でも動いたらご報告頂けると嬉しいです。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #・Pocket Mapple Digital (GPS,W-SIM対応オフライン地図ソフト) # http://mb.bbsoft-direct.com/mobile/pc/detail.do?goodsId=UB7DL00100 #●補足事項 #・MenuKeyHelper (WM5以下向けのメニューをソフトキーで操作) # http://www.geocities.jp/hou_ming_2/ #・SortInchKey (ハードキーカスタマイズ、アプリ条件指定可) # http://d.hatena.ne.jp/xianon/00000000 #実はポケットマップルの拡大縮小は、PageUp,PageDownで行えます。 #本mscrを割り当てる場合、ズームスキップや絶対値、 #インデックス拡縮等を利用するといいと思います。 #※引数は、[\Program Files\MortScript\MortScript.exe]に対して #["\Program Files\MortScript\PocketMapple_Sp.mscr" 引数=値]を #引数として渡すことに注意してください。(特に""の有無等。) #ショートカットファイルの場合は、 #"\Program Files\MortScript\MortScript.exe" "\Program Files\MortScript\PocketMapple_Sp.mscr" Zoom=20 #の様になります。 #パスはあくまでも例なので、ユーザーの環境に合わせて指定して下さい。 #本mscrのショートカットに、アイコンを利用したい場合は、 #ショートカットファイルのリンク先に、直接続けて #?\Program Files\Shobunsha\PocketMappleD9.exe,-128と追記して下さい。 #(インストールパスが異なる場合は、記述を修正して下さい。) #アンインストールの際は、本mscrを削除するだけで大丈夫です。 #レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■ポケットマップルインストールパス PMapplePath="\Program Files\Shobunsha\PocketMappleD9.exe" #■ポケットマップル"自体"に渡す起動引数(rcmファイル等) #(特に利用しないのであれば""内を空欄にでもして下さい。) PMappleArgs="" #■よく使うズーム倍率のインデックス番号を指定 #インデックスの数はユーザーの任意ですが、IndexZoom[番号]は #連番で並び、かつ番号数が少ない程少ない倍率を指定して下さい。 IndexZoom[1]=2 IndexZoom[2]=4 IndexZoom[3]=6 IndexZoom[4]=8 IndexZoom[5]=10 IndexZoom[6]=11 IndexZoom[7]=13 IndexZoom[8]=16 IndexZoom[9]=17 IndexZoom[10]=19 IndexZoom[11]=22 IndexZoom[12]=24 #■住所検索や駅名検索画面のハイライト選択の遅延時間(0〜10000ms) #このmscrを実行するのにインターフェース画面をまたぐ際など、 #選択結果が正しくない場合には、数値を増やしてみて下さい。 HiLgtDelay=150 #--------------------------------------------------------------- #バージョン履歴 #1.01 ハイライト用画面更新遅延設定を追加。HYBRID W-ZERO3で確認。 #1.00 公開 #0.01 私用試用仕様使用 #--------------------------------------------------------------- #Main Script #■PPC制限 If(MortScriptType() ne "PPC") message("This script is PPC only.") Exit EndIf PMappleProc = FileBase(PMapplePath)&FileExt(PMapplePath) PMappleWnd = Part(FileBase(PMapplePath),"D",1)&"D Ver."&Part(FileBase(PMapplePath),"D",2) CellWhite = 15197159 #CellGray = 13027270 #CellYellow = 65535 #CellGreen = 65280 #CellOrange = 33535 #CellBlue = 16711680 CellHL = 16777215 #■引数チェック ArgType=Array("Zoom","ZoomUp","ZoomDn","ZoomId","ZoomIdUp","ZoomIdDn") ForEach FEBox in array(ArgType) If([FEBox]>=1) IncomeArg=FEBox IncomeVal=[FEBox] #Message(IncomeArg&"="&IncomeVal) EndIf EndForEach #■引数が来ていない If(IncomeArg eq "") #■PM起動していない If(Not ProcExists(PMappleProc)) Call("PMExec") #■PMプロセスがある Else #■PMバック化していれば前面へ。 Call("PMShow") #■環境チェック Call("StatusChk") #■PMアクティブなら処理 If(WndActive(PMappleWnd)) If ( (1 <= HiLgtDelay) and (HiLgtDelay <= 10000) ) Sleep(HiLgtDelay) EndIf If(Screen("portrait")) ScnStart_X = 12 ScnStart_Y = 222 ScnLine_H = 266 Else ScnStart_X = 26 ScnStart_Y = 240 ScnLine_H = 148 EndIf WMBaseColor=ColorAT(0,WMTitleBar_H) i=0 While( (i=1) or (ZoomId>=1) ) Switch(IncomeArg) Case("Zoom") Call("ArgZoomRes") Case("ZoomId") Call("ArgZoomIdRes") EndSwitch #■サイズ相対値 Else #■ズームバーがあれば、現在のズーム倍率をスキャン ZBarWaitCount=6 Call("ZBarWait") If(ZBarOk=1) IndexScan=24 While(IndexScan>0) IndexColor = ColorAt(CellTopC_X,CellTopC_Y + (IndexScan-1) * ZBarCell_H) If(IndexColor=CellHL) NowZoom=IndexScan IndexScan=0 Else IndexScan=IndexScan-1 EndIf EndWhile #■引数反映 Switch(IncomeArg) Case("ZoomUp") Call("ArgZoomUpRes") Case("ZoomDn") Call("ArgZoomDnRes") Case("ZoomIdUp") Call("ArgZoomIdUpRes") Case("ZoomIdDn") Call("ArgZoomIdDnRes") EndSwitch EndIf EndIf #■ズームバーがあれば、ズームタップ実行 ZBarWaitCount=6 Call("ZBarWait") If(ZBarOk=1) MouseClick(PMappleWnd, CellTopC_X, CellTopC_Y + (ResVal-1) * ZBarCell_H -WMTitleBar_H) Sleep(500) MouseClick(PMappleWnd,0,WMTitleBar_H+PMInfoBar_H) Else #ターゲット復活用クリック MouseClick(PMappleWnd,0,WMTitleBar_H+PMInfoBar_H) EndIf EndIf EndIf #--------------------------------------------------------------- #Sub Script #■Call("StatusChk") Sub StatusChk ValZBarLeft = RegRead("HKCU","Software\Shobunsha\Pocket Mapple Digital\PMD","ZBARLEFT") If(ValZBarLeft eq "") ValZBarLeft = 0 EndIf ValDotPitch = RegRead("HKCU","Software\Microsoft\Today","DPI")/96 ValScreen_W = ScreenWidth() ValScreen_H = ScreenHeight() WMTitleBar_H = ValDotPitch * 26 PMInfoBar_H = 46 ZBarCell_W = 20 ZBarCell_H = (ValScreen_H - WMTitleBar_H * 2 - PMInfoBar_H) / 24 CellTopC_X = ValScreen_W - (ValScreen_W-ZBarCell_W)*ValZBarLeft - ZBarCell_W/2 - 1 CellTopC_Y = WMTitleBar_H + PMInfoBar_H + ZBarCell_H/2 - 1 #BigMessage(ValZBarLeft&"^NL^"&ValDotPitch&"^NL^"&ValScreen_W&"^NL^"&ValScreen_H&"^NL^"&WMTitleBar_H&"^NL^"&PMInfoBar_H&"^NL^"&ZBarCell_W&"^NL^"&ZBarCell_H&"^NL^"&CellTopC_X&"^NL^"&CellTopC_Y) #exit EndSub #■Call("PMExec") Sub PMExec #■PMパスが通っていれば起動して、地図画面クリック If(FileExists(PMapplePath)) Run(PMapplePath,PMappleArgs) Sleep(5000) MouseClick(PMappleWnd,ScreenWidth()/2,ScreenHeight()/2) EndIf EndSub #■Call("PMShow") Sub PMShow If(Not WndActive(PMappleWnd)) Show(PMappleWnd) ErrorLevel ("syntax") WaitForActive (PMappleWnd,5) ErrorLevel ("error") EndIf EndSub #■Call("ZBarWait") Sub ZBarWait While (ZBarWaitCount>0) Sleep(300) If(ColorAt(CellTopC_X,WMTitleBar_H+PMInfoBar_H+1)=CellWhite) ZBarOk=1 ZBarWaitCount=0 Else ZBarOk=0 ZBarWaitCount=ZBarWaitCount-1 EndIf EndWhile EndSub #■Call("ArgZoomRes") Sub ArgZoomRes If(IncomeVal>24) ResVal=24 Else ResVal=IncomeVal EndIf EndSub #■Call("ArgZoomUpRes") Sub ArgZoomUpRes ResVal=NowZoom+IncomeVal If(ResVal>24) ResVal=24 EndIf EndSub #■Call("ArgZoomDnRes") Sub ArgZoomDnRes ResVal=NowZoom-IncomeVal If(ResVal<1) ResVal=1 EndIf EndSub #■Call("ArgZoomIdRes") Sub ArgZoomIdRes ElmtIdZm=ElementCount(IndexZoom) If(IncomeVal>ElmtIdZm) ResVal=IndexZoom[ElmtIdZm] Else ResVal=IndexZoom[IncomeVal] Endif EndSub #■Call("ArgZoomIdUpRes") Sub ArgZoomIdUpRes ElmtIdZm=ElementCount(IndexZoom) i=1 While(ElmtIdZm>=i) If(IndexZoom[i]<=NowZoom) i=i+1 Else If(IncomeVal>ElmtIdZm-i+1) ResVal=IndexZoom[ElmtIdZm] Else ResVal=IndexZoom[i+IncomeVal-1] EndIf i=ElmtIdZm+1 EndIf EndWhile EndSub #■Call("ArgZoomIdDnRes") Sub ArgZoomIdDnRes ElmtIdZm=ElementCount(IndexZoom) i=1 While(ElmtIdZm>=i) If(IndexZoom[i]i-1) ResVal=IndexZoom[1] Else ResVal=IndexZoom[i-IncomeVal] EndIf i=ElmtIdZm+1 EndIf EndWhile EndSub