Page 1 sur 1

[R] Capture _IENavigate et zoom à 125%  

Posté : mar. 24 nov. 2020 11:27
par Utilisateur 6342 supprimé
Bonjour la communauté,

Je viens de terminer un développement ou je fais une capture toute simple d'une fenêtre IE :

Code : Tout sélectionner

_IENavigate ($oIE, "http://xxxxxxxx#")
$o_form = _IEFormGetObjByName ($oIE, "loginform")
$o_login = _IEFormElementGetObjByName ($o_form, "_username")
$o_password = _IEFormElementGetObjByName ($o_form, "_password")
$o_signin = _IEFormElementGetObjByName ($o_form, "submit")

_IEFormElementSetValue ($o_login, $username)
_IEFormElementSetValue ($o_password, $password)
_IEAction ($o_signin, "click")
_IEPropertySet($oIE, "menubar", False)
_IELoadWait($oIE)
$oIE.document.body.scroll = "no"
...
$pos = WinGetPos(ControlGetHandle($Form1_1, "", "Internet Explorer_Server1"))
    _ScreenCapture_Capture($JPGLocal & "\synthese.jpg", $pos[0], $pos[1], $pos[0]+$pos[2], $pos[1]+$pos[3])
Tout est ok pour le moment si un zoom Windows est à 100% dans les paramètres d'affichage.

Hors, si jamais l'utilisateur utilise un zoom supérieur à 100% car problème de vue, forcément cela impact ma fenêtre IE dans mon interface AutoIT donc ma capture est foutue.

Comme puis-je conserver ma fenêtre IE à 100% avec un zoom supérieur à 100% sous Windows svp ?

Merci pour votre aide.

Cdt,

Re: Zoom IE

Posté : mar. 24 nov. 2020 14:23
par sylvanie
Bonjour,
On peut faire un

Code : Tout sélectionner

send("^à")
juste après le _IENavigate.
C'est pas extraordinaire, mais ça permet de redimensionner IE à 100%

Re: Zoom IE

Posté : mar. 24 nov. 2020 14:34
par Utilisateur 6342 supprimé
sylvanie a écrit : mar. 24 nov. 2020 14:23 Bonjour,
On peut faire un

Code : Tout sélectionner

send("^à")
juste après le _IENavigate.
C'est pas extraordinaire, mais ça permet de redimensionner IE à 100%
Merci beaucoup pour l'information Sylvanie, cela a résolu une partie de mon problème mais la capture de ma fenêtre IE est toujours tronquée lorsqu'un zoom est supérieur à 100%.

Code : Tout sélectionner

$pos = WinGetPos(ControlGetHandle($Form1_1, "", "Internet Explorer_Server1"))
    _ScreenCapture_Capture($JPGLocal & "\synthese.jpg", $pos[0], $pos[1], $pos[0]+$pos[2], $pos[1]+$pos[3])

Re: Zoom IE

Posté : mar. 24 nov. 2020 14:49
par walkson
Bonjour,
Regardez ici https://www.autoitscript.com/forum/topi ... n-ie7-8-9/
Vous pouvez paramétrer le zoom

Re: Zoom IE

Posté : mar. 24 nov. 2020 16:02
par Utilisateur 6342 supprimé
walkson a écrit : mar. 24 nov. 2020 14:49 Bonjour,
Regardez ici https://www.autoitscript.com/forum/topi ... n-ie7-8-9/
Vous pouvez paramétrer le zoom
Bonjour et merci walkson. Cependant, je pense que je me fais mal comprendre. C'est pas le zoom dans ma fenêtre _IENavigate qui me pose vraiement souci, c'est plutôt ma capture quand je passe en zoom 125% dans les paramètres d'affichage Windows.

Je pense que c'est plutôt mon code de capture (voir 1er post) que sait pas prendre en compte ce zoom Windows et qui me tronque l'image faite de mon IE.

Re: Capture _IENavigate et zoom à 125%

Posté : mar. 24 nov. 2020 20:25
par walkson
et avec _ScreenCapture_CaptureWnd() ?

Re: Capture _IENavigate et zoom à 125%

Posté : mar. 24 nov. 2020 21:29
par mikell
Pas pu tester donc réponse un peu au pif et non garantie :roll:
Tu devrais pouvoir connaître le % de zoom utilisé avec le code suivant, et ensuite appliquer ce % à la taille de la zone de capture

$objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DisplayConfiguration')
For $objItem In $colItems
  $ppp = $objItem.LogPixels
Next
Msgbox(0,"","Zoom : " & $ppp*100/96  & " %" )

Re: Capture _IENavigate et zoom à 125%

Posté : mer. 25 nov. 2020 08:01
par Utilisateur 6342 supprimé
mikell a écrit : mar. 24 nov. 2020 21:29 Pas pu tester donc réponse un peu au pif et non garantie :roll:
Tu devrais pouvoir connaître le % de zoom utilisé avec le code suivant, et ensuite appliquer ce % à la taille de la zone de capture
Bonjour mikell,

Merci pour ton aide déjà. J'avertie déjà l'utilisateur que son zoom est pas conforme via ce bout de code :

Code : Tout sélectionner

Local Const $DEVICE_PRIMARY = 0, $DEVICE_IMMERSIVE = 1
$aRet = DllCall("Shcore.dll", "int", "GetScaleFactorForDevice", "int", $DEVICE_PRIMARY)

$Label20 = GUICtrlCreateLabel("", 510, 50, 140, 60)
IF $aRet[0] = 100 Then
	GuiCtrlSetData($Label20, "Le zoom appliqué actuellement est à " & $aRet[0] & " %")
ElseIF $aRet[0] > 100 Then
	GuiCtrlSetData($Label20, "Attention zoom supérieur à " & $aRet[0] & " %")
	GUICtrlSetFont(-1, 10, 700, 0, "Arial")
	GUICtrlSetColor($Label20, 0xFF0000)
EndIf
Mon souci semble bien plus complexe car mon interface graphique bouge logiquement en fonction du zoom Windows et donc ma zone de capture de ma fenêtre IE se décale aussi. Et je sais pas comment l'appréhender surtout.

Re: Capture _IENavigate et zoom à 125%

Posté : mer. 25 nov. 2020 08:16
par mikell
Je pensais à peut-être qqe chose comme ça

$pos = WinGetPos(...)
For $i = 0 to 3
  $pos[$i] = $pos[$i]*($zoom/100)
Next
ScreenCapture(...)

Re: Capture _IENavigate et zoom à 125%

Posté : mer. 25 nov. 2020 09:08
par Utilisateur 6342 supprimé
mikell,

Peux tu me dire à quoi sert la boucle FOR et à quoi correspond la variable $zoom stp ?
$pos = WinGetPos(...)
For $i = 0 to 3
  $pos[$i] = $pos[$i]*($zoom/100)
Next
ScreenCapture(...)
[/quote]

Re: Capture _IENavigate et zoom à 125%

Posté : mer. 25 nov. 2020 13:51
par mikell
28IL a écrit : mer. 25 nov. 2020 09:08Peux tu me dire à quoi sert la boucle FOR
C'est juste parce que c'est plus rapide que d'écrire ça :

$pos[0] = $pos[0]*($zoom/100)
$pos[1] = $pos[1]*($zoom/100)
$pos[2] = $pos[2]*($zoom/100)
$pos[3] = $pos[3]*($zoom/100)
28IL a écrit : mer. 25 nov. 2020 09:08et à quoi correspond la variable $zoom
Pourtant ça me semblait explicite :mrgreen:
$zoom est la valeur du zoom en cours (100%, 125% etc)

BTW je ne suis pas sûr que le DllCall("Shcore.dll", "int", "GetScaleFactorForDevice"...) fonctionne sur w7, Microsoft dit que c'est valable pour Windows 8 ou +
En tout cas ça ne marche pas sur XP (si si, il en existe encore :mrgreen: )

Re: Capture _IENavigate et zoom à 125%

Posté : mer. 25 nov. 2020 14:27
par Utilisateur 6342 supprimé
Merci encore mikell
mikell a écrit : mer. 25 nov. 2020 13:51
28IL a écrit : mer. 25 nov. 2020 09:08Peux tu me dire à quoi sert la boucle FOR
C'est juste parce que c'est plus rapide que d'écrire ça :
$pos[0] = $pos[0]*($zoom/100)
$pos[1] = $pos[1]*($zoom/100)
$pos[2] = $pos[2]*($zoom/100)
$pos[3] = $pos[3]*($zoom/100)
28IL a écrit : mer. 25 nov. 2020 09:08et à quoi correspond la variable $zoom
Pourtant ça me semblait explicite :mrgreen:
$zoom est la valeur du zoom en cours (100%, 125% etc)
Oups ok, je comprends effectivement mieux désolé. Je vais utiliser ma variable dans ce cas.
BTW je ne suis pas sûr que le DllCall("Shcore.dll", "int", "GetScaleFactorForDevice"...) fonctionne sur w7, Microsoft dit que c'est valable pour Windows 8 ou +
En tout cas ça ne marche pas sur XP (si si, il en existe encore :mrgreen: )
Pas grave, au boulot on utilise que du Windows 10 :D

Re: Capture _IENavigate et zoom à 125%

Posté : ven. 27 nov. 2020 14:18
par Utilisateur 6342 supprimé
Un grand merci à tout le monde mais surtout à mikell. Tout fonctionne ce matin.
Bon week end et à bientôt.