FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 13:26

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» mise a jour calculatrice
par papydall Aujourd'hui à 2:01

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 17 Nov 2017 - 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 Fonctions d'envoyer de touches à un objet interne ou externe

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6  Suivant
AuteurMessage
bignono

avatar

Nombre de messages : 1098
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Lun 10 Sep 2012 - 22:51

Bonsoir à tout le monde, Smile
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+ Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1098
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Lun 10 Sep 2012 - 22: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5860
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Lun 10 Sep 2012 - 23:11

Jolie petite astuce
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 11 Sep 2012 - 0:19

Une colle qui n'en ait peut être pas une pour vous... Laughing

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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1098
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 0: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 0: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 0: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.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 1: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.free-boards.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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 1: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 11 Sep 2012 - 1:12

cheers Bravo à tous, <Space> est la bonne touche !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 1: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! Sleep
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 1:20

Allez, fais de doux rêves !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 11 Sep 2012 - 1:24

Bonne nuit Cosmos70 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 11: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.free-boards.net/" +chr$(13)
  res% = dll_call2("SendStringAsText",hnd%,adr(s$))
  pause 1000

  return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 15: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.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 15: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.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 17: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.free-boards.net/" +chr$(13)
  res% = dll_call2("SendStringAsText",hnd%,adr(s$))
  pause 1000

  return
 
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 18: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 21: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.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mar 11 Sep 2012 - 22: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.free-boards.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 - 9:31, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mer 12 Sep 2012 - 1: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.
Revenir en haut Aller en bas
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mer 12 Sep 2012 - 5: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
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mer 12 Sep 2012 - 9: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mer 12 Sep 2012 - 11: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.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Mer 12 Sep 2012 - 11:59

J'ai pris simplement le chemin qui s'affichait avec clic droit/propriétés sur l'icône de Chrome.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   

Revenir en haut Aller en bas
 
Fonctions d'envoyer de touches à un objet interne ou externe
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 5 sur 6Aller à la page : Précédent  1, 2, 3, 4, 5, 6  Suivant
 Sujets similaires
-
» Passer un objet devant les autres (ou derrière)
» Comment envoyer une détection chez avira avec Antivir 9 français - Version Classic
» Récupérer toutes les touches tapées
» Opération sur objet EDIT
» 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 :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: