[R] Capture _IENavigate et zoom à 125%

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

[R] Capture _IENavigate et zoom à 125%

#1

Message par 28IL »

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,
Modifié en dernier par 28IL le ven. 27 nov. 2020 14:19, modifié 2 fois.
Avatar du membre
sylvanie
Modérateur
Modérateur
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: Zoom IE

#2

Message 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%
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Zoom IE

#3

Message par 28IL »

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])
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Zoom IE

#4

Message par walkson »

Bonjour,
Regardez ici https://www.autoitscript.com/forum/topi ... n-ie7-8-9/
Vous pouvez paramétrer le zoom
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Zoom IE

#5

Message par 28IL »

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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 911
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#6

Message par walkson »

et avec _ScreenCapture_CaptureWnd() ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6090
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#7

Message 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  & " %" )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#8

Message par 28IL »

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.
Modifié en dernier par 28IL le mer. 25 nov. 2020 08:53, modifié 1 fois.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6090
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#9

Message 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(...)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%  

#10

Message par 28IL »

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]
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6090
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#11

Message 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: )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#12

Message par 28IL »

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
28IL
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mar. 30 mai 2017 09:22
Localisation : Dreux
Status : Hors ligne

Re: Capture _IENavigate et zoom à 125%

#13

Message par 28IL »

Un grand merci à tout le monde mais surtout à mikell. Tout fonctionne ce matin.
Bon week end et à bientôt.
Répondre