マビで、毎日リアル七時にあるミニゲーム的な物がありましてな。俺的には例の、勝っても嬉しくなく負けるとイラつくゲームの典型なんだけど、タイトルとか景品とかあるんで、入手までは我慢しようと。
で、よく参加を忘れるんだ。あまり忘れると損になる仕様なので、時報が欲しいなー、と。
ソフトをわざわざ入れるのも何かアレなんで、タスクスケジューラから何とかなんねーかなー、と思ったんだけど、「プログラムの開始」「電子メールの送信」「メッセージの表示」という選択肢しか無い。出来れば音を鳴らしたいのだが。
という訳で、WSHでちょろっと書けないものかと。
XPまでのWindowsではSNDREC32.exeに放り込むのが定番だったみたいだけど、Windows 7には無い。SoundRecorder.exeになってしまっている。調べてみると、再生させるだけのモードみたいなのも無くなったとのこと。安心のMS品質。
それじゃー、とさらに検索すると、PowerShellで.NET Framework叩け、って話に辿り着く。えー。嫌だからJScriptで試そう(笑)。えーと、
new ActiveXObject("System.Media.SoundPlayer")
でまずオブジェクト作れるか確認。駄目だ、弾かれる。面倒なことになりそうだから即諦めよう(笑)。正しいやり方あったら教えてください。
んじゃーPowerShellで、と。
PS > (New-Object Media.SoundPlayer("C:/foo/bar.wav")).PlaySync()
こんなんかな。シェルで実行してみたらちゃんと鳴ったし。それじゃps1ファイルを作って、と。
ああ、デフォだとローカルでも署名が要るのか…。それじゃ、
PS > Set-ExecutionPolicy RemoteSigned
こうかな。エラーですな。管理者としてPowerShell.exeを実行し直して、と。そろそろ糞面倒くせえ。
よしよし、行けた。あとは
> PowerShell.exe foo.ps1
で行けるな。行けるけどさ。
めんどくっさー。
タスクスケジューラも分かりにくいUIでイラッと来たけど、まあ登録は簡単だ。簡単だけど、窓を非表示で実行とかのオプションは無いんか。
> PowerShell -WindowStyle Hidden
でも一瞬窓が出るし。使えねーオプションだなー。ショートカット置いても本体を勝手に登録するし。MSめー。
この辺で、もういっそのことC#とか使えばいいじゃん俺、とか思い始める。C++/CLIなんてのもあるよ!
いや、やるなら素直にC#っすけどね。
あ、最後に
PS > Set-ExecutionPolicy Restricted
に戻しておいた。
追記:
cmd.exe /c echo ^G
って手もあったなあ…。