Bonjour,
j'ai fait quelques recherches mais je ne trouve pas mon bonheur.
Je travail avec un surface 4 et un écran avec un Microsoft Wireless Display Adapter donc.
J'ai donc une surface deux écrans un tactile l'autre 24" standard, sans clavier ni souris.
J'ai un problème car je dois impérativement travailler en mode étendu pas de mode clone.
Il met impossible d'envoyer la fenêtre active sur le second écran, en effet je n'ai que l'écran tactile et il est impossible d'envoyer la fenêtre active sur le second écran.
J'ai cherche à faire l'envoi sur le second écran avec les raccourcis Windows, MAIS le clavier tactile de la surface ne propose pas la touche Windows, donc impossible de faire un Win+Shift+Fleche droite.
Une possibilité existe en utilisant le clavier visuel , mais il n'est vraiment pas pratique.
Voilà pour la mise en situation, mon besoin donc, pouvoir envoyer la fenêtre active sur le second écran et surtout le faire revenir. Simulé les touches raccourcis avec la fonction "Send" ne semble pas autorisé par auto IT.
Quelqu'un aurez-t'il une idée?
Merci de votre aide.
déplacement fenêtre en mode etendu (2 écrans)
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- orax
- Modérateur

- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: déplacement fenêtre en mode etendu (2 écrans)
Eh... si ça marche avec Send (testé sur Windows 8).
Code : Tout sélectionner
Send("#+{RIGHT}")De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: déplacement fenêtre en mode etendu (2 écrans)
En effet, mais j'ai du exécuter le script via un raccourci, car sinon ma fenêtre ne se transfert pas sur le second écran n'étant pas active!
tu as une autre méthode? peu-t’on connaitre la dernière fenêtre d'active avec autoit?
Merci Encore!
tu as une autre méthode? peu-t’on connaitre la dernière fenêtre d'active avec autoit?
Merci Encore!
- TomAijerrie
- Niveau 5

- Messages : 192
- Enregistré le : lun. 02 juin 2014 09:55
- Localisation : Lyon
- Status : Hors ligne
Re: déplacement fenêtre en mode etendu (2 écrans)
winmove si tu connais le nom de la fenêtre
- ZDS
- Membre émérite

- Messages : 554
- Enregistré le : jeu. 10 juin 2010 10:35
- Localisation : 22300 Cul-d'chouette Langue-de-vache
- Status : Hors ligne
Re: déplacement fenêtre en mode etendu (2 écrans)
Bonjour Microtec,
Voici une alternative au Send, utilisant WinMove et une fonction récupérant les différents écrans et leurs positions/résolutions. Elle semble plutôt compliquée, mais en suivant les commentaires tu vas comprendre ce qu'elle fait très facilement.Dis moi ce que tu en penses et surtout si ça marche, à bientôt !
Voici une alternative au Send, utilisant WinMove et une fonction récupérant les différents écrans et leurs positions/résolutions. Elle semble plutôt compliquée, mais en suivant les commentaires tu vas comprendre ce qu'elle fait très facilement.
Code : Tout sélectionner
; Récupération des différentes résolutions (dans le cas d'un multiscreen par exemple)
Func getResolutions()
Local $resultat[1][6] = [[0, "", 1, 1, "-", "Macros"]], $i = 0, $dll = DllOpen("user32.dll")
If $dll <> -1 Then
While 1
Local $struct = DllStructCreate("dword cb;char DeviceName[32];char DeviceString[128];dword StateFlags;char DeviceID[128];char DeviceKey[128]")
DllStructSetData($struct, "cb", DllStructGetSize($struct))
Local $retour = DllCall($dll, "int", "EnumDisplayDevices", "ptr", 0, "dword", $i, "ptr", DllStructGetPtr($struct), "dword", 0)
If Not $retour[0] Then ExitLoop
If Not BitAND(DllStructGetData($struct, "StateFlags"), 0x00000008) Then
Local $device = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
"ushort dmDriverExtra;dword dmFields;long x;long y;dword dmDisplayOrientation;dword dmDisplayFixedOutput;" & _
"short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
"byte dmFormName[32];ushort LogPixels;dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
"dword dmDisplayFlags;dword dmDisplayFrequency")
DllStructSetData($device, "dmSize", DllStructGetSize($device))
$retour = DllCall($dll, "int", "EnumDisplaySettings", "str", DllStructGetData($struct, "DeviceName"), "dword", -1, "ptr", DllStructGetPtr($device))
If $retour[0] And DllStructGetData($device, "dmPelsWidth") > 0 And DllStructGetData($device, "dmPelsHeight") > 0 Then
$resultat[0][0] = $resultat[0][0] + 1
ReDim $resultat[$resultat[0][0]+1][6]
$resultat[$resultat[0][0]][0] = DllStructGetData($device, "x")
$resultat[$resultat[0][0]][1] = DllStructGetData($device, "y")
$resultat[$resultat[0][0]][2] = DllStructGetData($device, "dmPelsWidth")
$resultat[$resultat[0][0]][3] = DllStructGetData($device, "dmPelsHeight")
$resultat[$resultat[0][0]][4] = $i
$resultat[$resultat[0][0]][5] = DllStructGetData($struct, "DeviceName")
If $resultat[$resultat[0][0]][0] = 0 And $resultat[$resultat[0][0]][1] = 0 Then
$resultat[0][2] = $resultat[$resultat[0][0]][2]/@DesktopWidth
$resultat[0][3] = $resultat[$resultat[0][0]][3]/@DesktopHeight
EndIf
EndIf
EndIf
$i += 1
WEnd
DllClose($dll)
EndIf
Return $resultat
EndFunc
; Déplacement d'une fenêtre d'un écran vers l'écran suivant
Func WinMoveToNextScreen($title="", $texte="")
; Récupération du handle la fenêtre
Local $handle = WinGetHandle($title, $texte)
If @error Then Return SetError(1)
; Vérif des résolutions
Local $res = getResolutions()
If Not IsArray($res) Or $res[0][0] < 2 Then Return SetError(2)
Local $screen = 0, $pos = WinGetPos($handle), $point[2] = [$pos[0]+$pos[2]/2, $pos[1]+$pos[3]/2]
; Trouver l'écran sur lequel est la fenêtre (on pointe le milieu)
For $i = 1 To $res[0][0]
If $res[$i][0] <= $point[0] And $point[0] <= $res[$i][0] + $res[$i][2] And $res[$i][1] <= $point[1] And $point[1] <= $res[$i][1] + $res[$i][3] Then
$screen = $i
ExitLoop
EndIf
Next
If $screen = 0 Then Return SetError(3)
; Calcul des ratios de la position/taille de la fenêtre par rapport à l'écran
Local $factors[4] = [($pos[0]-$res[$screen][0])/$res[$screen][2], ($pos[1]-$res[$screen][1])/$res[$screen][3], $pos[2]/$res[$screen][2], $pos[3]/$res[$screen][3]]
$nextscreen = $screen+1
If $nextscreen > $res[0][0] Then $nextscreen = 1
; Déplacement sur le nouvel écran en conservant les ratios
Local $move = WinMove($handle, "", $res[$nextscreen][2]*$factors[0]+$res[$nextscreen][0], $res[$nextscreen][3]*$factors[1]+$res[$nextscreen][1], $res[$nextscreen][2]*$factors[2], $res[$nextscreen][3]*$factors[3])
If $move = 0 Then Return SetError(4)
EndFunc
WinMoveToNextScreen("[ACTIVE]")ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !

