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.