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 |
---|
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 Lun 10 Sep 2012 - 21:51 | |
| Bonsoir à tout le monde, Depuis la version 0923 lorsqu'on met terminate en fin de programme à la dernière ligne, on entend quand même un affreux beep, que l'on entendait pas dans les versions précédentes. Donc moi je suis resté avec la version 0923i6. Mais depuis l'arrivée des sub end_sub avec la version 0924i1, je suis un peu embêté, car la seule manière d'éviter le beep à la fermeture d'un programme c'est d'utiliser la croix en haut à droite. Heureusement, j'ai trouvé une solution grâce à la DLL de Klaus KGF. Vous me direz certainement que c'est un peu lourd, mais je ne vois pas comment faire autrement. - Code:
-
dim hnd%,res%,x%,y%,w%,h% label fin,sauver,ouvrir dll_on "c:\mesprog\KGF157.dll"
main_menu 1 sub_menu 2:parent 2,1:caption 2,"Fichier" sub_menu 3:parent 3,2:caption 3,"Ouvrir":on_click 3,ouvrir sub_menu 4:parent 4,2:caption 4,"Sauver":on_click 4,sauver sub_menu 5:parent 5,2:caption 5,"Quitter":on_click 5,fin end
ouvrir: cls:print "Ouverture Fichier" return sauver: cls:print "Fichier enregistré" return
fin: hnd%=handle(0) res%=dll_call5("GetFormMetrics",hnd%,adr(x%),adr(y%),adr(w%),adr(h%)) x%=(x%+w%)-10:y%=y%+10 res%=dll_call2("AbsoluteMouseLeftClick",x%,y%)
A+ | |
| | | 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 Lun 10 Sep 2012 - 21:55 | |
| On peut bouger ou redimensionner la fenêtre sans problème. La seule chose à éviter avec cette solution, c'est d'utiliser BORDER_HIDE. | |
| | | 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 Lun 10 Sep 2012 - 22:11 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 10 Sep 2012 - 23:19 | |
| Une colle qui n'en ait peut être pas une pour vous... Si je prends un site comme celui de la CAF, Selon sa situation professionnelle, il faut cocher une case sur le formulaire d'accès. Dans ce cas, quel caractère "Chr$()" correspond à la coche de cette case ? | |
| | | 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 Lun 10 Sep 2012 - 23:32 | |
| Bonsoir Ygeronimi, Je vais peut-être dire une bêtise, mais essaye chr$(32), ça correspond à l'espace. Je suis pas sûr que ça fonctionne 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 Lun 10 Sep 2012 - 23:55 | |
| @YGeronimi: Une case à cocher, c'est comme un objet CHECK de Panoramic. En Panoramic, la saisie d'un espace bascule l'état d'un CHECK, ou un click dessus. Essaie sur le site WEB si les deux fonctionnent, mais il y a effectivement des chances pour que espace marche. Il faut que tu essaies manuellement, au clavier, sur ce site. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Lun 10 Sep 2012 - 23:58 | |
| Bonsoir. Normalement dans une fenêtre windows, pour aller d'un champ de saisie à un autre,Il faut appuyer sur la touche <TAB>. C'est également vrai pour Panoramic, un éditeur de texte, exel.... Le tout est de savoir où tu te trouve au départ, lorsque tu es dans la fenêtre. Parfois un faut un clic dans un endroit. Si en ouvrant la page, le curseur se trouve dans une zone de saisie, comme du texte, une case à cocher, un bouton, il faut savoir si tu es sur une bonne place pour y remplir cet endroit. Ensuite par des touches <TAB> successives, tu atteinds la zone suivante.
Tu procèdes ainsi dans le cas où tu te trouves. tu notes sur du papier, où tu es., en face si il faut y faire queque chose, et des appuies sur Tab. Chaque fois qu'il y a une action a faire, tu le notes. Sur le login, et un bouton pour valider ou autre, tu envoies la touche: <ENTER>
Si c'est un check, appuie sur espace, normalement ça marche.
Je ne sais si sur ce formulaire, on est sur un edit. Il n'y a que toi qui le sait. Si c'est pas le cas, il faut faire un clic au bon endroit.
Voila voila! je ne peux rien dire de mieux pour l'instant.
On se croise Klaus. Je ne savais si j'allais annulé ou non. Tant pis, j'envoi. |
| | | 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 Mar 11 Sep 2012 - 0:04 | |
| @Cosmos70: J'ai poussé plus loin mon essai de pilotage de SlimBrowser. Tu veux ouvrir un onglet s'il est déjà en route, ou le lancer s'il n'est pas en route ? Résolu. Tu veux lui envoyer une URL ? Résolu. Condition: si SlimBrowser est déjà en route, il faut qu'il soit la fenêtre active avant de lancer ce programme et de cliquer sur le bouton "Tester SlimBrowser". En particulier, il faut réduire l'éditeur, ou générer un EXE à partir de ce programme. Voici ce que ça donne: - Code:
-
' test_GetProcessWindowHandle.bas
' ce programme utilise GetProcessWindowHandle récupérer le ' handle de SlimBrowser, et de lui envoyer une URL
label test
dim hnd%, res%, s$, SlimBrowser$ dim x%, y%, w%, h%
dll_on "KGF.dll" SlimBrowser$ = "sbframe.exe"
button 1 : top 1,10 : left 1,10 : width 1,150 caption 1,"Tester SlimBrowser" : on_click 1,test end
test: hnd% = dll_call1("GetProcessWindowHandle",adr(SlimBrowser$)) if hnd%=0 execute "C:\PROGRA~1\SLIMBR~1\sbframe.exe" repeat pause 1000 hnd% = dll_call1("GetProcessWindowHandle",adr(SlimBrowser$)) until hnd%<>0 else hide 0 pause 1000 ' ouvrir un nouveau TAB s$ = chr$(20) : ' control-T res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 end_if res% = dll_call5("GetFormMetrics",hnd%,adr(x%),adr(y%),adr(w%),adr(h%)) x% = x% + w%/2 y% = y% + 70 res% = dll_call2("AbsoluteMouseLeftClick",x%,y%) s$ = "http://panoramic.1fr1.net/"+chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000
show 0 return Tu vois que: 1. la boucle d'attente de démarrage de SlimBrowser a été nettement simplifiée, grâce à la nouvelle fonction 2. j'ai trouvé le moyen de cliquer dans la case de l'URL, quelque soit la position ou la dimension de SlimBrowser à l'écran. Note: le décalage vertical de 70 pixels est pour le mode dans lequel on a l'affichage du menu. En mode compact, ce décalage est en peu plus petit. | |
| | | 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 Mar 11 Sep 2012 - 0:05 | |
| Oui, on s'est croisé. Mais il ne faut pas annuler dans ces cas. Deux avis, même identiques, ont plus de poids qu'un seul, et chacun apporte des détails supplémentaires. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 11 Sep 2012 - 0:12 | |
| Bravo à tous, <Space> est la bonne touche ! | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mar 11 Sep 2012 - 0:17 | |
| Ygeronimo. Désolé, je n'avais pas compris que la question concernait un check. Donc commela dit Klaus, un espace. @Klaus! Merci beaucoup, mais tu ne m'en voudra pas si je teste pas maintenant. Le faite de rester à côté de la dll, ma permis d'avancer un peu, et je dois tout revoir les changements qui ont étés faites, et perdus. Tu vas trop vite, je ne te suis pas, mais c'est promis, je ferais les essais bienplus tard. Je suis venu voir le forum, juste pour souffler un peu. Je suis certain que tu es mieux organisé que moi, et vu ce qu'il m'attend ce matin, je vais voir le marchand de sable. J'espère qu'il me fera un prix! |
| | | 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 Mar 11 Sep 2012 - 0:20 | |
| Allez, fais de doux rêves ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 11 Sep 2012 - 0:24 | |
| | |
| | | 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 Mar 11 Sep 2012 - 10:05 | |
| @Cosmos70: J'ai poussé plus loin le pilotage de SlimBrowser. Il y a deux paramètres à prendre en compte: 1. est-il en mode compact ou non ? Cela joue sur la position de la barre URL. 2. demande-t-il s'il peut devenir le browser par défaut s'il ne l'est pas ? Il faut alors tenir compte de ce dialogue supplémentaire. Pour le premier point, je n'ai pas trouvé de solution automatisable. J'ai donc mis un CHECK dans le programme pour choisir le mode compact ou non. Le second point, par contre, est entièrement traité. Si SlimBrowser n'est pas le browser par défaut, et s'il est autorisé à poser la question, il affiche une form particulière avec des boutons Oui et Non, Oui étant le défaut. Je détecte cela par la caption de cette form, je lui envoie un TAB et un retour charriot pour choisir non, et j'assure ainsi de lancer le browser sans changer la configuration. Ensuite, le traitement est le même: - envoi de ctrl/T pour ouvrir un nouvel onglet - clic dans la zone URL en fonction du mode compact ou non - envoi de l'URL (forum Panoramic pour la démo) - envoi de retour charriot pour charger la page Et ça marche quelque soit sa taille ou sa position à l'écran. Le programme marche avec la version V0.9.24, mais la procédure DeterminerLesMarges est facile à transformer en sous-programme habituel. C'est la seule particularité, le reste est absolument banal. - Code:
-
' test_GetProcessWindowHandle_SlimBrowser.bas
' ce programme utilise GetProcessWindowHandle récupérer le ' handle de SlimBrowser, et de lui envoyer une URL
label test
dim hnd%, hnd1%, res%, s$, SlimBrowser$, titre$ dim x%, y%, w%, h%, x2%, y2%, w2%, h2% dim m_haut%, m_bas%, m_cote%
dll_on "KGF.dll" SlimBrowser$ = "sbframe.exe" : ' nom de l'exécutable pour SlimBrowser
width 0,200 : height 0,120 : caption 0,"SlimBrowser"
' déterminer les marges en haut, en bas et sur les côtés. ' on sait que SlimBrowser utilise des bordures standard, tout comme ' ce programme. On détermine alors les dimensions des bordures par ' rapport à ce programme, et on peut les appliquer à SlimBrowser. DeterminerLesMarges(9)
button 1 : top 1,40 : left 1,10 : width 1,150 caption 1,"Tester SlimBrowser" : on_click 1,test check 2 : top 2,10 : left 2,10 : caption 2,"Mode compact"
end
' Cette procédure détermine les marges en haut, en bas et sur les côtés ' Ceci est fait en utilisant la différence des dimensions ' entre la form 0 et un mémo créé en FULL_SPACE et supprimé après ' Cette procédure est conçue pour marcher sous toutes les versions de Windows, ' et avec des forms quelconques, Panoramic ou autres, et quelque soit ' leur type de bordure (normal, réduit ou absent).. sub DeterminerLesMarges(obj%) memo obj% : full_space obj% res% = dll_call5("GetFormMetrics",handle(0),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(9),adr(x2%),adr(y2%),adr(w2%),adr(h2%)) m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% ' s$ = "Marges gauche/droite: "+str$(m_cote%)+chr$(13)+chr$(10) ' s$ = s$+"Marge haute: "+str$(m_haut%)+chr$(13)+chr$(10) ' s$ = s$+"Marge basse: "+str$(m_bas%)+chr$(13)+chr$(10) ' message s$ delete obj% end_sub
' test: ' on tente de trouver le processus de SlimBRowser hnd% = dll_call1("GetProcessWindowHandle",adr(SlimBrowser$)) if hnd%=0 : ' ici, SlimBrowser n'est pas encore lancé execute "C:\PROGRA~1\SLIMBR~1\sbframe.exe" : ' on le lance repeat : ' boucle d'attente du démarrage de SlimBrowser pause 1000 hnd% = dll_call1("GetProcessWindowHandle",adr(SlimBrowser$)) until hnd%<>0 pause 4000 repeat : ' il faut attendre qu'une fenêtre significative soit ouverte titre$ = string$(255," ") hnd1% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until (len(titre$)>0) and (titre$<>caption$(0)) ' si SlimBrowser n'est pas le browser par défaut, ' et s'ill est autorisé à poser la question, ' il affiche une form spéciale pour demander un choix. ' dans ce cas, on envoie TAB CR pour simuler un clic sur le bouton Non if instr(titre$,"Navigateur par défaut")>0 : ' est-ce cette demande ? s$ = chr$(9)+chr$(13) : ' alors envoyer TAB CR res% = dll_call2("SendStringAsText",hnd1%,adr(s$)) pause 1000 ' et on recharge le handle et le titre de la form suivante hnd% = dll_call1("GetActiveWindowTitle",adr(titre$)) end_if else : ' ici, SlimBrowser est déjà lancé - alors ouvrir un nouvel onglet ' forcer SlimBrowser en avant-plan (si jamais il était recouvert) res% = dll_call1("BringWindowToForeground",hnd%) pause 1000 ' ouvrir un nouvel onglet s$ = chr$(20) : ' control-T res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 end_if ' traitement commun dans tous les cas: ' on va chercher la position et les dimensions de la fenêtre ' pour en déduire la position de la zone URL res% = dll_call5("GetFormMetrics",hnd%,adr(x%),adr(y%),adr(w%),adr(h%)) ' la position horizontale compte tenu de la taille de la marge gauche x% = x% + m_cote%+376 ' la position verticale compte tenu de la marge haute et du mode if checked(2)=0 : ' vérification du mode y% = y% + m_haut%+41 : ' mode normal else y% = y% + m_haut%+15 : ' mode compact end_if ' effectuer un clic gauche dans la zone de saisie de l'URL res% = dll_call2("AbsoluteMouseLeftClick",x%,y%) pause 100 ' envoyer l'URL suivi d'un retour charriot ==> chargement de la page ! s$ = "http://panoramic.1fr1.net/" +chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000
return
| |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mar 11 Sep 2012 - 14:14 | |
| Je te choppe au passage. Merci bien, mais ce matin, j'ai téléchargé la version d'essai, qui je crois a été retiré depuis, car j'ai eu (je le dis au passé, car je ne peux pas reprendre maintenant) un bug imcompréhensible, et je voulais voir si c'était la même chose avec la dernière version. Et cela l'est. C'est très aimable de me secourir. Le problème est que je me sers de QtWeb. SlimBrowser est seulement là en défaut, que je ne retiens pas, car il me paraissait louche un certain temps. Mais ce que tu proposes je le faisais avec AutoIt, les clics et touches. C'est de cette façon que je fonctionnais avec Plugiciel. J'ai essayé ce matin en vitesse, en voulant y mettre QtWeb à la place. Les paramètres sont différents. C'est à revoir par la suite.
S'il te plait je reprend dmon programme (pas tout de suite, je suis de passage). Par contre dans ton programme tu mets ch$(20) pour TAB. As-tu pensé à autre chose que TAB, oo est-ce une erreur.
Maintenant ne te casses pas trop la tête, je vais peut-être changé d'ordi. (Un cadeau) Aussi je reprendrais un navigateur commun. Je regrette de ne pas avoir plus de temps.
Je quitte ce montre de Panoricien pour quelques heures. |
| | | 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 Mar 11 Sep 2012 - 14:52 | |
| Tu interprètes mal, Cosmos70. Le chr$(20), ce n'est pas censé être un TAB, c'est un control-T, ce qui ouvre un nouvel onglet dans SlimBrowser.
Avec QTWeb, c'est la même chose. control-T ouvre un nouvel onglet. Après, il faut cliquer dans la zone URL pour envoyer l'URL. C'est très similaire. Si cela peut te rendre service, je pourrais étudier une légère adaptation du programme pour gérer QTWeb - ce n'est pas compliqué du tout, à partir de la version pour SlimBrowser.
| |
| | | 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 Mar 11 Sep 2012 - 16:32 | |
| Voici la version adaptée à QtWeb. S'il est en cours, on ouvre un nouvel onglet, sinon on le lance. Dans tous les cas, on charge la page Panoramic: - Code:
-
' test_GetProcessWindowHandle_QtWeb.bas
' ce programme utilise GetProcessWindowHandle récupérer le ' handle de QtWeb, et de lui envoyer une URL
label test
dim hnd%, hnd1%, res%, s$, QtWeb$, titre$ dim x%, y%, w%, h%, x2%, y2%, w2%, h2% dim m_haut%, m_bas%, m_cote%
dll_on "KGF.dll" QtWeb$ = "QtWeb.exe" : ' nom de l'exécutable pour QtWeb
width 0,200 : height 0,120 : caption 0,"QtWeb"
' déterminer les marges en haut, en bas et sur les côtés. ' on sait que QtWeb utilise des bordures standard, tout comme ' ce programme. On détermine alors les dimensions des bordures par ' rapport à ce programme, et on peut les appliquer à QtWeb. DeterminerLesMarges(9)
button 1 : top 1,40 : left 1,10 : width 1,150 caption 1,"Tester QtWeb" : on_click 1,test ' check 2 : top 2,10 : left 2,10 : caption 2,"Mode compact"
end
' Cette procédure détermine les marges en haut, en bas et sur les côtés ' Ceci est fait en utilisant la différence des dimensions ' entre la form 0 et un mémo créé en FULL_SPACE et supprimé après ' Cette procédure est conçue pour marcher sous toutes les versions de Windows, ' et avec des forms quelconques, Panoramic ou autres, et quelque soit ' leur type de bordure (normal, réduit ou absent).. sub DeterminerLesMarges(obj%) memo obj% : full_space obj% res% = dll_call5("GetFormMetrics",handle(0),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(9),adr(x2%),adr(y2%),adr(w2%),adr(h2%)) m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% ' s$ = "Marges gauche/droite: "+str$(m_cote%)+chr$(13)+chr$(10) ' s$ = s$+"Marge haute: "+str$(m_haut%)+chr$(13)+chr$(10) ' s$ = s$+"Marge basse: "+str$(m_bas%)+chr$(13)+chr$(10) ' message s$ delete obj% end_sub
' test: ' on tente de trouver le processus de QtWeb hnd% = dll_call1("GetProcessWindowHandle",adr(QtWeb$)) if hnd%=0 : ' ici, QtWeb n'est pas encore lancé execute "C:\PROGRA~1\QtWeb\QtWeb.exe" : ' on le lance repeat : ' boucle d'attente du démarrage de QtWeb pause 1000 hnd% = dll_call1("GetProcessWindowHandle",adr(QtWeb$)) until hnd%<>0 pause 4000 repeat : ' il faut attendre qu'une fenêtre significative soit ouverte titre$ = string$(255," ") hnd1% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until (len(titre$)>0) and (titre$<>caption$(0)) else : ' ici, QtWeb est déjà lancé - alors ouvrir un nouvel onglet ' forcer QtWeb en avant-plan (si jamais il était recouvert) res% = dll_call1("BringWindowToForeground",hnd%) pause 1000 ' ouvrir un nouvel onglet s$ = chr$(20) : ' control-T res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 end_if ' traitement commun dans tous les cas: ' on va chercher la position et les dimensions de la fenêtre ' pour en déduire la position de la zone URL res% = dll_call5("GetFormMetrics",hnd%,adr(x%),adr(y%),adr(w%),adr(h%)) ' la position horizontale compte tenu de la taille de la marge gauche x% = x% + m_cote%+376 ' la position verticale compte tenu de la marge haute y% = y% + m_haut%+28 ' effectuer un clic gauche dans la zone de saisie de l'URL res% = dll_call2("AbsoluteMouseLeftClick",x%,y%) pause 100 ' envoyer l'URL suivi d'un retour charriot ==> chargement de la page ! s$ = "http://panoramic.1fr1.net/" +chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000
return | |
| | | 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 Mar 11 Sep 2012 - 17:11 | |
| J'ajoute une conséquence intéressante: J'utilise la fonction GetProcessWindowHandle pour déterminer si un programme quelconque est déjà lancé. Dans ce cas, la fonction retourne le handle de la fenêtre principale du processus. Si le programme n'est pas lancé, la fonction retourne la valeur 0. Alors, on peut utiliser cette fonction pour assurer qu'un programme particulier n'est lancé qu'une seule fois ! On fait comme ceci: - Code:
-
dim prog$, hnd% prog$ = "MonProgramme.exe" ... hnd% = dll_call1("GetProcessWindowHandle",adr(prog$)) if hnd%<>0 message "Désolé, le programme est déjà lancé !" terminate end_if
Intéressant, non ? | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mar 11 Sep 2012 - 20:48 | |
| Bon, je suis sur un nouvel ordinateur, et ça me change. J'ai essayé cet-après midi pour QtWeb, mais je n'ai eu que des blocages. Comme je doute fort que j'utilise ce programme avec QtWeb, vu que je suis maintenant sur Chrome, je ne m'en inquiète peu.
Je regarderais tes DLL un autre jour. Il y a plein de choses intéressantes, et pour les regarder, il faut du temps devant soi. Merci de ton aide. |
| | | 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 Mar 11 Sep 2012 - 21:32 | |
| Eh bien, voici la même chose pour Chrome - ça marche de la même manière ! - Code:
-
' test_GetProcessWindowHandle_Chrome.bas
' ce programme utilise GetProcessWindowHandle récupérer le ' handle de QtWeb, et de lui envoyer une URL
label test
dim hnd%, hnd1%, res%, s$, Chrome$, titre$ dim x%, y%, w%, h%, x2%, y2%, w2%, h2% dim m_haut%, m_bas%, m_cote%
dll_on "KGF.dll" Chrome$ = "chrome.exe" : ' nom de l'exécutable pour Chrome
width 0,200 : height 0,120 : caption 0,"Chrome"
' déterminer les marges en haut, en bas et sur les côtés. ' on sait que Chrome utilise des bordures standard, tout comme ' ce programme. On détermine alors les dimensions des bordures par ' rapport à ce programme, et on peut les appliquer à Chrome. DeterminerLesMarges(9)
button 1 : top 1,40 : left 1,10 : width 1,150 caption 1,"Tester Chrome" : on_click 1,test s$ = string$(25," ") res% = DLL_call1("KGFdllVersion",adr(s$)) message s$
end
' Cette procédure détermine les marges en haut, en bas et sur les côtés ' Ceci est fait en utilisant la différence des dimensions ' entre la form 0 et un mémo créé en FULL_SPACE et supprimé après ' Cette procédure est conçue pour marcher sous toutes les versions de Windows, ' et avec des forms quelconques, Panoramic ou autres, et quelque soit ' leur type de bordure (normal, réduit ou absent).. sub DeterminerLesMarges(obj%) memo obj% : full_space obj% res% = dll_call5("GetFormMetrics",handle(0),adr(x%),adr(y%),adr(w%),adr(h%)) res% = dll_call5("GetFormMetrics",handle(9),adr(x2%),adr(y2%),adr(w2%),adr(h2%)) m_cote% = x2%-x% m_haut% = y2%-y% m_bas% = h%-h2%-y2%+y% ' s$ = "Marges gauche/droite: "+str$(m_cote%)+chr$(13)+chr$(10) ' s$ = s$+"Marge haute: "+str$(m_haut%)+chr$(13)+chr$(10) ' s$ = s$+"Marge basse: "+str$(m_bas%)+chr$(13)+chr$(10) ' message s$ delete obj% end_sub
' test: ' on tente de trouver le processus de Chrome hnd% = dll_call1("GetProcessWindowHandle",adr(Chrome$)) if hnd%=0 : ' ici, Chrome n'est pas encore lancé execute "C:\DOCUME~1\Klaus\LOCALS~1\APPLIC~1\Google\Chrome\APPLIC~1\chrome.exe" : ' on le lance repeat : ' boucle d'attente du démarrage de Chrome pause 1000 hnd% = dll_call1("GetProcessWindowHandle",adr(Chrome$)) until hnd%<>0 pause 4000 repeat : ' il faut attendre qu'une fenêtre significative soit ouverte titre$ = string$(255," ") hnd1% = dll_call1("GetActiveWindowTitle",adr(titre$)) titre$ = trim$(titre$) until (len(titre$)>0) and (titre$<>caption$(0)) hnd% = hnd1% else : ' ici, Chrome est déjà lancé - alors ouvrir un nouvel onglet ' forcer Chrome en avant-plan (si jamais il était recouvert) res% = dll_call1("BringWindowToForeground",hnd%) pause 1000 ' ouvrir un nouvel onglet s$ = chr$(20) : ' control-T res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000 end_if ' traitement commun dans tous les cas: ' on va chercher la position et les dimensions de la fenêtre ' pour en déduire la position de la zone URL res% = dll_call5("GetFormMetrics",hnd%,adr(x%),adr(y%),adr(w%),adr(h%)) ' la position horizontale compte tenu de la taille de la marge gauche x% = x% + m_cote%+376 ' la position verticale compte tenu de la marge haute y% = y% + m_haut%+15 ' effectuer un clic gauche dans la zone de saisie de l'URL res% = dll_call2("AbsoluteMouseLeftClick",x%,y%) pause 100 ' envoyer l'URL suivi d'un retour charriot ==> chargement de la page ! s$ = "http://panoramic.1fr1.net/" +chr$(13) res% = dll_call2("SendStringAsText",hnd%,adr(s$)) pause 1000
return
Tu vois, c'est facile à adapter, et rapidement fait...
Dernière édition par Klaus le Mer 12 Sep 2012 - 8:31, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mer 12 Sep 2012 - 0:05 | |
| Bon, je commence à prendre possession de cet ordi. Jai réussi a avoir l'admistration des dossiers qui étaent refusés, comme document et s... du W7. Une bonne partie des clés usb sont installés. J'ai voulu essayé ton programme mais c'est pas encore la bonne dll. Mais déjà le handle est reconnu, et c'est un avancement par rapport aux autre browsers. Je verrais plus tard. A propos l'ouverture de panoramic, si Nardo lis ici, à peu-près 10s. |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mer 12 Sep 2012 - 4:13 | |
| J'ai pas encore la maitrise, je suis à la recherche de tout, mais je viens de télécharger la dernière version, et tester ton programme avec chrome ouvert. Il a vu que chrome est ouvert, mais il me signale une erreur à la ligne 69: - Code:
-
res% = dll_call1("BringWindowToForeground",hnd%) (29) Not correct arithmetic expression: Error in function . Line: 69 Excuses moi de ne pas cherché pourquoi. Il faut que je trouve une souris. Qu'est-ce que c'est chiant ce Pad, quant on n'a pas l'habitude |
| | | 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 Mer 12 Sep 2012 - 8:38 | |
| J'ai téléchargé KGF.dll du WebDav afin d'être certain de tester avec la version publiée. Et la version n'était pas bonne ! J'ai zappé de placer la dernière version sur MyDrive ! Je suis honteux et corrige tout de suite !
Cela doit être la Version V1.58 du 11/09/2012
J'ai modifié le programme démo pour Chrome (sur pa page précédenteà afin d'afficher la version de la DLL, au démarrage. | |
| | | Invité Invité
| Sujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe Mer 12 Sep 2012 - 10:36 | |
| Je viens de tester, et ça fonctionne. Une chose toute de fois: je n'avais pas vu que avais mis le chemin complet de chrome, et par rapport à toi. Donc à partir de là, avec cette erreur qu'en on ferme en appuyant sur la croix du programme, l'éditeur Panoramic retrouve son éclair, mais la fenêtre est toujours là. Même RapidTalkkiller sur mon EEEPC ne le voit pas. Il n'y a que le gestionnaire de tâche qui tue le programme. En tout cas on a les outils pour agir sur le reste des programmes, mais vois si il ne reste pas quelque chose à faire pour la sécurité ou le blocage. C'est vraiment un problème que j'ai eu avec mon EEEPC. C'est plus facile avec W7 pour reprendre. |
| | | 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 Mer 12 Sep 2012 - 10:59 | |
| J'ai pris simplement le chemin qui s'affichait avec clic droit/propriétés sur l'icône de Chrome. | |
| | | 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
| |
| |
| |