WSH の SendKeys で日本語を入力する [WSH][programming]

WSH の SendKeys でユーザのキー入力をエミュレートできます。
しかし、WSH の SendKeys は日本語に対応していないので、日本語を指定しても文字化けしてしまいます。

解決を調べたところ VB.NET では日本語に対応していることが分かりました。
しかも、VB.NET の SendKeys の COM オブジェクトを使いやすく DLL にまとめてくれている Clipboard.VB.NET を発見しました。

これを使えば WSH からも日本語入力を簡単にエミュレートできます。

まず、インストール。
マニュアル通りに Clipboard.DLL を C:\Windows\System32 にコピーし、regasm Clipboard.DLL を実行して登録します。
regasm が見つからないと言われ困りましたが、C:\WINDOWS\Microsoft.NET\Framework\<バージョン> に入っていました。
コマンドプロンプトから以下を実行します。

    > cd C:\WINDOWS\Microsoft.NET\Framework\<バージョン>
    > RegAsm.exe Clipboard.dll
    


サンプル (JScript)

var WshShell = WScript.CreateObject ("WScript.Shell");

WshShell.Run("NotePad.EXE");
while (!WshShell.AppActivate("メモ帳")) {
  WScript.Sleep(100);
}

// WSH の SendKeys は文字化けする
WshShell.SendKeys("文字化けします。\n");

// Clipboard.VB.NET の SendKeys は文字化けしない
var SendKeysEx = WScript.CreateObject("Clipboard.Clipboard");
SendKeysEx.SendKeys("文字化けしません。\n");