FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Form(résolu)
Envoi de touches à une application. Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Envoi de touches à une application. Emptypar Marc Hier à 11:42

» Bataille navale SM
Envoi de touches à une application. Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Une calculatrice en une ligne de programme
Envoi de touches à une application. Emptypar jean_debord Ven 26 Avr 2024 - 8:01

» Gestion d'un système client-serveur.
Envoi de touches à une application. Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Envoi de touches à une application. Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Envoi de touches à une application. Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Envoi de touches à une application. Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Envoi de touches à une application. Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Envoi de touches à une application. Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Envoi de touches à une application. Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Envoi de touches à une application. Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Envoi de touches à une application. Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Envoi de touches à une application. Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Envoi de touches à une application. Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €

 

 Envoi de touches à une application.

Aller en bas 
2 participants
AuteurMessage
Pedro

Pedro


Nombre de messages : 1549
Date d'inscription : 19/01/2014

Envoi de touches à une application. Empty
MessageSujet: Envoi de touches à une application.   Envoi de touches à une application. EmptyDim 27 Mar 2016 - 12:15

Bonjour.

@Klaus.

J'ai un problème avec le code suivant, qui fournit de mauvais résultats.

Il m'affiche ceci à chaque ligne: res%=dll_call5("SendSingleKey",hnd%,40,0,0,0)  : ' envoyer flèche vers le bas

Au lieu d'afficher le texte du presse-papiers.

L'envoi de CTRL-C semble ne pas fonctionner.

Merci de ton aide.

Code:
dim hnd%, res%, txt$, titre$, i%

dll_on "kgf"

memo 1
res% = dll_call2("GetWindowProcessHandles",1,handle(1))

' 65728=explorer.exe
' 459170=ApplicationFrameHost.exe
' 66840=SystemSettings.exe
' 8520792=panoramic_editor_15_déc_2015.exe
' 788242=EspagnolEssentiel.exe
' 590946=opera.exe
' 36045772=PANORAMIC.exe

for i%=1 to count(1)
    txt$=item_read$(1,i%)
    if instr(txt$,"Espagnol")>0
       txt$=left$(txt$,instr(txt$,"=")-1)
       hnd%=val(txt$)
       ' message str$(hnd%)
       exit_for
    end_if
next i%

file_open_write 1,"c:\a\dico_robert_collins.txt"

i%=0
while 1=1
      i%=i%+1
      if i%=10 then exit_while
      caption 0,str$(i%)

      res%=dll_call5("SendSingleKey",hnd%,67,1,0,0)  : ' envoyer ctrl/C
      wait 200
      txt$=clipboard_string_paste$
      message txt$
      file_writeln 1,txt$
      file_writeln 1,string$(100,"-")
      res%=dll_call5("SendSingleKey",hnd%,40,0,0,0)  : ' envoyer flèche vers le bas
      wait 200
end_while

file_close 1

dll_off
message "fin"
terminate
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Envoi de touches à une application. Empty
MessageSujet: Re: Envoi de touches à une application.   Envoi de touches à une application. EmptyDim 27 Mar 2016 - 12:37

1. ta détermination du handle du processus visé me semble correcte.
Mais c'est le handle du processs, pas forcément le handle de sa fenêtre visible. As-tu comparé avec le handle de la fenêtre visible de ton programme application ? Affiche son handle, et compare par rapport à ce que retourne la fonction GetWindowProcessHandles. Son nom indique bien qu'il s'agit du handle du process, pas de la fenêtre.

2. a supposer que le handle soit le bon pour la fenêtre visée, il y a tout de même un problème: tu envoies bien un ctrl/C, mais que copier ? Quel est le texte sélectioinné ? Je ne vois pas comment une ligne ou un paragraphe ait pu être sélectionné, dans le code que tu as poste.

3. dans la mesure que rien n'a été sélectionné avant le ctrl/C, ce dernier reste sans effet. Et le presse-papier garde son contenu précédent, qui était par hasard le texte que tu découvres. Mais c'est un pur hasard.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Envoi de touches à une application. Empty
MessageSujet: Re: Envoi de touches à une application.   Envoi de touches à une application. EmptyDim 27 Mar 2016 - 12:52

Pour récupérer le handle de la fenêtre visée (et non le handle du processus), utilise plutôt
Code:
res% = dll_call2("GetWindowByTitle",mode%,adr(titre$))
éventuellement avec mode%=1 si tu ne peux spécifier qu'une partie du titre de la fenêtre.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Pedro

Pedro


Nombre de messages : 1549
Date d'inscription : 19/01/2014

Envoi de touches à une application. Empty
MessageSujet: Envoi de touches à une application.   Envoi de touches à une application. EmptyDim 27 Mar 2016 - 15:07

Bonjour.

Je viens de tester la fonction précisée, mais je n'obtiens toujours pas le résultat escompté.
Il semblerait que l'envoi de touches à cette application soit verrouillé.

J'ai donc testé avec le code suivant, mais cela ne fonctionne pas non plus.


Code:
res% = dll_call2("AbsoluteMousePosition",300,60)
' Copier
res% = dll_call4("MouseFunction",1,1,0,0)
res% = dll_call4("MouseFunction",2,1,0,0)
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Envoi de touches à une application. Empty
MessageSujet: Re: Envoi de touches à une application.   Envoi de touches à une application. EmptyDim 27 Mar 2016 - 18:02

Voici ton code commenté:
Code:
res% = dll_call2("AbsoluteMousePosition",300,60) : ' positionnement absolu du curseur à (300,60)
' Copier
res% = dll_call4("MouseFunction",1,1,0,0)  : ' enfoncer la touche gauche de la souris
res% = dll_call4("MouseFunction",2,1,0,0)  : ' relâcher la touche gauche de la souris

Ceci ne copie rien. Ca ne fait qu'un clic gauche à l'endroit (300,60).

C'est équivalent à
Code:
res% = dll_call2("AbsoluteMousePosition",300,60) : ' positionnement absolu du curseur à (300,60)
res% = dll_call2("MouseLeftClick",x%,y%)

Mais tu peux faire une chose, pour récupérer le handle (en-dehors du conseil que je t'ai donné ci-dessus):
1. positionne le curseur de façon absolue (comme ci-dessus) dans le champ que tu veux récupérer
2. utilise GetObjectUnderPosition pour récupérer le handle

Exemple extrait de la doc:
Code:
dim res%, hnd%, x%, y%
res% = GetAbsoluteMousePosition(adr%(x%),adr%(y%))
res% = dll_call2("GetObjectUnderPosition",x%,y%)

Là, tu as un handle auquel tu peux envoyer des caractères.

Tu sais bien que pour copier quelque chose, il faut plusieurs conditions:
1. le champ concerné doit être le champ ayant le focus. Le plus sûr moyen d'assurer cela est de cliquer dedans, comme indiqué ci-dessus
2. déterminer une zone de sélection
3. faire ctrl/C

Pour le point 2, tu as le choix:
1. tu envoies ctrl/A pour sélectionner tout le champ. Dans ce cas, tu peux envoyer ensuite un ctrl/C et utiliser Clipboard_String_Paste$ pour récupérer le contenu.
2. pour sélectionner une seule ligne, tu envoies VK_HOME (36) pour positionner le curseur en début de ligne, puis VK_END (35) avec l'attribut Shift ajouté pour sélectionner toute la ligne. Ensuite, ctrl/C copie cette ligne et Clipboard_String_Paste$ peut être utilisé

Pour que le système 2 fonctionne, il faut être sûr d'être au départ sur la première ligne. Pour cela, tu commences par envoyer VK_HOME (36) avec l'attribut Control ajouté.

Mais franchement, la méthode 1 serait la plus pratique. En une seule opération, tu récupères toute la zone. Il te suffit ensuite de faire un ITEM_ADD de la chaîne récupérée dans un MEMO et tu retrouves ton texte, avec toutes les lignes à la bonne place.



Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Envoi de touches à une application. Empty
MessageSujet: Re: Envoi de touches à une application.   Envoi de touches à une application. Empty

Revenir en haut Aller en bas
 
Envoi de touches à une application.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème d'envoi de touches à une application.
» Problème lors de l'envoi de touches à une application.
» Problème d'envoi de touches à une fenêtre.
» Codes touches
» Piano à 88 touches

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: