Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Fonctions d'envoyer de touches à un objet interne ou externe | |
| | |
Auteur | Message |
---|
Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 14:32 | |
| Prends ton temps, car il faut que je m'occupe de mon programme, et ça me disperse. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 18:20 | |
| Le problème semble résolu. Il y avait deux problèmes, en réalité: 1. encore (!) un bug dans mes routines d'envoi de caractères. Corrigé - on passe à la version V1.53 . 2. un malentendu concernant item_add. Cette commande laisse le curseur à la fin du texte ajouté, et non pas en début de ligne suivante. Et chaque item_add fait un RETURN implicite avant le texte à insérer. Essaie ce code: lance-le et mets immédiatement le doit sur une touche sans relâcher. Tu verras que les caractères s'insèrent jusqu'à l'arrivée d'une ligne. Celle-ci provoque le retour à la ligne, puis les caractères viennent se coller derrière, etc. - Code:
-
memo 1 set_focus 1 item_add 1,"aaa" pause 2000 item_add 1,"bbb" pause 2000 item_add 1,"ccc" end
J'en ai tenu compte dans ton code et j'ai ajouté un chr$(13) à la ligne 24. Ton code modifié est celui-ci: - Code:
-
label go dim envoi$ ,i%,s$ ,handle% , version$ width 0,800
dll_on "KGF.dll" version$ = DLL_call1("KGFdllVersion",adr(version$)) message version$ :' reçoit 151 list 1:width 1,250 item_add 1,"panoramic@klausgunther"+chr$(9)+"panoramic123" item_add 1,"panoramic@cosmos70"+chr$(9)+"panoramic123" memo 2:left 2,270 : width 2,400 handle%=handle(2) on_click 1,go ' execute "http://www.mydrive.ch/login" end go: envoi$= item_index$(1) caption 0, envoi$ clipboard_string_copy envoi$ clipboard_paste 2 : ' dans un premier temps wait 2000 set_focus 2 s$= chr$(13)+chr$(17) + "V" + chr$(17) i% = dll_call2("SendStringAsChars",handle%,adr(s$)) item_add 2,"2ème envoi" :' pourquoi pas de saut à la ligne? c'est pas habituel i% = dll_call2("SendString",handle%,adr(envoi$)) item_add 2,"----------------" return ' plusieurs choses: il ne se passe rien avec les fonctions. ' avec item_add, il n'y a pas de saut ligne suivante
et le résultat me semble ce que tu attends: Je me suis longtemps battu, dans la nouvelle version, avec la touche ALT (qui n'est pas utilisée dans ton code mais que je voulais faire marcher quand-même), et cela semble marcher aussi maintenant. Donc, voilà: recharge la DLL et essaie avec le code modifié. La doc est inchangée. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 19:46 | |
| Oui, il y a des progrets, mais je n'arrive pas à faire la même chose avec le web. Avant de te répondre, j'ai voulu voir ce qu'il en était avec AutoIt, car je n'étais pas sûre de moi. Regarde ce que cela fait: (Je ne sais pas si il faut que le navigateur soit fermé avant ou non, vu que QtWeb, mon ordi ne l'acepte pas comme par défaut. Donc c'est un autre navigateur qui le lance . Voir le Fichier : MyDrive.exeEst-ce que toi, tu arrive à faire la même chose en Panoramic En appuyant sur le bouton, on lance le Drive. Le programme en AutoIt est: - Spoiler:
- Code:
-
; mise en mémoire pour WebDave #include <GuiListBox.au3> Global $Hwd = GUICreate("MyDrive", 300, 250, 400, 200) Global $Hlist = GUICtrlCreateList("", 10, 10, 280, 180) Global $Hbouton = GUICtrlCreateButton("MyDrive", 10, 210, 50) _GUICtrlListBox_BeginUpdate($Hlist) _GUICtrlListBox_AddString($Hlist, "panoramic@cosmos70") _GUICtrlListBox_AddString($Hlist, "panoramic@klausgunther") _GUICtrlListBox_EndUpdate($Hlist)
WinActivate($Hwd) GUISetState()
Main() Func Main() Local $a = "", $msg Do $msg = GUIGetMsg($Hlist) If $msg = $Hlist Then ;$msg = 0 $a = _GUICtrlListBox_GetCaretIndex($Hlist) Local $b = _GUICtrlListBox_GetText($Hlist, $a) ClipPut($b) Sleep(500) Send("!{TAB}") Send("^v") Send("{TAB}") Send("panoramic123") EndIf
if $msg = $Hbouton Then ShellExecuteWait("http://www.mydrive.ch/login") EndIf Until GUIGetMsg() = $GUI_EVENT_CLOSE EndFunc ;==>Main
Je n'ai pas réussi en faisant un envoi de touches sur une seule ligne, j'ai du décomposer. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 20:01 | |
| Eh bien, il est génial, ton programme ! Il marche parfaitement !
Pour ma part, je suis sous Firefox V15.0.1.
Un clic sur le bouton MyDrive ouvre un nouvel onglet dans lequel apparaît la page login de MyDrive.
Un clic sur une des lignes de la liste charge bien les données identifiant et mot de passe dans les zones correspondantes, et on n'a plus qu'à cliquer sur le bouton de login pour se connecter.
Simplissime et très efficace ! | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 20:46 | |
| Merci, mais ce que j'essaye de faire, c'est en Panoramic. Ainsi chacun pourra faire à sa guise. Tu comprends mieux ce que j'essaye d'obtenir. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 21:52 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Sam 8 Sep 2012 - 23:47 | |
| Ca marche. J'ai ajouté quelques fonctions à la DLL pour compléter ses fonctionnalités: - Code:
-
V1.54 08/09/2012 ajout fonctions d'envoi decaractères à un objet GetActiveWindow, GetActiveWindowTitle, SendStringAsText
Je l'ai implémenté pour mon browser qui est Firefox. Avec ce browser, la caption de la fenêtre principale est remplacée par le titre de la page Web qui est chargée. J'utilise donc ce titre pour vérifier que c'est bien la page login de MyDrive qui est chargée - elle débute par "login | ". Cela est fait avec une fonction qui récupère la caption de la fenêtre active. Bien sûr, pour que le browser soit la fenêtre active, il faut cacher le programme Panoramic. Il y a donc des HIDE 0 et SHOW 0 à des endroits stratégiques. Lorsque la page login est chargée, le curseur est positionné automatiquement dans la zone de l'identifiant qui est donc l'objet actif. Je lui envoie la chaine cliquée dans la liste. Puis l'envoi d'un TAB et on se trouve dans le mot de passe. Je lui envoie "panoramic123'. Puis 3 fois TAB et on est sur le bouton de connexion. Je lui envoie un retour charriot, et la connexion de fait automatiquement. Voici le source: - Code:
-
' connexion_MyDrive.bas
label MyDrive, choix dim s$, res%, hnd%, hnd0%, titre$
dll_on "KGF.dll"
width 0,440 : height 0,280
list 1 : height 1,200 : width 1,400 on_click 1,choix item_add 1,"panoramic@cosmos70" item_add 1,"panoramic@klausgunther"
button 2 : top 2,210 : left 2,10 caption 2,"MyDrive" : on_click 2,MyDrive hnd0% = handle(0)
end
MyDrive: hide 0 Execute "http://www.mydrive.ch/login" repeat pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until left$(titre$,8) = "Login | " show 0 return choix: hide 0 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) if left$(titre$,8) <> "Login | " show 0 message "Il faut d'abord cliquer sur [MyDrive] !" return end_if s$ = item_index$(1) hnd% = dll_call0("GetActiveControl") res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = chr$(9) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) pause 1000 s$ = "panoramic123" res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = chr$(9) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) s$ = chr$(9) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) s$ = chr$(9) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) s$ = chr$(13) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) pause 1000 show 0 return
Pour d'autres browsers, il faudra peut-être adapter la reconnaissance de la présence de la bonne page. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 0:49 | |
| Je suis ennuyé, ça ne marche pas. Je ne me souvenais plus du nom du browser par défaut: Slimbrowser.
J'ouvre avec le bouton, puis Panoramic disparu. Si j'ai compris avec une de tes dll, tu caches celui-ci, mais il attend quoi, en dehors de l'onglet? J'ai vu avec RapidTaskKiller, en relancant le programme, le l'icône se montre et se cache indéfiniment. Donc il attend quelque chose, et j'ai pas le temps de décoder les noms des dll pour savoir ce qu'elles font. Donc je suis obligé de tuer Panoramic. N'ayant plus de forme, je ne peux cliquer sur le list.
Tu as vraiment du mal à te passer du handle. Si tu as regarder mon programme en AutoIt, tu as du comprendre qu'au départ je me suis servi des touches: <ALT><TAB> pour passer du programme à la fenêtre. J'ai oublié de mettre les commentaires sur mon programme: ClipPut($b) je mets le contenu du list dans le presse papier Sleep(500) un petit délai utile ou pas, je ne sais pas, mais je l'ai mis Send("!{TAB}") envoi de <ALT><TAB>, pour changer de programme Send("^v") envoi de <CRTL> v , pour coller le contenu du pseudo Send("{TAB}") envoi de tab pour changer d'edit Send("panoramic123") puis du MDP J'ai pas cliqué sur LOGIN pour controler. De cette façon, ça marche avec QtWeb et Slimbrowser. Et si dans mon programme, QtWeb est ouvert sur la page Login, sans appuyé sur mon bouton pour lancer Slimbrowser, vu qu'il est en défaut sur mon système, et que je clique sur l'un des items, ça marche aussi.
Je suis désolé, qu'est ce que je suis emmerdant! Si tu arrive à faire cela, en dehors de moi, par la navigation des touches, ont peu faire plein de choses. Mais bon, apparemment, les autres ne sont pas interessés, ou n'ont pas compris.
Je sens que je vais faire un somme! EDIT, je viens de faire un essai rapide, ça marche aussi avec ce forum (j'ai entré l'un des noms de la liste, vu que depuis j'ai complété avec ceux que j'ai trouvé. Voila un moyen de faire des réponses automatiques.
Salut Jicehel, on se croise! Moi aujourd'hui, Firefox c'est un autre monde, j'ai plus de mémoire.
RE-EDIT, quand je dis ça marche, j'ai pas fait goffe, c'est avec mon programme.
Dernière édition par cosmos70 le Dim 9 Sep 2012 - 1:10, édité 3 fois |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 0:57 | |
| Ca marche nickel. Le programme attend la fenêtre de login pour réapparaitre et on clic sur celui que l'on veut dans la liste. Attention il faut donc ne pas être déjà connecté, sinon faire un logout pour que cela fonctionne. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 8:52 | |
| Bonjour Klaus, J'ai essayé ton petit programme de connexion automatique à my drive. Il fonctionne bien, sauf que le mot de passe se retrouve collé au login, et par conséquent il ne s'ouvre pas la page voulue. J'utilise Internet explorer. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 9:03 | |
| @Cosmos70: Si mon programme se cache indéfiniment, il ne reconnait pas que la fenêtre de login est chargée dans le browser. Lors du clic sur le bouton MyDrive, j'appelle la routine suivante: - Code:
-
MyDrive: hide 0 Execute "http://www.mydrive.ch/login" repeat pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until left$(titre$,8) = "Login | " show 0 return Explication: 1. mon programme se cache 2. je lance l'adresse URL de MyDrive 3. je fais une boucle d'attente pour surveiller la fin du chargement de la page login: 3.1. j'attends 1 seconde 3.2. je prépare une variable string 3.3. je récupère AUTOMATIQUEMENT le handle et le titre de la fenêtre active 3.4. j'élimine les espaces en trop dans le titre 3.5. et je sors de la boucle d'attente lorsque le titre de la fenêtre commence par "login | " 4. mon programme réapparaît 5. et c'est fini Tu vois, la boucle est très simple, et le seul point où cela peut accrocher, c'est la reconnaissance du chargement de la page Web. Que dit le titre de ta fenêtre de browser lorsque la page login est chargée ? Est-ce que ce titre a changé pour notifier le titre de la page ? Si oui, il te suffit d'adapter la condition du "until" pour détecter la présence de la page web. Si le titre de ton browser ne change pas, tu remplaces ce sous-programme par - Code:
-
MyDrive: hide 0 Execute "http://www.mydrive.ch/login" pause 1000 : ' <<<<<=========== adapter la durée ici titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) show 0 return et tu adaptes la durée de la commande pause pour laisser le temps au chargement. Je sais bien que lorsque la page est chargée, le curseur est placé directement dans la zone de l'identifiant. Et je lui envoie directement les données nécessaires, via le handle qui a été récupéré automatiquement. Et je le trouve, quelque soit le browser car dans tous les cas, ce sera la fenêtre active puisque mon programme se cache, justement pour cette raison. La fonction GetActiveWindowTitle retourne le titre dans le paramètre string passé par adresse, et le handle correspondant par la valeur de retour. C'est automatique. Il faut juste attendre assez longtemps pour s'assurer que la page est bien chargée. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 9:06 | |
| Bonjour. Comme cela ne marchait pas chez moi, j'ai fait des essais. Je vais dire que j'ai été bien surpris, car ta dll, elle tourne en boucle, et j'ai mis 10 mn avant de pouvoir la tuer. Avec le "tueur" de tâches, je n'arrivais pas à choper et aller terminer la tâche. J'ai rajouté dll_off après avoir envoyé le clic du pseudo, et là le message d'erreur apparaît pour dire que la dll est fermée. Normalement une fois la tâche faite, le travail est fait, et je devrais reprendre la main, et bien non, toutes les secondes environ, elle reprend. - Code:
-
label MyDrive, choix dim s$, res%, hnd%, hnd0%, titre$
dll_on "KGF.dll" left 0,screen_x -500: top 0,50: width 0,440 : height 0,280
list 1 : height 1,200 : width 1,400 on_click 1,choix item_add 1,"panoramic@cosmos70" item_add 1,"panoramic@klausgunther"
button 2 : top 2,210 : left 2,10 caption 2,"MyDrive" : on_click 2,MyDrive
hnd0% = handle(0) end
MyDrive: Execute "http://www.mydrive.ch/login" wait 5000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) to_foreground 0 clipboard_string_copy titre$ ' message reçu: "SlimBrowser - Login | MyDrive - Ihr Schweizer Online-Speicher"
s$ = chr$(17) + chr$(9) + chr$(17) + chr$(9) res% = dll_call2("SendSingleChar",hnd%,adr(s$)) return
choix: to_background 0 s$ = item_index$(1) to_background 0 wait 1000 :' le temp de voir si le curseur clignote res% = dll_call2("SendStringAsText",hnd%,adr(s$)) dll_off :' rajouté pour stoppé le processus return Klaus je vois ton message en même temps que je poste le mien. J'y allais progressivement pour voir. Il y a quand même un problème. EDIT: comment tu fais pour envoyer <ctrl><tab> vu les bascules: chr$(17)+chr$(9)+chr$(9)+chr$(17) ou chr$(17)+chr$(9)+ch$(17) ou ... |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 9:16 | |
| Je rajoute, pour le cas où tu aurais déjà regardé mon post, que la séquence que j'envoi après l'ouverture du navigateur, c'est un essai rajouté. Je l'ai fait avec et sans. Vu les problèmes rencontrés, je ne connais pas le résultat.
A propos: lorsqu'on ferme un programme, la dll peut-elle être encore active? En cas de problème avec le programme, et qu'on le stoppe, la dll fait-elle encore quelque chose. Un problème d'une fois précédente? |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 9:56 | |
| @Cosmos70: Il ne faut pas tuer la DLL de cette façon. Elle mémorise un certain nombre de choses (état des touches control, ...), et su tu la tues, ces informations sont perdues et la synchronisation se perd avec la suite. De plus, tu fais dll_off immédiatement après un SendStringAsText. Or, c'est périlleux: la demande d'envoi a bien été posté à Windows, avec l'adresse du début de la chaîne ainsi que sa longueur. Mais tu ne sais pas QUAND l'envoi sera terminé. Et tu lui tues l'adresse avant que le travail de soit fini... Si tu arrêtes le programme, la DLL sera libérée automatiquement. J'ai ajouté ce code dans la version postée ci-après. Laisse le programme comme ça, et joue sur la boucle de reconnaissance de la page, tel que je te l'avais suggéré. Suite à la remarque de Bignono, j'ai fait une version légèrement modifiée du programme pour que ça passe aussi avec Internet Explorer. La différence est dans l'envoi de l'identifiant et du mot de passe, pas du tou au niveau de la reconnaissance de la page. La DLL est inchangée. - Code:
-
' connexion_MyDrive.bas
label MyDrive, choix, close0 dim s$, res%, hnd%, hnd0%, titre$
dll_on "KGF.dll"
width 0,440 : height 0,280 : on_close 0,close0
list 1 : height 1,200 : width 1,400 on_click 1,choix item_add 1,"panoramic@cosmos70" item_add 1,"panoramic@klausgunther"
button 2 : top 2,210 : left 2,10 caption 2,"MyDrive" : on_click 2,MyDrive hnd0% = handle(0)
end
close0: dll_off return
MyDrive: hide 0 Execute "http://www.mydrive.ch/login" repeat pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until instr(titre$, "Login | " )>0 show 0 return choix: hide 0 pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) if instr(titre$, "Login | " )=0 show 0 message "Il faut d'abord cliquer sur [MyDrive] !" message "Le titre actuel est: ["+titre$+"]" return end_if s$ = item_index$(1) hnd% = dll_call0("GetActiveControl") res% = dll_call2("SendStringAsText",hnd%,adr(s$)) s$ = chr$(9) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = "panoramic123" res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = chr$(9) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) s$ = chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 show 0 return
Edité le 9/9/2012 à 13:22 pour remplacer left$ par instr (info de Cosmos70).
Dernière édition par Klaus le Dim 9 Sep 2012 - 13:31, édité 3 fois | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 10:49 | |
| Merci beaucoup Klaus, Ça fonctionne super maintenant! Ça ouvre plein de possibilités ces nouvelles fonctions de KGF.dll! A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 10:59 | |
| Merci, Bignono ! Et je suppose que tu as silencieusement corrigé le petit oubli de "0," en ligne 0 - c'est corrigé dans le source posté ci-dessus.
Nouvelle info: ça marche aussi tel quel avec Chrome ! | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:13 | |
| Klaus, si j'ai rajouté, dll_off, c'est juste qu'avant j'ai subit ce que j'ai dit. Et pour refaire l'essai, j'ai pris la précaution de rajouter dll_off pour repredre le contrôle de mon ordi. La dll avait perdu le controle, et dans l'éditeur Panoramic, il n'arrétait pas de me rajouter le contenu du clic du list, à savoir panoramic@.... Il faudrait que tu fasses en sorte qu'au bout de x tentative de branchement (ou je ne sais pas quoi) elle annule la commande.
Je te l'ai bien dit que j'ai rajouté dll_off après. Peut-être faudrait-il un dll_wait, ou exit ou je ne sais pas quoi. toujours est-il qu'elle me renvoyait (et avant que je ne mette dll_off) la chaine s$ je crois, vu qu'ensuite l'éditeur est parti aussi avec les programmes.
Je ne sais plus trop si je dois faire l'essai ou non, vu ce qu'il sait passé. Peut-être un commande dans la dll avec res%=(dll_quit(...)) un paramètre qui permette de reprendre le controle.
A propos, tu ne m'as pas dit comment tu vois: <ALT TAB> je remarque que j'ai employé <CTRL TAB> (si il faut doubler les deux, sinon lequel?)
Le problème est que tu insistes sur le handle, et qu'avec tout n'est pas possible. Car je ne suis pas encore certain que handle(0) s'en libère. Qu'en est-il vraiment? |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:18 | |
| Oui Klaus, j'avais vu l'oubli de "0,", ce n'était pas bien grave! Merci encore! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:18 | |
| Cosmos, pour arréter, il suffit juste de ne pas appelr la DLL.
Si tu veux un nombre fini ou un moyen de quitter ajoute un exit_repeat sur un test de la touche esc dans le sous programme mydrive ou remplace le repeat par une boucle for. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:44 | |
| - Citation :
- Cosmos, pour arréter, il suffit juste de ne pas appelr la DLL.
Je programme je l'ai mis. Tu retires juste dll_off dans la ligne citée. C'est celui de Klaus allégé, pour regarder à la suite, et avant d'aller plus loin, ce qui se passe. Donc il n'y a une fois le navigateur ouvert qu'un appel au sous programme depuis le clic sur le list. Mais dans le gestionnaire de tâches, si j'essaye d'appuyer sur panoramic, le dit programme, on voit que toutes les lignes sont listées pour reprendre. ce qui fait que j'ai pas le temps de cliquer sur terminer le processus, que c'est un autre programme qui a le focus dans la liste. Si tu ne veux pa que j'appelle la dll, donc il n'y a plus de programme. Je signale qu'il n'y a qu'un seul clic sur le list, mais cela fait comme si le sous-programme était revu en continu. Mais moi j'avais juste parlé au départ pour le clavier, et je ne pensais pas que cela allait prendre tout mon temps. Je sais que cela prend aussi le temps de Klaus. Je suis toujours au même point avec mon programme, car je ne peux avancer dedans, surtout que j'y reste pas longtemps à la fois. J'ai bien des choses à faire, et ça s'accumule. Tout à l'heure je pars à Besançon, et je ne sais pas si je dois aussi aller à Dole (des villes certainement inconnues pour vous). Mes journée sont chargées. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:53 | |
| Je n'ai pas dit ça cosmos, mais dans la procédure MyDrive, il y a un appel infini à la DLL jusqu'à ce que l'on obtienne le résultat. Si tu veux pouvoir sortir, soit tu modifie la boucle repeat pour prévoir une condition de sortie (par exemple un or cpt=10) et en mettant cpt à 0 au départ et un cpt=cpt+1 avant la fin de la boucle, soit tu mets un test d'appui sur echap pour pouvoir sortir de la boucle quand tu veux. Ce que je voulais dire, c'est que ce n'est pas la DLL qui boucle mais les appels à la DLL tel que le programme est prévu. Tu peux donc modifier ces conditions d'appels assez facilement. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 11:59 | |
| @Cosmos70:
J'ai installé QTWeb chez moi pour voir ce qui se passe.
Je crois que ton problème vient du fait que tu exécutes mon programme avec l'éditeur de Panoramic, et cela perturbe dans certains cas la notion de "fenêtre active".
Génère un EXE à partir de mon programme. Réduis l'éditeur. Lance mon programme en EXE. clique sur MyDrive - QTWeb devrait se lancer avec la bonne page. Et mon programme, caché pendant la phase de lancement, réapparaîtra à ce moment-là. Clique sur Cosmos... et tu te trouves dans tes dossier.
Ca marche impeccable chez moi avec QTWeb dans ces conditions. Prends le dernier programme que j'ai posté juste au-dessus - ça marche avec ça. Firefox, Internet Explorer, Chrome et QTWeb - testés, ok. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 13:10 | |
| Voila, le navigateur par défaut, comme je l'ai dit est Slimbrowser, QtWeb, Windows ne l'accepte pas ainsi (je ne sais pas pourquoi. Donc le navigateur cité, s'ouvre. Mais c'est tout. Ensuite, comme Panoramic est caché. Je viens de faire l'essai du programme, mais en le modifiant: - Code:
-
label MyDrive, choix, close0 dim s$, res%, hnd%, hnd0%, titre$
dll_on "KGF.dll"
width 0,440 : height 0,280 : on_close 0,close0
list 1 : height 1,200 : width 1,400 on_click 1,choix item_add 1,"panoramic@cosmos70" item_add 1,"panoramic@klausgunther"
button 2 : top 2,210 : left 2,10 caption 2,"MyDrive" : on_click 2,MyDrive
hnd0% = handle(0)
end
close0: dll_off return
MyDrive: hide 0 Execute "http://www.mydrive.ch/login" repeat pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until instr(titre$, "Login | " ) > 0 show 0 return if left$(titre$,8) <> "Login | " show 0 message "Il faut d'abord cliquer sur [MyDrive] !" message "Le titre actuel est: ["+titre$+"]" return end_if choix:
hide 0 pause 1000 titre$ = string$(255," ") hnd% = dll_call1("GetActiveWindowTitle",adr(titre$))
s$ = item_index$(1) hnd% = dll_call0("GetActiveControl") res% = dll_call2("SendStringAsText",hnd%,adr(s$)) s$ = chr$(9) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = "panoramic123" res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 s$ = chr$(9) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) s$ = chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 show 0 return Et de cette façon ça marche. J'ai modifié, la façon de voir si le programme est ouvert avec instr(), car le titre est: "SlimBrowser - Login | MyDrive - Ihr Schweizer Online-Speicher" Merci pour tes efforts, maintenant je vais passer à autre chose, et on m'appelle. Peut-être un apéro! On n'y a droit non? Aller OUI Au faite, pourquoi tune me répond pas pour tabuler sur un autre programme par <ALT><TAB>, les 2 sont en bascule? surement oui. A propos, j'ai pas pensé à faire un exécutable, ça marché direct. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 13:14 | |
| Bon apéro | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Dim 9 Sep 2012 - 13:23 | |
| Bonne idée, Cosmos70. J'ai remplacé left$ par instr dans le source posté à la page précédente. J'ai installé SlimBrowser - ça marche.
Firefox, Internet Explorer, Chrome, QTWeb et SlimBrowser - testés, ok. | |
| | | Contenu sponsorisé
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe | |
| |
| | | | Fonctions d'envoyer de touches à un objet interne ou externe | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |