顔文字を一括登録

顔文字を一括登録とかできるのかなぁと調べたらとても便利なMortScriptを公開されている方がおられました。

テキストファイルから単語登録する - smart phone(W-ZERO3)のsmartな使い方
http://tok03.blog111.fc2.com/blog-entry-26.html

ここで公開されているautoregist.mscrなら、dic.txtというファイル名でtxtファイルを作成するだけで一括登録可能です。

顔文字の一括登録に使用させていただいたのですが、一度登録済みの単語を再登録しようとしてしまった場合、エラーになってスクリプトがとまってしまうので、MortScriptの勉強も兼ねて勝手に改変させていただきました。

MortScriptって書いてすぐ動かせるので面白いですね。

# ------------ autoregist.mscr ------------------
#
# ATOK 辞書ユーティリティ 単語自動登録スクリプト For Advanced/W-ZERO3[es]
#
# ref. to http://tok03.blog111.fc2.com/blog-entry-26.html
#
# tokさんが書かれたスクリプトを
# 既出の単語だった場合はキャンセルして次に進むよう改変しました。
# #それ以外にも勝手にインデントとかしました。すみませんm(_ _)m
# 動確済ですが、もしエラーになる場合は
# 「notExistWait」を長めに設定してみて下さい。
#
# ref. to http://d.hatena.ne.jp/srkzhr/20071031/1193846957
#
# -----------------------------------------------

Message("単語の登録を開始します")

# ------------ Define ------------------
atok = "ATOK 辞書ユーティリティ"
toroku = "単語登録"
alreadyExist = ""
wait = 100
notExistWait = 1000
errorMessage = "異常な動作を検出したので終了します"

inputFile = "\dic.txt"

# ------------ Window Initialize ------------------
If(WndExists(toroku) = 1)
  Close(toroku)
  Sleep(3000)
EndIf

If(WndExists(atok) = 1)
  Close(atok)
  Sleep(3000)
EndIf

# ------------ Word Regist Execute ------------------
Run("\Windows\ATOKPUT.exe");
Sleep(3000)
f = ReadFile(inputFile)
ForEach line in split (f, "^LF^", 1)

  Split (line, "^TAB^", 1, item)

  WaitForActive(atok, 3)
  If(WndActive(atok) = 0)
    Message(errorMessage)
    Exit
  EndIf

  SendLeftSoft(atok)
  Sleep(wait)
  SendCR(atok)

  WaitForActive(toroku, 3)
  If(WndActive(toroku) = 0)
    Message(errorMessage)
    Exit
  EndIf

  SetClipText(item[2])
  SendCtrlKey(toroku, "v")
  Sleep(wait)
  SendTab(toroku)
  Sleep(wait)
  SetClipText(item[1])
  SendCtrlKey(toroku, "v")
  Sleep(wait)
  SendTab(toroku)
  Sleep(wait)
  SendTab(toroku)
  Sleep(wait)

  If(WndActive(toroku) = 0)
    Message(errorMessage)
    Exit
  EndIf

  SendCR(toroku)

  SendCR(alreadyExist)
  Sleep(notExistWait)

  If(WndActive(toroku) = 1)
    SendCR(alreadyExist)
    Repeat(4)
      SendTab(toroku) # Need To lengthen "notExistWaite"
    EndRepeat
    SendCR(toroku)
  EndIf
EndForEach

Close(atok)
Message("単語の登録が完了しました")