Script Bash & Batch - Разрешение в реестре Wine и Windows для некоторых игр

Ну на этот раз, я не знаю, как сделать в Bash и Batch скриптах

1 - определить текущее разрешение

2 - Запишите в ключе реестра эту резолюцию

3 - Я не знаю всех разрешений в "dword", кто-то может помочь мне со всеми разрешениями любого экрана, 2:1, 4:3, 5:4, 11:6, 15:9, 16:9, 16:10, 25:16, 60:29, 72:35, любые

Окей, например, с Wine под "No Windows SO", в скрипте "Bash". его более практичное использование примерно так ->

A - Получить текущее разрешение под Linux для примера ->

echo `xrandr --current | grep current | awk '{print $8}'` >> Resolution1
echo `xrandr --current | grep current | awk '{print $10}'` >> Resolution2
cat Resolution2 | sed -i 's/,//g' Resolution2
P1Resolution=$(cat Resolution1)
P2Resolution=$(cat Resolution2)
rm Resolution1 Resolution2
echo "$P1Resolution"'x'"$P2Resolution" >> Resolution
Resolution=$(cat Resolution)
rm Resolution

B - Написать файл реестра, например, для "Warcraft 3" или "Ragnarok Classic International"

Warcraft 3:->

if      [ $Resolution = "640x480" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Video]" >> video.reg
echo '"resHEIGHT"=dword:000001e0' >> video.reg
echo '"resWIDTH"=dword:00000280' >> video.reg

# Add ResolutionRate
echo '"ResolutionRatehrate"=dword:00000046' >> video.reg
regedit -s video.reg

    elif    [ $Resolution = "800x600" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Video]" >> video.reg
echo '"resHEIGHT"=dword:00000258' >> video.reg
echo '"resWIDTH"=dword:00000320' >> video.reg

# Add ResolutionRate
echo '"ResolutionRatehrate"=dword:00000046' >> video.reg
regedit -s video.reg

    elif    [ $Resolution = "1024x768" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Video]" >> video.reg
echo '"resHEIGHT"=dword:00000300' >> video.reg
echo '"resWIDTH"=dword:00000400' >> video.reg

# Add ResolutionRate
echo '"ResolutionRatehrate"=dword:00000046' >> video.reg
regedit -s video.reg
rm -rf video.reg
else
    echo "Unknow Resolution"
fi

Что ж, теперь с Ragnarok International:->

if          [ $Resolution = "640x480" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Gravity Soft\Ragnarok]" >> video.reg
echo '"HEIGHT="=dword:000001e0' >> video.reg
echo '"WIDTH"=dword:00000280' >> video.reg
regedit -s video.reg

    elif    [ $Resolution = "800x600" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Gravity Soft\Ragnarok]" >> video.reg
echo '"HEIGHT"=dword:00000258' >> video.reg
echo '"WIDTH"=dword:00000320' >> video.reg
regedit -s video.reg

    elif    [ $Resolution = "1024x768" ]; then
echo "REGEDIT4" >> video.reg
echo "" >> video.reg
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Gravity Soft\Ragnarok]" >> video.reg
echo '"HEIGHT"=dword:00000300' >> video.reg
echo '"WIDTH"=dword:00000400' >> video.reg
regedit -s video.reg
rm -rf video.reg

else
    echo "Unknow Resolution"
fi

Ладно, это нормально работает в Bash, теперь в Batch, откуда я могу получить "Текущее разрешение" под родной "Windows"???

Часть Batch Script, это что-то вроде:

Warcraft 3 :->

@echo off

color A
title Automatic Resolution Setup

set key1=HKEY_CURRENT_USER\Software\Blizzard Entertainment\
set key2=HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III
set key3=HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Video

reg delete "%key1%" /f
reg add "%key1%" /f
reg add "%key2%" /f
reg add "%key3%" /f
reg add "%key3%" /t REG_DWORD /v reswidth /d %CURRENT_WIDTH% /f
reg add "%key3%" /t REG_DWORD /v reshieght /d %CURRENT_HEIGHT% /f

Рагнарок Интернешнл:->

@echo off
color A
title Automatic Resolution Setup
set key=HKEY_LOCAL_MACHINE\SOFTWARE\Gravity Soft\Ragnarok
reg delete "%key%" /f
reg add "%key% /f
reg add "%key%" /t REG_DWORD /v WIDTH /d %CURRENT_WIDTH% /f
reg add "%key%" /t REG_DWORD /v HEIGHT /d %CURRENT_HEIGHT% /f

Мне нужно знать, каковы все возможные решения, я просто знаю, что следует ->

#640x480  -> "(res)WIDTH"=dword:00000280 "(res)HEIGHT"=dword:000001e0
#800x600  -> "(res)WIDTH"=dword:00000320 "(res)HEIGHT"=dword:00000258
#1024x768 -> "(res)WIDTH"=dword:00000400 "(res)HEIGHT"=dword:00000300
#1280×768 –> "(res)WIDTH"=dword:00000500 "(res)HEIGHT"=dword:00000300 
#1280×800 –> "(res)WIDTH"=dword:00000500 "(res)HEIGHT"=dword:00000320 
#1360×768 –> "(res)WIDTH"=dword:00000550 "(res)HEIGHT"=dword:00000300 
#1440×900 –> "(res)WIDTH"=dword:000005A0 "(res)HEIGHT"=dword:00000384

Ну, как я могу получить значения для "высоты" и "ширины" под окнами natives, используя "пакетный скрипт" для определения текущего разрешения???

Кто-то может помочь мне с моими сценариями плз???

2 ответа

Под Cygwin (или, возможно, в некоторых более легких условиях) это даст вам ваше разрешение:

#!/bin/bash

ScreenWidth=$(wmic desktopmonitor get screenwidth | grep -o '[[:digit:]]\+')
ScreenHeight=$(wmic desktopmonitor get screenheight | grep -o '[[:digit:]]\+')
Resolution="${ScreenWidth}x${ScreenHeight}"

...

Кредиты Эндоро за предложение команды wmic,

Ниже будут определены переменные среды ScreenHeight а также ScreenWidth

@echo off
setlocal
for /f "delims=" %%A in (
  'wmic desktopmonitor get ScreenHeight^,ScreenWidth /value'
) do for /f "delims=" %%B in ("%%A") do set %%B

Дополнительный цикл FOR /F предназначен для устранения <Carriage Return> артефакты, которые FOR /F вводит, когда обрабатывает Unicode-вывод WMIC.

Другие вопросы по тегам