Page 1 sur 1
[Ex] Fullscreen Borderless
Posté : lun. 29 déc. 2014 23:38
par TommyDDR
Ce script sert à supprimer les bordures d'une fenêtre et déplacer la fenêtre pour qu'elle remplisse l'écran où elle est située (l'écran correspondant à la position du pixel en haut à gauche de la fenêtre).
Très utile pour les jeux lorsque vous ne voulez pas jouer en "Fullscreen réel".
Utilisation : Tout se fait avec la touche "²" (sous échap), lors de l'appuie sur la touche, le style de la fenêtre active est analysé pour déterminer si celle-ci à une bordure ou pas pour lui appliquer le style inverse.
Comme un script vaut plus que des mots :
► Afficher le textecode
Code : Tout sélectionner
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WinAPIConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
Global $etat = 0
Global $hwnd = 0
Global $oldPos[5]
Global $banClasses[2] = ["Progman", "Shell_TrayWnd"]
OnAutoItExitRegister("_exit_fullscreen")
HotKeySet("²", "ToogleWin")
While(True)
Sleep(500)
WEnd
Func ToogleWin()
HotKeySet("²")
Local $hwndTemp = WinGetHandle("[ACTIVE]")
If($hwndTemp > 0 And _Array_Search($banClasses, _WinAPI_GetClassName($hwndTemp)) < 0) Then
If($hwndTemp <> $hwnd) Then
FullScreen($hwnd, False)
$hwnd = $hwndTemp
EndIf
FullScreen($hwnd)
EndIf
HotKeySet("²", "ToogleWin")
EndFunc
Func FullScreen($gui, $fullScreen = Null) ; Null = toogle
If(WinExists($gui)) Then
Local $dwStyle = _WinAPI_GetWindowLong($gui, $GWL_STYLE)
Local $wPlacement = WinGetPos($gui)
If(BitAND($dwStyle, $WS_OVERLAPPEDWINDOW) = $WS_OVERLAPPEDWINDOW And $fullScreen <> False) Then
$oldPos[0] = $wPlacement[0]
$oldPos[1] = $wPlacement[1]
$oldPos[2] = $wPlacement[2]
$oldPos[3] = $wPlacement[3]
$oldPos[4] = $gui
Local $tPos = DllStructCreate($tagPOINT)
DllStructSetData($tPos, "X", $wPlacement[0])
DllStructSetData($tPos, "Y", $wPlacement[1])
Local $mi = _WinAPI_GetMonitorInfo(_WinAPI_MonitorFromPoint($tPos))
_WinAPI_SetWindowLong($gui, $GWL_STYLE, $dwStyle-$WS_OVERLAPPEDWINDOW)
WinMove($gui, "", DllStructGetData($mi[0], "left"), _
DllStructGetData($mi[0], "top"), _
DllStructGetData($mi[0], "right")-DllStructGetData($mi[0], "left"), _
DllStructGetData($mi[0], "bottom")-DllStructGetData($mi[0], "top"))
ElseIf(BitAND($dwStyle, $WS_OVERLAPPEDWINDOW) = 0 And $fullScreen <> True) Then
If($oldPos[4] = $gui) Then
$wPlacement = $oldPos
EndIf
WinMove($gui, "", $wPlacement[0], $wPlacement[1], $wPlacement[2], $wPlacement[3])
_WinAPI_SetWindowLong($gui, $GWL_STYLE, BitOR($dwStyle, $WS_OVERLAPPEDWINDOW))
EndIf
EndIf
EndFunc
Func _Array_Search($array, $search)
Local $retour = -1
For $i = 0 To UBound($array, 1)-1
If($array[$i] = $search) Then
$retour = $i
ExitLoop
EndIf
Next
Return $retour
EndFunc
Func _exit_fullscreen()
FullScreen($hwnd, False)
EndFunc
/!\ à ceux qui auraient des problèmes de rafraichissement, inverser les lignes 59 et 60. /!\
Re: [Ex] Fullscreen Borderless
Posté : mar. 30 déc. 2014 08:09
par jguinch
Je trouve l'idée intéressante
Par contre, j'ai des problèmes d'affichage quand je veux revenir en mode "normal" : ça ne se rafraichit pas comme il faut.
En inversant les 2 lignes WinMove et _WinAPI_SetWindowLong (en bas donc), le problème semble disparaître.
Merci pour le partage !
Re: [Ex] Fullscreen Borderless
Posté : mar. 30 déc. 2014 08:44
par Y01
Super code !
Merci pour le partage
PS : Même problème que jguinch et même solution
PS2 : Attention à l'état de la fenêtre lorsqu'on ferme le script au risque d'avoir une surprise !
Re: [Ex] Fullscreen Borderless
Posté : mar. 30 déc. 2014 16:19
par TommyDDR
C'est marrant ça, moi j'ai justement un problème quand les 2 lignes sont inversées.
Modifications :
- Suppression du fullscreen quand on quitte (proprement) le script
- Le script n'agit pas si le bureau ou la barre des tâches est sélectionné
- Code épuré
Re: [Ex] Fullscreen Borderless
Posté : mar. 30 déc. 2014 16:30
par jguinch
Pour info, j'ai testé sur Windows 7 x64 (script exécuté en x86).
Re: [Ex] Fullscreen Borderless
Posté : mar. 30 déc. 2014 16:32
par Y01
Nickel la màj
