【Windows】起動時に自動でミュートにしたい!!

もくじ

塩と砂糖が見分けがつかないので目印つけようとしたら
「見ればわかるでしょ」と奥様に言われました(仲は良いですYo)

どうも。
視力が左0.1、右が乱視の0.6タッキーです。粒の見分けつきません。

先日、帰宅時の電車内でとある出来事がおきました。

まだ空いている区間で横の方がノートPCを取り出して何やら作業を始めました。
しばらくすると、バッテリー低下の効果音が大音量で鳴りました。
男性は慌てた様子でした。

この突然の大音量…
バッテリー低下の音で良かったですよね…

そんな経験ありませんか?

パソコンに電源を入れたら、音がミュート(出ない)ようにしたい!
ボリュームを自動で0にしたい!

↑があてはまったら、是非試して見て下さい!
ちょっとプログラム追加してあげれば簡単に防げます!!

プログラム未経験の方も対象にしています。
今回の記事は見ながらやれば、誰でも簡単にできます!

今回の記事の目的は世の中の「突然大音量で鳴り響いたパソコンに恥をかいた!」って方を助けたい一心であり、一部の内容については先人の知恵をお借りしております。

全てが私の知識・技術ではなく、知恵をお借りした方々に心より感謝申し上げます。

この記事を見てできる人の条件

条件

  • パソコンでインターネットした事ある程度にパソコンに触れる
  • Windows7、Windows8、Windows8.1、Windows10

自分のWindowsの調べ方

自分のWindowsって何かわからない…
そんな方は以下を行って下さい。

  1. キーボードの「Windows」キーを押しながら、「R」キーを押します
  2. 「ファイル名を指定して実行」画面で「名前」に「winver」と入力し、「OK」を押します。
  3. 「Windows のバージョン情報」画面が表示され、自身のWindowsが何かわかります。

※上記はワタクシの例です

プログラムを作る

このように書くと身構えますよね

でも大丈夫!

何ら特殊な技術はいりません。

保存する場所を決めよう!

場所はローカルであれば基本的に大丈夫です。

「ローカルって何だ?」

ローカルってのは、今触ってるパソコンって事です。

ローカルに保存=パソコンに保存って事です。

「パソコン以外のどこに保存するんだよ!」って方。

わからなければ気にせず次に行きましょう!

例ではCドライブに置く事にします。

CドライブはWindowsが入っている所ですヨ

ファイルを作成する!

※例ではCドライブに作成します。

場所が決まったら、まずはフォルダを作成しましょう。(無くてもいい)

Cドライブ開いて、「右クリック」→「新規作成」→「フォルダ」

名前は「volume_mute」とかにしてみましょう。

作成したら、「volume_mute」のフォルダを開いて、

「右クリック」→「新規作成」→「テキストドキュメント」をクリック

名前は後で変更しますので、そのままでOKです

作成したら、その「新しいテキストドキュメント.txt」をダブルクリック!

メモ帳開けました?

そしたら以下をコピーして、開いたメモ帳に貼り付けして下さい。

※↓をダブルクリックしてからコピーして下さいね。

Add-Type -TypeDefinition @'
using System.Runtime.InteropServices;
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAudioEndpointVolume
{
    // f(), g(), ... are unused COM method slots. Define these if you care
    int f(); int g(); int h(); int i();
    int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);
    int j();
    int GetMasterVolumeLevelScalar(out float pfLevel);
    int k(); int l(); int m(); int n();
    int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext);
    int GetMute(out bool pbMute);
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice
{
    int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator
{
    int f(); // Unused
    int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }
public class AudioControl
{
    static IAudioEndpointVolume Vol()
    {
        var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
        IMMDevice dev = null;
        Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev));
        IAudioEndpointVolume epv = null;
        var epvid = typeof(IAudioEndpointVolume).GUID;
        Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv));
        return epv;
    }
    public static float Volume
    {
        get { float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v; }
        set { Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty)); }
    }
    public static bool Mute
    {
        get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }
        set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
    }
}
'@

[AudioControl]::Volume  = 0 # 0.2 = 20%, etc.
[AudioControl]::Mute = $true  # Set to $false to un-mute

貼り付けると↓みたいになってますよね??

できたら上書き保存しましょう!

「ファイル」→「上書き保存」

名前を変える!

できあがったファイルを動くプログラムにしちゃいます。

今は「新しいテキストドキュメント.txt」ですよね?

それを「volume_mute.ps1」にしてください!

変更しようとすると「拡張子が~」って警告出ますが、変更して大丈夫です。

拡張子とはそのファイルの種類を表しています。

テキストファイルなら「.txt」

エクセルなら「.xlsx」とか「.xls」

音楽なら「.mp3」とか

それを、「.txt(テキストファイル)」から、「.ps1(PowerShellのスクリプトファイル)」に変更したのです!

PowerShellのスクリプトファイル??

簡単に言いますと、PowerShellのプログラム

PowerShell(パワーシェル)って?

マイクロソフトが開発したプログラムって認識てOKです。

マイクロソフトって??

マイクロソフトはWindowsを開発した会社さんですよ!

つまり、Windowsに元々入っているプログラムって感覚でOKです。

メモ帳にプログラム書いて、それはプログラムですよ!って変更したのが今回の流れ

作ったプログラムを実行しよう!

「volume_mute.ps1」を右クリックして、「PowerShellで実行」を押せば実行されます。

なんか画面が出て勝手に消えます。

すると、音量が0になり、更にミュートになっていませんか?

できたら成功です!!

ここまで来たらもう8割完成

変更前(volume_mute.ps1実行前)↓

スピーカーマークにバツが無い=ミュートではない

数字が25=音量25

変更後(volume_mute.ps1実行後)↓

スピーカーマークにバツがある=ミュート

数字が0=音量0

簡単に起動できるようにする

今のままだと、右クリックしてってやらないといけませんよね

めんどくさいじゃん

せめてダブルクリックで実行できるようにしましょうか!

ショートカットを作成する

「volume_mute.ps1」を右クリックしながら別の所で離してください。

「ショートカットをここに作成」をクリック

ショートカットできましたね!!

ショートカットをPowerShellで実行させる

できたショートカットは今のままだと、ただのショートカット…

このショートカットをPowerShellで実行できる魔法の文字を追加してあげます。

「volume_mute.ps1 – ショートカット」を右クリック→プロパティ

この「リンク先」に以下を先頭に追加して下さい。

「powershell -ExecutionPolicy RemoteSigned 」

※RemoteSignedの後に半角スペースがあるので注意

↑の文については後述

追加すると以下のようになってますよね?

わかりにくいので文字にしますと以下のような感じ。

powershell -ExecutionPolicy RemoteSigned C:\volume_mute\volume_mute.ps1

※「\」の部分は「¥(半角)」

できていれば「OK」押して下さい。

PowerShellの実行ポリシーについて

PowerShellはスクリプト(プログラム)を簡単に起動できないようになっています。

間違えてダブルクリックした!や、悪意のあるプログラムの動作阻止の為です。(たぶん)

今回ショートカットに追加したのは「powershell -ExecutionPolicy RemoteSigned 」

↑の文を説明しますと、PowerShellで実行しなさい。実行ポリシーはRemoteSigned でね

ってなります。

実行ポリシーとは、そのプログラムを実行して良い条件です。

今回はRemoteSignedです。

各ポリシーについてザックリ説明ですが以下となります。

Restricted:全てのスクリプトが実行禁止(デフォルトの状態)

AllSigned:署名されているスクリプトのみが実行可能

RemoteSigned:ローカルに保存されているスクリプトは実行可能。非ローカルのスクリプトは、署名されているもののみが実行可能

Unrestricted:全てのスクリプトが実行可能。非ローカルのスクリプトはユーザーが明示的に許可した場合のみ実行可能

Bypass:全てのスクリプトが実行可能

ダブルクリックして実行する

できた「volume_mute.ps1 – ショートカット」をマウスでダブルクリックしてみましょう。

今度は右クリックして「PowerShellで実行」をしなくてよくなりました。

パソコン電源ON→自動的に起動

このままでは目的のファイルを探してダブルクリックしないといけません。

そんなんじゃ自動化ではありません。

では自動化してみましょう!

スタートアップフォルダを探す

簡単です。

  1. キーボードの「Windows」キーを押しながら、「R」キーを押します
  2. 「ファイル名を指定して実行」画面で「名前」に「shell:startup」と入力し「OK」を押します。

スタートアップにプログラムを入れる

これも簡単です。

作った「volume_mute.ps1 – ショートカット」を、開いた「スタートアップ」フォルダにコピーしましょう!

再起動してみる

これで自動起動は終了です。

説明長いだけで、実はやっている事がそこまで多くないんですよ。

自動起動がうまくいっているかを確認してみましょう。

音量を上げて再起動しみ下さい。

自動で「volume_mute.ps1 」が起動し、音量が下がっているはずです。

これにて電源入れたら自動で音無し!は完了です!

今回の記事の流れを簡単に説明

  1. テキストファイルを作成
  2. 作成したテキストファイルにプログラムをコピペ
  3. プログラムを書いたテキストファイルの名前を変える
  4. ショートカット作る
  5. そのショートカットをいじる
  6. スタートアップにショートカットをコピー

実はこれだけなんです!

実は完璧では無かった

すいません。

よくよく考えたら、必ず起動時に無音では無かったです。

確かに「volume_mute.ps1 」が起動されれば無音になります。

ですが、前回終了時に音量を上げた状態で終了すると、

人によってはWindows起動音は流れてしまう可能性もあります…

ここまで記事書いてから思い出しましたスイマセン

ちょっとパソコンわかる方ならハッとするかもですが、

対策は起動音を鳴らさない事です。

そもそもWindowsの起動音っていります?(個人的にはいらない)

「windows 起動音 消す」とかで検索して、起動音を消してみて下さい!

※最後に人任せでスイマセン…

終わりに

いかがでしたでしょうか。

一応、ワタクシなりにプログラムのプの字もわからない方向けに書いたつもりです。

詳しい方からすると説明長ったらしいですね。

先に書いた通り、「音を消し忘れたせいで、恥ずかしい思いをした」方全員を対象に本記事を執筆いたしました。

この記事は技術ネタですが、技術を広めたいというよりも電車でワタクシの横に座ったあの方に向けた僕なりのラブレターです。

関連する記事

もっと見る