Ozi Member replied

743 weeks ago

Po kilku godzinach szperania w necie udalo mi sie stworzyc bardzo fajny kod do AutoHotKey'a (instalka do sciagniecia pod tym adresem. Dzieki temu kodowi mozna odpalic FFXIV w windowed mode pozbywszy sie windowsowskiej belki; dodatkowo przed uruchomieniem gry zmienia sie rozdzielczosc pulpitu - swietna sprawa dla kogos kto jak ja uruchamia gre w mniejszej rozdzielczosci niz ma ustawiona dla pulpitu.

Kod edytujemy pod zwyklym edytorem tekstu pamietac trzeba jedynie "zeby po zakonczeniu edycji zapisac plik z rozszerzeniem *.ahk". Tak przerobiony plik zapisujemy na pulpicie i stamtad odpalamy. W moim przypadku caly kod wyglada tak:

EncodeInteger( p_value, p_size, p_address, p_offset )
{
   loop, %p_size%
      DllCall( "RtlFillMemory"
         , "uint", p_address+p_offset+A_Index-1
         , "uint", 1
         , "uchar", ( p_value >> ( 8*( A_Index-1 ) ) ) & 0xFF )
}

struct_devicemode_size = 156
VarSetCapacity( device_mode, 156, 0 )

EncodeInteger( struct_devicemode_size, 2, &device_mode, 36 )

success := DllCall( "EnumDisplaySettings", "uint", 0, "uint", -1, "uint", &device_mode )

; DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY
EncodeInteger( 0x00040000|0x00080000|0x00100000|0x00400000, 4, &device_mode, 40 )

EncodeInteger( 32, 4, &device_mode, 104 )                              ; quality (i.e., color depth)
EncodeInteger( 1366, 4, &device_mode, 108 )                              ; width
EncodeInteger( 768, 4, &device_mode, 112 )                              ; height
EncodeInteger( 60, 4, &device_mode, 120 )                              ; frequency (i.e., refresh rate)

DllCall( "ChangeDisplaySettings", "uint", &device_mode, "uint", 0 )

Run, ffxivboot.exe, E:\Games W7\FFXIV\SquareEnix\FINAL FANTASY XIV
WinWait, FINAL FANTASY XIV Login ver
SetTitleMatchMode, 3
WinWait, FINAL FANTASY XIV
WinSet, Style, -0xC00000, FINAL FANTASY XIV
WinMove, FINAL FANTASY XIV, , 0, 0, 1366, 768
ExitApp

Ponizej kod z moim opisem zmiennych. :) Pierwsza czesc - zmiana rozdzielczosci:

EncodeInteger( p_value, p_size, p_address, p_offset )
{
   loop, %p_size%
      DllCall( "RtlFillMemory"
         , "uint", p_address+p_offset+A_Index-1
         , "uint", 1
         , "uchar", ( p_value >> ( 8*( A_Index-1 ) ) ) & 0xFF )
}

struct_devicemode_size = 156
VarSetCapacity( device_mode, 156, 0 )

EncodeInteger( struct_devicemode_size, 2, &device_mode, 36 )

success := DllCall( "EnumDisplaySettings", "uint", 0, "uint", -1, "uint", &device_mode )

; DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY
EncodeInteger( 0x00040000|0x00080000|0x00100000|0x00400000, 4, &device_mode, 40 )

EncodeInteger( 32, 4, &device_mode, 104 )                              ; quality (i.e., color depth)
EncodeInteger( 1366 - pierwszy parametr rozdzielczosci!, 4, &device_mode, 108 )                              ; width
EncodeInteger( 768 - drugi parametr rozdzielczosci! 4, &device_mode, 112 )                              ; height
EncodeInteger( 60, 4, &device_mode, 120 )                              ; frequency (i.e., refresh rate)

DllCall( "ChangeDisplaySettings", "uint", &device_mode, "uint", 0 )

Druga czesc - uruchamianie gry + usuwanie belki

Run, ffxivboot.exe, E:\Games W7\FFXIV\SquareEnix\FINAL FANTASY XIV - tu musicie wklepac dokladna sciezke do pliku ffxivboot.exe, plik znajduje sie w katalogu w ktorym zainstalowaliscie gre na swoim komputerze!
WinWait, FINAL FANTASY XIV Login ver
SetTitleMatchMode, 3
WinWait, FINAL FANTASY XIV
WinSet, Style, -0xC00000, FINAL FANTASY XIV
WinMove, FINAL FANTASY XIV, , 0, 0, 1366, 768 - tutaj podajecie rozdzielczosc w jakiej uruchamiacie gre - dodatkowo grzebiac w tych parametrach mozna odpalic gre na drugim monitorze, przydatna rzecz jesli ktos korzysta z dwoch monitorow. :)!
ExitApp


last edited 743 weeks ago by Ozi
RRRRRRoooooarrrr!

Zet Admin replied

743 weeks ago

Fajne, dzieki :)
Please log in to post a reply.