Déplacement de souris automatiquement

wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015 - 13 juin 2015 à 19:14
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015 - 16 juin 2015 à 14:00
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 juin 2015 à 20:36
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
Modifié par wilfriedp le 13/06/2015 à 22:36
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 ^^
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/06/2015 à 00:31
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
14 juin 2015 à 11:37
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/06/2015 à 11:56
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
14 juin 2015 à 12:29
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 ^^
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
14 juin 2015 à 12:53
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
15 juin 2015 à 08:49
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/06/2015 à 12:29
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
15 juin 2015 à 18:40
 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 !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2015 à 19:05
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.
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
16 juin 2015 à 12:28
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 juin 2015 à 12:38
Et donc ? ====>>> méthode à reconsidérer...
Tu t'amuses bien ?
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
16 juin 2015 à 12:40
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 !
0
wilfriedp Messages postés 12 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 juin 2015
16 juin 2015 à 14:00
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 :/
0
Rejoignez-nous