Déplacement de souris automatiquement

Signaler
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015
-
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015
-
Bonjour,
Je cherche un moyen de déplacer ma souris par reconnaissance vocale.
Je gère déjà un déplacement sur la gauche/droite/haut/bas, mais j'ai mis des petits mouvements comme 20 pixels par action, ce qui est peu, et si j'augmente, le pointeur ne sera pas précis.

Alors j'opte pour une autre option, une grille de souris, comme celui de la reconnaissance vocale de Windows comme ceci : http://puu.sh/inqZg.jpg
Si je dis 1, il recrée la même grille mais dans la place du premier cadre "1" : http://puu.sh/inr64.jpg a l'infini jusqu'à que ça soit plus possible de crére un cadre, ou que je dise "OK", à ce moment même, il se déplace et clique dessus.

Je saurais comment faire le déplacement et le clique, mais pour le cadre je n'ai vraiment aucune idée, je fais donc appel à vous, merci de bien m'aider.

13 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour, une telle démarche risque fort d'aboutir à une petite usine à gaz.
Nul ne t'écrira ton appli, mais on peut te donner des idées.
En voici une :
- diviser ton écran (l'écran, pas la fenêtre de l'appli) en cases (comme des cases de mots croisés). Sans nécessité réelle de dessiner les cases (il suffit de repères sur deux axes).
- donner (verbalement, donc) l'instruction d'atteindre cette case et y placer le curseur en son centre. Instructions, donc, du type oral "B3"
- puis se déplacer de manière plus précise au sein de cette case, par des déplacements beaucoup plus légers, mais alors en nombre très réduit.

Plus ton écran contiendra de repères verticaux (chiffres) et horizontaux (lettres), plus tu approcheras du but à atteindre et moins tu auras de déplacements d' "affinage" terminal.
Bonne chance.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Merci de votre réponse, pour la grille, comment suis-je censé la faire ? Un dessin, sur paint ? Ou j'utilise un datagridview ? J'avoue que je suis perdu !

Comment puis-je lui donner l'instruction si le "dessin" n'est pas intégrer dans l'application, ou alors j'ai très mal compris, et je m'en excuse, bonne soirée.

Edit : J'ai bien fais un début en photoshop en petit carreaux http://puu.sh/inEs1.png mais je vois pas comment l'intégrer ^^
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
C'est sur l'écran (le desktop, de handle 0), qu'il te faut dessiner axes et caractères.

EDIT : rien ne t'empêche non plus, si tu préfères, d'afficher deux formulaires étroits, l'un vertical et l'autre horizontal, aux dimensions de l'écran et d'y dessiner tes axes "gradués") et de les mettre au premier plan (topmost).
Tout cela implique que tu apprennes d'abord à dessiner et à calculer tes graduations (et donc à extraire les dimensions de l'écran).
N'étant pas vb.nettiste, je ne saurais t'aider à le faire, mais ce devrait être extrêmement facile. Ca l'est en tout état de cause sous VB6 (mon langage de développement) et je ne vois pas pourquoi ce serait difficile sous VB.Net.

EDIT 2 : je pense (mais peux me tromper) que tu dois commencer sous VB.Net par étudier ceci :
https://msdn.microsoft.com/fr-fr/library/system.drawing%28v=vs.110%29.aspx

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Voilà j'avais déjà commencé un truc : http://puu.sh/ioipV.png

J'ai donc la fenêtre qui s'affiche si je dis "grille de souris" en premier plan et il prend tout l'écran, c'est une picturebox.

Maintenant le plus dur, il faut que je détermine les rectangles qui définissent les nombres, le rectangle 1 = 1 et ensuite redimensionner l'image dans le rectangle choisis.
Mais je vois pas trop comment faire pour la première ! Il faut rendre l'image "interactif" en quelque sorte.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Mais je vois pas trop comment faire pour la première !

du calcul arithmétique. Et ce calcul ne précède pas, mais suit le dimensionnement.
Il faut rendre l'image "interactif" en quelque sorte.

Pas du tout. Il ne s'agit à ce niveau que de positionner le curseur dans une "case" (celle que tu détermines et que tu donnes l'ordre vocal d'atteindre)
Là encore : calcul arithmétique, avant même de parler de code.
Et ta "grille", telle qu'elle est, ne correspond pas du tout à ce que je t'ai suggéré.
Tu me parais avoir avant tout un problème de clarté de conception.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Le grille, j'essaye de faire comme celle de la première image, car c'est le plus simple, et je n'attend pas du tout la souris, la souris "existe plus", si je dis case 1 même sans la souris, il est censé "ouvrir" la case une. Une fois que j'ai dis "OK", il effectue un mouseMove, mais qu'après.

Ouai j'ai un problème de clarté dans un sujet qui n'est pas mien ^^
Je me lance pourtant au défie, et je te remercie de bien m'aider !

Je vais quand même tenter quelque chose, qui n'a rien avoir mais qui pourrais marcher : Si la souris est sur X,Y position, on choisit le rectangle, exemple si le rectangle 1 je le définie par la position 10,10 et que je dis 1, il va en 10,10 et a ce moment là, il sait que c'est le rectangle un.

Du coup ça contredit tout ce que j'ai dis en haut mais c'est une idée ^^
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

J'ai réussi ! C'était tout simple, je suis bête !

Tout simplement :
Case "1"
If Form3.Enabled = True Then
Form3.PictureBox1.Size = New Size(626, 342)
Form3.Size = New Size(626, 342)
Else
jarvis.SpeakAsync("Désolé, je ne peux pas traiter cette commande sans la grille d'ouverte.")
End If


J'explique, tout d'abord je dis grille, bien sûr je peux dire 1 avant mais il me dira un message d'erreur, donc je dis grille, et je dis 1, qu'est-ce qu'il fait, il se resize dans le rectangle un d'où j'ai pris les mesures. Mais il affichera que le 1, évidement, donc il faut que je recrée une grille de la forum du rectangle 1, ce qui n'est pas difficile, et par la suite un ok finira la demande par un clique. Je pense que c'est une méthode long, et qu'il peut largement avoir plus court, malheureusement, je n'ai pas tout compris, je fais donc comme je peux.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Et me revoilà pour un problème ! :D
Les premières grilles sont gérer, mais pas les deuxièmes, elles s'affichent, mais je peux pas dire "1" sur la deuxième grille, car la fonction est déjà assigné a la première grille qui affiche la deuxième ! (piouf ! Logique de fou !)

Donc j'aimerais savoir comment faire, une sorte de "si 1 déjà dis, on réinitialise tout pour la deuxième, if already say "1" <- je sais pas si c'est possible ! ahah

J'ai fais une vidéo pour expliquer les premières grilles : https://www.youtube.com/watch?v=KAzfHODsvgY

Mon code pour une case par exemple si je dis "1" :
Case "1"

If Form3.Enabled = True And Form3.PictureBox1.Visible = True Then
Form3.PictureBox1.Visible = False
Form3.Size = New Size(640, 360)
Form3.PictureBox2.Visible = True
Form3.Location = New Point(0, 0)

Else
jarvis.SpeakAsync("Désolé, je ne peux pas traiter cette commande sans la grille d'ouverte.")
End If
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Tu te diriges ainsi, lentement mais très sûrement, vers ce qui était à éviter (relire ma toute première phrase de mon message du 13 juin 2015 à 20:36).
Et cela va se compliquer de manière très sensible lorsque l'utilisateur voudra (changement d'avis ou autre) "repasser" au premier stade (celui d'une autre case parmi les cases de départ).
Mais bon ...
Continue donc sur ta lancée...
C'est en forgeant que l'on devient forgeron. C'est également en se cognant aux obstacles que l'on apprend à ne pas en rajouter soi-même.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

 Case "1"

If Form3.Enabled = True And Form3.PictureBox1.Visible = True Then
Form3.PictureBox1.Visible = False
Form3.Size = New Size(640, 360)
Form3.PictureBox2.Visible = True
Form3.Location = New Point(0, 0)
ElseIf Form3.Enabled = True And Form3.PictureBox1.Visible = False And Form3.PictureBox2.Visible = True Then
Form3.PictureBox2.Visible = False
Form3.Size = New Size(213, 120)
Form3.PictureBox3.Visible = True
Form3.Location = New Point(0, 0)
Else
jarvis.SpeakAsync("Désolé, je ne peux pas traiter cette commande sans la grille d'ouverte.")
End If


Avec ceci, je gère les deux grilles que je voulais, bien entendu, c'est pas du tout propre, et je dois faire ça pour les 81 cases présentes, si je fais que deux picturebox, si j'en rajoute une, j'irais vers les 729 cases, c'est trop long et stupide, il faut que je trouve un autre moyen, comme tu disais avec des calculs, mais je sais pas comment faire, je vais chercher !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Cherche.
Pas trop, quand-même, hein ... (faut présever les méninges)...
Reprends tout calmement (d'abord avec un crayon et une feuille de papier). L'informatique n'est là que pour exprimer une raison d'abord établie clairement dans l'esprit.
Amuse-toi bien.
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Avec un ami, je suis arriver à un code possiblement fonctionnel.
 Case "1"

If Form3.Enabled And Form3.PictureBox1.Visible Then
Form3.Location = New Point(0, 0)
Dim Value As Point
Value = New Point(Form3.Location)
Dim Value1 As Point
Value1 = New Point(Form3.Size)
Dim result As Integer
result = Convert.ToInt32(e.Result.Text)
Form3.Location = New Point((Value.X / 3) * result, (Value.Y / 3) * result)
Form3.Size = New Size((Value1.X / 3) * result, (Value1.Y / 3) * result)
Form3.PictureBox1.Size = Form3.Size
Else
jarvis.SpeakAsync("Désolé, je ne peux pas traiter cette commande sans la grille d'ouverte.")
End If


Mais c'est toujours pas ça, car la grille n'est pas "liée"
Si je dis que des 2 sa fonctionne, que des 1 aussi, mais si je dis 1 puis 2, la grille va partir sur la location de la deux ("Form3.Location = New Point(640, 0)", il y a que ça qui change dans le code)
arfff.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Et donc ? ====>>> méthode à reconsidérer...
Tu t'amuses bien ?
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Un peu, sans plus ahah !

J'essaye de revoir la méthode, pour faire autrement, mais vu que mon écran fait 1920x1080, je divise par 3 la location, ce qui devrais être bon !
Messages postés
12
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
20 juin 2015

Bon, ça fait 3 jours non-stop que je cherche une solution, et mes connaissances ne sont pas suffisante, j'ai l'impression ...

Quelqu'un pourrait-il m'indiquer la direction à prendre, celle des calculs j'avais compris, mais j'y arrive pas, j'ai besoin d'aide, sinon je retourne au simple 'gauche', 'droite' mais c'est pas du tout beau et fluide :/