PythonでAMETサーバ
AMETとは仮名漢字変換ソフトであるATOKからユーザの入力データを受け取ることのできるオートメーションサーバです。詳細はATOK技術情報を参照してください。
オートメーションの勉強がてらPythonで書いてみたところ、想像以上に短い行数で実装できたのでここで公開します。このスクリプトを実行するとAmetServクラスがオートメーションサーバとしてレジストリに登録され、他のアプリケーションから「AmetPy」の名前でアクセスが出来るようになります。以前作ったAmetMulti.pyはAmetMultiに依存していたので、この技術を使って単体で動くものにしようと思っています。
なおこのソースコードを参考にオートメーションサーバを作ってみようと考えている方は http://www.roy.hi-ho.ne.jp/pastel/home/Python/のWin32拡張モジュールとQuick Start to Server Side COM and Pythonも読んでみるといいと思います。
#
# AMET Automation Server
#
class AmetServ:
_public_methods_ = ['AmetStart']
_public_attrs_ = ['AmetYomi', 'AmetHyoki', 'AmetResult', 'AmetQuit']
_reg_progid_ = "AmetPy"
_reg_clsid_ = "{432497D0-6AB1-4C95-864A-B360A5363364}"
WM_USER = 0x0400
WM_AMET_NOTIFY = WM_USER + 100
def AmetStart(self, hWnd):
import win32api
self.AmetResult = ( u"AmetYomi: " + self.AmetYomi +
u", AmetKyoki: " + self.AmetHyoki)
self.AmetQuit = 1
win32api.PostMessage(hWnd, self.WM_AMET_NOTIFY)
if __name__ == '__main__':
print "Registering COM server ..."
import win32com.server.register
win32com.server.register.UseCommandLine(AmetServ)