2010/02/27(土)画面の解像度を変える
chgdisp は終了すると戻っちゃうので、というわけでサクっと作った。
僕のマシンには、PATHの通った場所にいくつか簡単なアプリを置いてます。
- 1920.exe 画面解像度を 1920x1080 に変更して終了するだけのアプリ
- 1280.exe 画面解像度を 1280x1024 に変更して終了するだけのアプリ
- 1024.exe 画面解像度を 1024x768 に変更して終了するだけのアプリ
- 800.exe 画面解像度を 800x600 に変更して終了するだけのアプリ
- 640.exe 画面解像度を 640x480 に変更して終了するだけのアプリ
これを、Win+R のファイル名を指定して実行 から呼び出すわけです。
地味に便利です(特に遠隔地からVNCしてるとき)。
しかし、API呼ぶだけのアプリとかCのがラクすぎるだろ……と思った(今はCから移植した)。
モジュールは好きに使ってください
フツーに誰か作ってそうだなこれ。
#module #uselib "user32.dll" #func ChangeDisplaySettingsEx "ChangeDisplaySettingsExA" int, int, int, int, int // ディスプレイモードの変更を試みる // w = 幅 => -1:全リセット 0:このパラメータを無視 // h = 高さ // bpp = ビット数 => 0:このパラメータを無視 // rhz = リフレッシュレート => 0:このパラメータを無視 // flags = フラグ => 1:レジストリも変更 2:テストのみ // 戻り値 = 0:成功 1:再起動が必要 それ以外:失敗 #deffunc TryChangeDisplayMode int w, int h, int bpp, int rhz, int flags, local devmode // レジストリ値でリセット if w == -1 : ChangeDisplaySettingsEx 0, 0, 0, 0, 0 : return stat // DEVMODE 構造体の準備 dim devmode, 39 : devmode.9 = 156 /* = sizeof(DEVMODE) */ devmode.26 = bpp /* dmBitsPerPel */ devmode.27 = w /* dmPelsWidth */ devmode.28 = h /* dmPelsHeight */ devmode.30 = rhz /* dmPelsHeight */ if w : devmode.10 |= 0x0018000 /* LDM_PELSWIDTH | DM_PELSHEIGHT */ if rhz : devmode.10 |= 0x00400000 /* DM_DISPLAYFREQUENCY */ if bpp : devmode.10 |= 0x0004000 /* DM_BITSPERPEL */ // CDS_TEST 付きで変更できるかテスト ChangeDisplaySettingsEx 0, varptr(devmode), 0, 2 /* CDS_TEST */, 0 if stat ! 0 : return stat // 無理 // 実際に変更 ChangeDisplaySettingsEx 0, varptr(devmode), 0, flags, 0 return stat // chgdispの代替。 updateRegistry に 1を指定するとレジストリにも保存 #deffunc chgdisp2 int mode, int w, int h, int updateRegistry switch mode case 0: TryChangeDisplayMode -1 : if stat = 0 : return 0 return 2 case 1: TryChangeDisplayMode w, h, 8, 0, updateRegistry : if stat = 0 : return 0 TryChangeDisplayMode w, h, 0, 0, updateRegistry : if stat = 0 : return 1 return 2 case 2: TryChangeDisplayMode w, h, 32, 0, updateRegistry : if stat = 0 : return 0 TryChangeDisplayMode w, h, 24, 0, updateRegistry : if stat = 0 : return 0 TryChangeDisplayMode w, h, 16, 0, updateRegistry : if stat = 0 : return 0 TryChangeDisplayMode w, h, 0, 0, updateRegistry : if stat = 0 : return 1 return 2 swend return 2 #global chgdisp2 2, 1024, 768, 1 end