Delimiter une zone de recherche

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Delimiter une zone de recherche

#1

Message par YuChan »

Bonjour,

J'ai actuellement ce code :

Code : Tout sélectionner

Global $g_idX = 1024, $g_idY = 768

$posX = MouseGetPos(0) 
$posY = MouseGetPos(1)
	
$GuiMouse = GUICreate("test")
GUICtrlSetData($g_idX, $posX)
GUICtrlSetData($g_idY, $posY)
	
MsgBox(0, "", $posX & ":" & $posY)
J'ai trouvé plusieurs script que j'essaie d'adapter mais je n'y arrive pas.

En faite j'ai une fenêtre de notepad et je souhaite rechercher ou se trouve la position de la souris dedans.
Ma zone de recherche doit etre de 1024*768

Sauf que je n'y arrive pas au résultat souhaité. Sa recherche la position de la souris sur tout mon écran et non pas que dans le bloc note avec une zone de 1024*768.

Merci si possible d’apporter votre aide en espérant que j'ai été assez claire
rgx
Niveau 4
Niveau 4
Messages : 61
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

Re: Delimiter une zone de recherche

#2

Message par rgx »

Bonjour,

Dans l'aide sur la fonction MouseGetPos, il suffit de suivre le lien vers MouseCoordMode... Tout est indiqué:

"Détermine la manière d'utiliser les coordonnées dans les fonctions de souris, soit coordonnées absolues, soit coordonnées relatives à la fenêtre active courante:..."

Cela dit, cela retournera la position en pixels, ce qui n'est pas très utile pour le Notepad qui est un outil texte.

:wink:
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Delimiter une zone de recherche

#3

Message par YuChan »

OK merci, je me sers déjà de cette fonction. Et malheureusement il n'y a pas de doc dessus sauf cette exemple.

Pour mon code le voici, je l'ai trouvé sur Google :

Code : Tout sélectionner

Opt("MouseCoordMode", 1)
Global $LargeurForm = 1024
Global $HauteurForm = 768
Global $NomDuForm = "Notepad"
Global $GUI = GUICreate($NomDuForm, 0, 0, 1024, 768)
WinSetTrans( $GUI, '', 0 )
GUISetState( @SW_SHOW )
Et dans le while :

Code : Tout sélectionner

If WinActive($NomDuForm) Then
        $MousePos = MouseGetPos()

        If $MousePos[0] < 0 Then $MousePos[0] = 0
        If $MousePos[0] > $LargeurForm Then $MousePos[0] = $LargeurForm
        If $MousePos[1] < 20 Then $MousePos[1] = 20
        If $MousePos[1] > $HauteurForm Then $MousePos[1] = $HauteurForm
        MouseMove($MousePos[0], $MousePos[1], 1)
    EndIf
Mais malheureusement encore les dimensions sont pas bonne sa respect pas bien la bordure des fenêtre je sais pas pourquoi.

Merci si tu peux m'aider.
rgx
Niveau 4
Niveau 4
Messages : 61
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

Re: Delimiter une zone de recherche

#4

Message par rgx »

...je me sers déjà de cette fonction. Et malheureusement il n'y a pas de doc dessus...
https://www.autoitscript.fr/autoit3/doc ... eCoordMode
Détermine la manière d'utiliser les coordonnées dans les fonctions de souris, soit coordonnées absolues, soit coordonnées relatives à la fenêtre active courante:
0 = Coordonnées relatives à la fenêtre active
1 = (défaut) Coordonnées absolues d'écran
2 = Coordonnées relatives à la zone client de la fenêtre active
AutoIt est remarquablement bien documenté et traduit, c'est le premier endroit où chercher avant d'utiliser Google
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Delimiter une zone de recherche

#5

Message par YuChan »

Oui, cette partie de doc je l'ai vue.

Si j'ai répondu que je n'ai rien trouvé c'est que je vois pas le rapport avec les limites de la souris et pas de doc dessus.

Merci si tu peux m'aider
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Delimiter une zone de recherche

#6

Message par walkson »

Bonjour,
Au lieu de répondre à l'emporte pièce, faites fonctionner vos neurones :evil:
Nous sommes au summum de l'absurdité :evil:
Global $g_idX = 1024, $g_idY = 768

$posX = MouseGetPos(0)
$posY = MouseGetPos(1)
   
$GuiMouse = GUICreate("test")
GUICtrlSetData($g_idX, $posX)
GUICtrlSetData($g_idY, $posY)
Donc pour vous $g_idX est l'ID d'un contrôle !?!

Global $GUI = GUICreate($NomDuForm, 0, 0, 1024, 768)
C'est bien de créer une gui de dimension = 0 qui se situe en dehors de l'écran !!!
Pour quelqu'un qui prétend avoir écrit 2000 lignes de code, on peut être étonné du nombre d'erreurs en si peu de lignes :evil:
Pour contre, vous êtes incapable de comprendre ce que vous dit RGX :evil:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Delimiter une zone de recherche

#7

Message par YuChan »

Merci d'avoir repondu.

Oui il y a trop d'erreur.

Le code complet c'est sa :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

Global $g_idX = 0, $g_idY = 0

Example()

Func Example()
    HotKeySet("{ESC}", "GetPos")

    GUICreate("Press Esc to Get Pos", 400, 400)
    $g_idX = GUICtrlCreateLabel("0", 10, 10, 50)
    $g_idY = GUICtrlCreateLabel("0", 10, 30, 50)
    GUISetState(@SW_SHOW)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd

    GUIDelete()
EndFunc   ;==>Example

Func GetPos()
    Local $a = GUIGetCursorInfo()
    GUICtrlSetData($g_idX, $a[0])
    GUICtrlSetData($g_idY, $a[1])
EndFunc   ;==>GetPos

Mais moi c'est notepad qui est lancé, du coup je sais pas faire.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Delimiter une zone de recherche

#8

Message par walkson »

Lancez le code sans toucher la souris

Code : Tout sélectionner

Opt("MouseCoordMode",2)   
	Run("notepad.exe")

    ; Attend 10 secondes pour que la fenêtre du bloc-notes apparaisse.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 5)

    ; Récupére la zone client de la fenêtre du Bloc-notes en utilisant le handle retourné par WinWait.
    Local $aClientSize = WinGetClientSize($hWnd)
	Local $pos = WinGetPos($hWnd,"")

    ; Affiche la hauteur et la largeur de la zone client.
	MouseMove($aClientSize[0],$aClientSize[1])
	Sleep(500)
	ControlSend($hWnd,"","Edit1","Width: " & $aClientSize[0] & @CRLF & "Height: " & $aClientSize[1])
	ToolTip("la souris est ici",$pos[0] + $pos[2],$pos[1] + $pos[3],"INFO",2)
    MsgBox(64, "", "Regardez en bas à droite de Notepad")

    ; Ferme la fenêtre du Bloc-notes en utilisant le handle retourné par WinWait.
    WinClose($hWnd)
    WinWaitActive("[CLASS:#32770]");fermer sans enregistrer
    Sleep(300)
    Send("{TAB}{ENTER}")
Première remarque: Opt("MouseCoordMode",2) voir commentaire rgx
Deuxième remarque: ce code est issu de l'aide
Troisième remarque:
Cela dit, cela retournera la position en pixels, ce qui n'est pas très utile pour le Notepad qui est un outil texte.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Delimiter une zone de recherche

#9

Message par YuChan »

Je te remercie c'est ce que je cherchais.

Par contre j'ai un probleme.

J'ai beau sortir la souris hors de la zone, sa me remet pas dans le cadre de notepad.

Merci
Répondre