5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【array[1] = 】MortScript

1 ::2007/02/22(木) 19:31:02 ID:M9z6MPve0
いろいろ遊べる使えるスクリプト言語 MortScript のスレ立てました
スクリプティングのtipsやhelpなど、
「英語マニュアルがわからない」という人も
謙虚に質問しつつ教えてもらいましょう

http://www.sto-helit.de/

2 :いつでもどこでも名無しさん:2007/02/22(木) 19:31:59 ID:???0
2get

3 :いつでもどこでも名無しさん:2007/02/22(木) 22:39:51 ID:???0
デンマーク製、EmacsCEとお里が同じだね。
unicode(日本語)使えないみたいだし、正規表現無いし、
という点ではちょっと貧弱かなー。
Visual Basic似でとっつきやすいというのはありそうですが。

しかし、おおおっと!!!! RunAt()は熱いね!!
UNIX Timeで指定できるから時間計算が楽だ。
しかも、RunOnPowerOn()、RemoveNotifications()もあるし。
これができるものを探していたよ。>>1 GJ! nscriptmのRunAppAtTimeは
最近のデバイスではうまく動かないみたいだったから。
電源管理機能もあるから、面白いことができそう。

nscriptm
http://s-k.al.ru/nscript.html

ざっとマニュアルを見たところ、unicode使えなさそうという点を除いては
なかなかユーティリティ的に使い手がありそう。
RunAt()の実験と合わせていずれブログのネタにさせてもらうよ。

ただ、このスレ3年で100行けばいい方だろうね(笑)。


4 ::2007/02/22(木) 23:45:31 ID:M9z6MPve0
>>3
ようこそ!
俺も最近いじり出したんだけど面白いよ
RunAt()つかって、「無線LANに繋がってるかどうか」で
複数メールアカウントの自動巡回の頻度を変えるスクリプトができた

スレ周知と保守を兼ねて、しばらくはageておくれよ

5 :いつでもどこでも名無しさん:2007/02/23(金) 01:59:30 ID:???0
この板のプログラム系のスレの惨状を見れば分かるけど、
無駄なあがきだよ。

それに1年〜2年放置してても落ちないし。
落ちるかどうかはageてるかどうかでなくて、
最終書き込みのタイムスタンプで判定されるよ。

ところで喜び勇んでRunAt()を使ってみたけど、サスペンドから起きない。

>The PPC will wake up from standby if necessary.

とあるから、起きてきてもいいはず。
機種はiPAQ h2210。そっちではどう?

■Mort.mscr

# 10秒後にMort2.mscrを実行
RunAt(Timetamp() + 10, "¥My Documents¥Mort2.mscr")
# サスペンド
PowerOff

■Mort2.mscr

PlaySound("¥Windows¥KeyDown.wav")
Message("Time to Up " & TimeStamp())


6 :いつでもどこでも名無しさん:2007/02/23(金) 02:07:25 ID:???0
というか、できているんですかね。機種は何ですか?
正に同じことをやろうとしていた。

サスペンドから起こす

{
 ネットワークつなぐ
  ↓
 QMail3巡回かける
  ↓
 メールきてたら何かで知らせる
  ↓
 ネットワーク切断
}

サスペンド

{ から } まではQMail3だけでできるかな。
MortScriptはネットワークの死活判定ができるから、
サスペンド移行もできるなーと皮算用していたんだけど。

7 ::2007/02/23(金) 03:54:00 ID:hEPHOGja0
>>5
age/sageの件了解。

こっちはW-ZERO3 WS003SHだけどRunAt()は普通に走るよ
PowerOffからも起きる。

>>5さんのスクリプト自体を試したわけじゃないが、

> RunAt(Timetamp() + 10, "?My Documents?Mort2.mscr")

「Timetamp」はtypoだよね、念のため。
"My Documents" にMortScript.exeも入ってるの?
そうじゃなければ、"Mort2.mscr"は、MortScript.exeの
実行パラメータとして指定しなくちゃいけないはずだよ。

>>6
接続に関して、少なくとも俺の環境では、
MortScriptのConnected()の返事は当てにならないので
RegRead()で該当レジストリの値を読んで判断させてるよ。

参考までに、スクリプトうpしようか?

8 :いつでもどこでも名無しさん:2007/02/23(金) 16:34:57 ID:???0
あなたマカーだね? どうでもいいが。
ZERO3では起きるか。いいなー。
ZERO3が欲しくないがゆえにh2210で頑張っているんだけどな。
WM5以降にしか無いAPIなのかな。

timetamp() => TimeStamp()

はtypo。h2210を前に、Macから書いているという状態。
10秒たった後に電源入れてみると、電源入れた瞬間に
音出てダイアログが表示されるから、RunAtの引数については
大丈夫だと思うんだけど、後でやってみよう。

うpよろしく。


9 :いつでもどこでも名無しさん:2007/02/23(金) 16:41:36 ID:???0
ちなみに、文字列系の関数、日本語も大丈夫だね。
とりあえずShift-JISのテキストを、
バイト単位じゃなくて文字単位で処理してくれる。
ダイアログ系にも日本語表示されるし。
マニュアル見るとUnicodeで書くな! とか書いてあるから、
だめだと思っていたんだけど。

あと、cabでインストールされるテキストのマニュアルが古い!
Split()、Time()使おうとしたら無いとか言われるし。


10 ::2007/02/23(金) 18:35:55 ID:hEPHOGja0
>>8
いかにも俺はマカー。なんでわかった?w あ、バックスラッシュか。

そんなことより>>8さんよ!解決した&面白い事がわかったよ

>>5のスクリプトを実際に走らせてみた。
たしかにZERO3でも起きない。おかしい。
そこで、シンプルにこうしてみた。(全角の¥ですまん)

RunAt(TimeStamp() + 10, "¥Windows¥KeyDown.wav")
PowerOff

すると、音が鳴ってからサスペンドすることがわかった。
つまり、「TimeStamp() + 10」が効いてない。
おかしいなー、俺のスクリプトとどこが違うんだろうと考え、
ためしに「TimeStamp() + 60」にしてみた。
すると、60秒後にちゃんと音が鳴って、起きる。

10秒では駄目、60秒はOK。ならば何秒以上ならいいのか?
少なくとも俺の環境では
「TimeStamp() + 11」で、問題なく走った。
「10秒以内のNotification Queueは無視される」ということらしい。


11 :いつでもどこでも名無しさん:2007/02/23(金) 19:08:08 ID:???0
うーん。起きた、というか液晶が付かずに音だけ鳴った。
むしろ好都合のような気がするけど、
何かしらの具合でサスペンドされなかったら、
人知れずバッテリ消費してRAMあぼーんになりそうだ。
正常系ならMortScriptで電源の状態を知ることができるから、
抑制できるはずだけどね。

アプリも起動できた。液晶が付かずに。1さんありがとう。
これで道が開けた感じか。

-gオプションでいけるはず。
http://q3.snak.org/doc/CommandLine.html

MortScriptは話によるとシリアルにもアクセスできるらしいから
位置情報のロギングとかできたりしてね。

> Read/write access to serial (COM) ports

http://mort.sto-helit.de/index.php?module=page&entry=ms_overview&action=view&menu=29

12 ::2007/02/23(金) 19:27:28 ID:hEPHOGja0
>>11
うまくいきましたか。よかったよかった。
ZERO3だと液晶も点くな。

いちおう俺のスクリプトうpしといた。
テキストでうpしといたんで、軽く見てみて。
http://w-zero3.org/uploader/src/up0244.txt

俺はあえてtmail使いたいんで、これが必要だった。

13 :いつでもどこでも名無しさん:2007/02/24(土) 05:35:49 ID:???0
1さんありがとう。1さんのスクリプト、流れ消えるとこじゃなくて、
ちゃんと後に残しておいた方がいいと思うよ。

しかし、ダメだった。

動こうとするものの、h2210のRunAtによる起動後は
シリアルが寝ているらしく、ダイアルアップできない。最悪ハングしてしまう。
自分で自分をRunAt()で呼び出すスクリプトで、
呼び出されてからSleep()で十分にデバイスが起きるまでの時間を設け、
その後にRun()で呼び出す、ということはやっているんだけどね。
一瞬CFスロットのPHSカードのLEDが瞬くのだけど、ダメだ。
この機種固有の問題なんだろうね。デバイスが起きている分には、

# ダブルコーテーション二つはダブルコーテーションのエスケープ表現
Run("¥hoge¥bin¥q3u.exe", "-g ""hogecourse""")

で巡回を始めてくれるんだけどね。
デバイスが起きてるんなら普通に巡回すればいいし(w
おいしいところをZERO3に持っていかれっぱなしでくやしい!

QMail3独自のダイアルアップ方法に問題があるかと思って、

# 有効なコネクション名はConnect("Test", "Test")で分かる
Connect("internet")

でRunAt()からのダイヤルアップを試みてみるも、ダメ。
小型&CF+SD2スロWMマシンの動作確認報告待つ。
場合によっては買い替えてもおk。

14 :いつでもどこでも名無しさん:2007/02/24(土) 06:35:06 ID:???0
どうしてももやもやして、
CASSIOPEIA E-2000を引っぱり出して試してみた。
バッチリ動く。……orz

サスペンドから起きる→QMail3でダイヤルアップ開始→
巡回→切断→OSの消費電力設定でサスペンド

液晶が消えたまんまだったり、シリアルが寝ていたりするh2210と違い、
E-2000ではRunAt()で起きた瞬間に普通に起動する。完璧だ。
ひょっとしたらQMail3のマクロにsystemコマンドとかあるのかな。
だとしたら、巡回終了次第サスペンドというのができるかも。

しかし、いいマシンだがE-2000では巨大過ぎる。
体感h2210の2倍ぐらいある。今更持ち歩けない。


15 ::2007/02/24(土) 18:10:59 ID:hlp9tbC/0
>>13
これはしょせん「俺スクリプト」の域を出てないからw
まぁこのスレが多少でも盛り上がって来たら、
スクリプト置き場でも作ろうかね。

デバイスが起きないかぁ。
PowerOn っていうコマンドがあるとよかったのにね。

16 :いつでもどこでも名無しさん:2007/02/25(日) 01:05:28 ID:???0
h2210+CFGPS2でログ取ってみた。
SetComInfoはマニュアルに記載が無いのでフォーラムを見てやってみた。
# CFスロット
p = "Com7:"
# COMポートのセッティング。変数は%でくくると確実
SetComInfo(%p%, 4000, 4800, "None", 8, 1, "None")
# 一応ウェイト。単位はms
Sleep(1000)
# いちいちポート閉じてしまうので、
# PHSカードにコマンド送っても意味無かった
# WriteFile(%p%,ReadFile("¥command.txt"))
res = ""
n = 1
While(n <= 5)
# ReadFileはポート開いて読み出してポート閉じてる
res = res & "^NL^" & ReadFile(%p%,200)
n = n + 1
EndWhile
# ReadFileのオーバーロード。
# 変数resにファイル%p%から全読みしたストリームを代入
# ReadFile(%p%, res)
# ログをファイルに保存
WriteFile("¥gps-log.txt", res)
Message("Done")

本当はPHSの位置情報を取得しようとしたんだけど、
いちいちWriteFile()、ReadFile()はポート閉じてしまうので、
一方的にデータ送ってくるGPSみたいなのしか相手にできないみたい。

17 ::2007/02/25(日) 03:22:39 ID:kXTvnaDI0
>>16
ふぇ〜 俺スキル無いからよくわからんよw

関係ないけど、今日わかったこと覚え書き。
TimeFormat()はv4.0RC4ではうまく働かない
要RC9

18 ::2007/02/25(日) 03:25:15 ID:???0
>>17 自レス
FormatTime()のまちがいね

19 :いつでもどこでも名無しさん:2007/02/25(日) 04:47:27 ID:???0
PHSカードから位置情報を読み出す場合は、
コマンド送って応答待ってコマンド送って応答待ってという
双方向のやりとりが必要だけど、
ReadFile、WriteFileでCOMポート開いても、
片道で終わってしまうからダメということです。



20 :いつでもどこでも名無しさん:2007/02/25(日) 05:16:50 ID:???0
フォーラムをながめているとh4150を使っている外人が、
RunAt()に絡んでDisplayOn.exeという自作らしきアプリを使っている
事例に当たった。恐らくh4150でもh2210と同じような感じなんだろう。
http://www.ppc-welt.info/community/showthread.php?p=827797

……とよく見ると、その下の方でRC8にそれが取り入れられて、
ToggleDisplay()という関数が追加されていることが分かった。
RC4が最新だと思っていた。RC9とともに配布されているマニュアルを見ると、
確かに記載されている。ということで、

ToggleDisplay(1)

を入れたら、何とh2210でもサスペンドから起きて液晶が点灯。
しかし、ダイヤルアップでハングしてしまう。
できることもあるけど、不安定。やっぱりだめ臭いな……。

21 ::2007/02/25(日) 22:09:53 ID:kXTvnaDI0
ToggleDisplay()は見落としてたや。

素人考えかも知らんが
エWindowsエrnaapp.exe -e"(アカウント名)"
で強引にダイアルアップするのもだめなのかな…?

もっとも、これだとメールアプリ巡回コマンド出した時点で
connmgr.exeがエラーメッセージを吐くだろうから
それは別に何とかしなくちゃいけないだろうけど。

22 ::2007/02/25(日) 22:14:03 ID:???0
しまった。。。
¥Windows¥rnaapp.exe -e"(アカウント名)"

23 :いつでもどこでも名無しさん:2007/02/26(月) 12:46:38 ID:???0
1さんありがとう。rnaappは知っていたよ。

ハングアップした理由が分かった。
QMail3をSDに入れていたことだった。
そんなこと分かっていたはずなんだけどね。
最近Linux Zaurusばかり使っていたので忘れていたよ。
RAMに入れ直したら快調!
やりたかったことがやりたかった機種でできるようになった。
Vibrate()でLEDの色を変えることができているから
これで振動モーターを動かせないかな。
ボタン型の振動モーターの買い置きがあるので。
トランジスタ、逆起電力防止用ダイオード、
電流制限用抵抗ぐらいでできそうなものだけど。

24 ::2007/02/26(月) 18:14:46 ID:Bn6brWRj0
>>23
> QMail3をSDに入れていた

・・・不具合の原因ってのは
意外にそんなことだったりするよねーw
ともあれ、よかったよかった。

> これで振動モーターを動かせないかな。

それじゃMotorScriptじゃんw

25 :いつでもどこでも名無しさん:2007/02/27(火) 03:43:58 ID:???0
ほっほっほ。

今日はサブルーチンについて調査。
サブルーチン定義の基本形。

Sub subname
#lines
EndSub

引数、返り値無し。
変数はすべてグローバルなので、重複に注意しつつ必要な引数は変数で渡す。
全部参照渡しだと思えばおk?

定義はすべての主処理の後にする。
さもないと、MortScriptはサブルーチン定義を見つけた時点で
実行を止めてしまう。主処理の前にサブルーチン定義をしてしまうと、
何も実行されない。前半主処理、後半サブルーチン定義とする。

定義したサブルーチン呼び出し方法。

Call("subname")

要ダブルコーテーション。これのみによって呼び出せると考えた方がいいみたい。

26 :いつでもどこでも名無しさん:2007/02/27(火) 03:55:30 ID:???0
MortScript全体に言えるけど、変数への値の代入は、

Var = "value"

とできるけど、変数の参照は

「Var」でできる場合と「%Var%」でないとできない場合がまちまち。
できない場合の代表例は、

Repeat %Var%
#lines
EndRepeat

Message(%Var%)

特にRepeatの方は要注意。これを「Repeat Var」と書くと
無限ループの出来上がり。

以上、4.0 RC10で試した結果。

つーか、整合性の取れていないドキュメントをどうにかしてくれ。
WiKiとかにまとめといてくれって感じ。ちょっと前のバージョンとも
相当違うみたいで、変革期ゆえしょうがないのかもしれないけど。


27 :いつでもどこでも名無しさん:2007/02/27(火) 04:07:22 ID:???0
COMMAND.txtの
x = GetClipText()
が動かないと思ったら、
GetClipText(x)
になってるみたい。どうも、PDF版のマニュアルの信頼度が一番高いみたい。

恐らく一番マトモなドキュメント(しかし鵜呑みにしてはいけない)
http://mort.sto-helit.de/index.php?module=download&action=view&entry=64

↓古いサイト(古いのをつかまされるので注意)
http://www.sto-helit.de/
↓新しいサイト(こっちが事実上の公式サイトか)
http://mort.sto-helit.de/

MortScriptのサンプルスクリプト溜
http://forum.xda-developers.com/showthread.php?s=2dbb4e2d32b3a038cf9439e8ebb01d63&t=289197


28 :いつでもどこでも名無しさん:2007/02/27(火) 04:37:00 ID:???0
Repeat Var
#instruction(s)
End Repeat

だとダメで、

Repeat(Var)
#instruction(s)
End Repeat

だと大丈夫なのね。


29 ::2007/02/27(火) 05:46:02 ID:PBiFTIO10
>>25
そうみたいね。
俺は>>12のスクリプトのメールアカウント巡回プロセスで
最初サブルーチン使ってたんだけど
あんまり意味無いみたいだったんで、最終的につるっと書いちゃった。

>>26-28
全体的に()で括る方向になってるみたいね。
俺は今RC9入れてるが、Message( Var )で問題あった経験は無いよ。

http://mort.sto-helit.de は一時的なもののようなので
http://www.sto-helit.de/ を一応>>1には載せといたんだけど
公共的に、現時点ではこのリンク↓を貼っとくのがいちばんいいのかな。
http://mort.sto-helit.de/index.php?module=download&action=list&entry=18


30 :いつでもどこでも名無しさん:2007/02/27(火) 14:20:57 ID:???0
http://www.sto-helit.de/
の方は、最初見たとき萎えた。
むしろ、釣りなのかと。

Message()もカッコがあれば%無くて大丈夫だね。
勢いで書いている。

スクリプトはほぼ書けたけど、
カードスロットの状態判定が難しいな。
今のままではカードが刺さってなくても巡回しようとしてしまう。
HKCUのStateってWM2003には無くて、
状態の取得が難しいのではないかと。
しかし、そのStateって凄くいいなあ。
動的に値を変えるレジストリか。
UNIXの/proc/みたいで格好いい。


31 ::2007/02/27(火) 18:58:52 ID:PBiFTIO10
>>30
レジストリ探すのは苦労するよね。
電界強度を動的に格納してるキー
HKCU¥Software¥Sharp¥ShPhoneLib¥RFStrength
を見つけたときは嬉しかったw

ところで、レジストリや実行中プロセスを探すのにはこれ↓が便利
Task Manager v2.7
http://www.pocketpcfreeware.com/en/index.php?soft=1612

32 :いつでもどこでも名無しさん:2007/02/27(火) 20:46:47 ID:???0
これは凄いね。MortScriptのスクリプティングに全面的に役立つ。

レジストリの検索ができる。TREを速攻でアンインストール。

ウインドウハンドルが分かるので、
ウインドウメッセージを送るタイプのスクリプトを書いてみよう。

Notificationのエントリの確認、掃除までできて、
今のテーマにうってつけ。

ブログに書いたんだけど、このNotificationの掃除
をするアプリのことを書こうと思って探せなくて
困っていたところだった。これを紹介することにしよう。

WM2003ではちょっと画面が変だけど、許容範囲。

1さんありがとう。


33 ::2007/02/28(水) 01:37:53 ID:tRIkJZD50
強力だよねこれ。
知ってるかとも思ったけど、役に立ってよかったです。

関係ないけど、PPCを鳩時計にするスクリプト↓書いたw


34 ::2007/02/28(水) 01:39:45 ID:tRIkJZD50
#CuckooClock.mscr#####################
#MortScript 4.0 RC9

#このファイルはMortScriptと同じフォルダに入っているので
thisFile = SystemPath( "ScriptPath" ) ¥ SystemPath( "ScriptName" ) & SystemPath( "ScriptExt" )

#鳩時計の音は http://www.wavsource.com/sfx/sfx.htm でゲット
#Layer III エンコードのこのwavは、W-ZERO3では
#そのままでは鳴らなかったので、PCMエンコードに変換済み
Snd = "¥My Documents¥My Sound¥cuckoo_clock1_x.wav"

#テスト時のnotification queueが溜らないように
RemoveNotifications( thisFile )

t = TimeStamp()
#Unix Time Stampは閏秒を考慮しないそうなので簡単
RunAt( t + 3600 - (t MOD 3600), thisFile )

#FormatTime( "h" )は12時間表記で「時」を返す
#ひと桁時の時は「04」といった文字列を返すが
#Repeat()はそのままで「4」と認識してくれる
Repeat( FormatTime( "h", t ) )
PlaySound( Snd )
EndRepeat

#End of Script#########################



35 :いつでもどこでも名無しさん:2007/02/28(水) 05:51:41 ID:???0
イイネ!! 一応ブログ貼っとく。
http://moyashi.air-nifty.com/hitori/2007/02/windows_mobile__1d34.html
http://moyashi.air-nifty.com/hitori/2007/02/windows_mobile__5551.html


21 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)