考えてみればSendKeysとかのhigh level APIを使えばよかったんだけど、Windowsのアプリを移植した関係でwin32のラッパーを使うことにしたのですが。
WM_CHARで文字列を送るとき、そのまま文字として送るとダメなので、ord()で変換する必要がありました。考えてみれば当たり前なんだけど、最初「なんで動かないんだろ」と悩んでしまったのでメモ。
sub put_str{ my ($hWnd, $str) = @_; foreach(split(//, $str)){ SendMessage($hWnd, WM_CHAR, ord, 0); }; }
こんなかんじ。