[PR]

PowerShell スクリプトファイルの関連付け

PowerShell のスクリプトファイル(.ps1 ファイル)をダブルクリックしてみると分かりますが、スクリプトは実行されずにメモ帳が起動します。でも関連付けがされていないわけではなくて、実はコンテキストメニューに「PowerShell で実行」という項目があります。これで実行できます。終わり!

以下は蛇足です。

スクリプトファイルをダブルクリックで実行可能にする。

この「PowerShell で実行」の実体となるレジストリキーは HKCR\Microsoft.PowerShellScript.1\Shell\0 です。

HKCR\Microsoft.PowerShellScript.1\Shell\0\command の「(既定)」のコマンドが「PowerShell で実行」。
Fig. 1: HKCR\Microsoft.PowerShellScript.1\Shell\0 キー

なので HKCR\Microsoft.PowerShellScript.1\Shell の「(既定)」に "0" と入力すればダブルクリックで実行されるようになります。

HKCR\Microsoft.PowerShellScript.1\Shell の「(既定)」に「0」を入力。
Fig. 2: HKCR\Microsoft.PowerShellScript.1\Shell キー

または HKCR\Microsoft.PowerShellScript.1\Shell\0 自体を HKCR\Microsoft.PowerShellScript.1\Shell\open に書き換えてもいいと思います。この辺の細かいことは「ファイルをダブルクリックしたときの動作を open 以外の verb にする」を参照のこと。

コマンドラインで .wav ファイルを再生する

「ファイル名を指定して実行」から「イカちゃん」とか打ち込んだら「なんでゲソ?」って返ってきたら面白いなあと思って調べてみましたけど、別にちょっと .wav ファイルを再生したいとか、スクリプトに組み込みたいとかそういうときにも普通に使えるので引かないでください。

サウンドレコーダーを使用する (XP 以前)

まず XP 以前ならサウンドレコーダーというツールでできてしまいます。サウンドレコーダーは sndrec32.exe ですのでこんな感じです。

sndrec32 /embedding /play /close "C:\Ikamusume\mail_janaika.wav"

/play と /close はそのままなのでいいとして、/embedding は GUI を非表示で起動するオプションです[1]。サウンドレコーダーが使えるならこれが一番簡単ですね。

.NET Framework の SoundPlayer クラス を使用する (Vista 以降)

問題は Vista 以降です。サウンドレコーダーは Vista 以降にもあるのですが、これは sndrec32.exe ではなく SoundRecorder.exe という別物で、その名の通りの録音専用ツールになってしまっています。整合性を求めるのは構いませんけど、そこは機能を削るんじゃなくて名称を変更するところでは……。

仕方がないのでなにか別の方法でできないかと調べていたところ PowerShell で .NET Framework の SoundPlayer クラス[2] を使うという方法に辿り着きました。次のように実行します。

PS C:\foo> $a = New-Object Media.SoundPlayer("D:\Index\mail_nandayo.wav")
PS C:\foo> $a.PlaySync()
PS C:\foo>

オブジェクトを生成してメソッドを呼び出しているだけです[3]。PlaySync() というのは同期再生っていうんですかね、要は再生して、その再生が終了するまで処理を待たせるメソッドです。非同期再生の Play() を使うと再生中に処理が進んでしまうので、スクリプトの場合は終了すると途切れてしまいます。PowerShell のコンソールを開いてそこから実行するのであれば Play() でもいいと思います。

ところで、これは複数行のコマンドなので、このままだと冒頭で述べたような「ファイル名を指定して実行」から「イカデックスたん」とか打ち込んで「え、な、なんでゲソ、なんだよ?」をするためにはコマンドをスクリプトか何かにする必要があります。できなくていいよ気持ち悪い、という方はそれでいいんですけど。

PowerShell のスクリプトについては次回かそこらで説明するかもしれません。しないかも。基本的にはバッチファイルと同じですし、ぐぐってもらえれば、ということで。

  1. ^ 詳細は ぺたぺた :: sndrec32.exeのコマンドラインオプションについてを参照。"sndrec32 /h" とかでヘルプは表示されないんですかね?
  2. ^ 詳細は MSDN の SoundPlayer クラス (System.Media) を参照。
  3. ^ PowerShell のオブジェクト操作は .NET Framework オブジェクト (Windows PowerShell) を参照。
Sponsored Link
Information
Menu
アンケート
Sponsored Links
Links
Mail Form

名前:
メール:
件名:
本文: