サイトアイコン teckback

[Windows11にも対応] プロジェクタに接続する際に便利!解像度をワンクリックで変更できるように

画面の解像度を切り替えることが意外とありませんか。

プロジェクターにつないで変更・TV会議システムにつないで変更。。。。

そのたびに設定を開いて・・・というのは、はっきり言って手間ですよね。

高解像度と低解像度を手間なく切替えたい。。。
そこでWindows10、Windows11の解像度をワンクリックで変更する方法を紹介します。

一度ファイルを作っちゃえば、あとは実行するだけなのでチャレンジしてみてください。

解像度の変更方法(通常)

Windows10で画面の解像度を変更する場合はディスプレイ設定から行う。

通常の変更方法は以下サイトの説明が分かりやすいのでそちらを参考に。

Windows 10で画面の解像度を変更する方法(NEC LAVIE公式サイト)

しかし・・・

上記方法で解像度はもちろん変更できるんです。

が、頻繁に解像度を切替えたい場合は正直面倒。

筆者はSurfaceBookを使用しているが、デフォルト解像度は3000×2000と高い。
画面が広く使えて便利な反面、字も小さくなるので解像度を低くしたくなることがよくある。

解像度の高・低を簡単に手軽に切り替えられると便利だ。

解像度の変更方法(ワンクリック)

ここではPowerShell+バッチファイルの組み合わせでワンクリックによる切り替えを実現する。

Windows10、Windows11、どちらも同じ方法でOK。

以下、順を追って説明しよう。

バッチファイル作成方法

Cドライブ直下にbatフォルダを作成。

作成したフォルダに2160-1440.ps1ファイルを作成する。
※ファイル名とフォルダ名は自由に決めて構わないが、名称にスペースは入れないこと。

次に以下のスクリプトをコピーする。

Function Set-ScreenResolution {

<#
.Synopsis
Sets the Screen Resolution of the primary monitor
.Description
Uses Pinvoke and ChangeDisplaySettings Win32API to make the change
.Example
Set-ScreenResolution -Width 1024 -Height 768
#>
param (
[Parameter(Mandatory=$true,
Position = 0)]
[int]
$Width,
[Parameter(Mandatory=$true,
Position = 1)]
[int]
$Height
)
$pinvokeCode = @”
using System;
using System.Runtime.InteropServices;
namespace Resolution
{
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE1
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;
public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
};

class User_32
{
[DllImport(“user32.dll”)]
public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);
[DllImport(“user32.dll”)]
public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);
public const int ENUM_CURRENT_SETTINGS = -1;
public const int CDS_UPDATEREGISTRY = 0x01;
public const int CDS_TEST = 0x02;
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_RESTART = 1;
public const int DISP_CHANGE_FAILED = -1;
}

public class PrmaryScreenResolution
{
static public string ChangeResolution(int width, int height)
{
DEVMODE1 dm = GetDevMode1();
if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmPelsWidth = width;
dm.dmPelsHeight = height;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
if (iRet == User_32.DISP_CHANGE_FAILED)
{
return “Unable To Process Your Request. Sorry For This Inconvenience.”;
}
else
{
iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);
switch (iRet)
{
case User_32.DISP_CHANGE_SUCCESSFUL:
{
return “Success”;
}
case User_32.DISP_CHANGE_RESTART:
{
return “You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.”;
}
default:
{
return “Failed To Change The Resolution”;
}
}
}

}
else
{
return “Failed To Change The Resolution.”;
}
}
private static DEVMODE1 GetDevMode1()
{
DEVMODE1 dm = new DEVMODE1();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
return dm;
}
}
}
“@
Add-Type $pinvokeCode -ErrorAction SilentlyContinue
[Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height)
}

2160-1440.ps1を開き、コピーしたスクリプトを貼り付ける。

最後の行に以下の一文を追加する。

Set-ScreenResolution -Width 2160 -Height 1440

追加したら、ファイルを上書き保存して閉じる。

次に、2160-1440.ps1と同じフォルダに2160-1440.batを作成する。

2160-1440.batを右クリック → 編集で開き、以下一文を追加する。

powershell -NoProfile -ExecutionPolicy Unrestricted .\2160-1440.ps1

追加したら、ファイルを上書き保存して閉じる。

これで準備は完了だ。

使い方

作成した

2160-1440.bat

を実行すれば設定した解像度に変更できる。

複数解像度を切り替える場合は、上記手順に沿って好みの解像度を.ps1&.batセットで用意すればよい。

最後に

今回使用したPowerShellは強力なツールだが、一歩間違えると予想外の挙動をすることもある。

使用においては自己責任で実施してほしい。

モバイルバージョンを終了