IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

ShellExecute, ouverture page web


Sujet :

Web & réseau Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut ShellExecute, ouverture page web
    Bonjour,

    pour ouvrir et afficher une page web, une application utilise ShellExecute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pch:='http://www.scribd.com/JJacquelin/documents';
         code:=ShellExecute(0,'OPEN',Pch,Nil, Nil, SW_SHOW);
         If (Code<=32) Then ShowMessage(SysErrorMessage(Code));
    La page s'affiche, ce qui demande un certain temps, variable d'un jour à l'autre.
    Lorsque je constate visuellement que l'affichage est bien terminé, je dois cliquer sur un bouton "Lecture" pour lancer un processus qui va chercher certaines données dans cette page. Pas de problème.
    Je voudrais modifier le processus existant pour qu'il s'exécute sans mon intervention. Pour cela, il faudrait que le démarrage de la routine "Lecture" ne soit fait automatiquement qu'après que le processus lancé par ShellExecute soit complètement achevé.
    Je ne sais pas comment détecter par programme si ce processus est encore en cours, ou s'il est terminé.
    Merci par avance pour un conseil ou une indication de document pouvant m'aider à apprendre au moins des rudiments de ce domaine que je ne connais pas du tout.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    ShellExecuteEx utilise un SHELLEXECUTEINFOW à la fois en entrée qu'en sortie comme la valeur de retour hProcess, voir même un hProcessID via GetProcessId
    Après tu as un tas d'API genre EnumWindows, idem pour Thread ou Module

    ShellExecute lance le navigateur préféré de l'utilisateur, IE, FF, GC... difficile à gérer tout ça, souvent le wb ne fait que du dessin sans passer par des controles windows donc on ne peut énumérer les boutons à l'intérieur

    Avec un TWebBrowser tu peux intégrer un mini-IE à ton appli

    lit Saisie automatique dans un formulaire d'un WebBrowser et navigue de lien en lien vers Click dans WebBrowser, cela utilise massivement les interfaces comme IHTMLElement

    Enfin, pense que tu peux directement appeler le bouton "Lecture" en GET ou POST :
    Comment soumettre des informations à un script par la méthode GET ?
    Comment valider un formulaire ne contenant que des données textuelles avec la méthode POST ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Je vais étudier cela, mais à première vue, c'est loin d'être gagné !
    Je crois que je peux contourner ces difficultés, tout bêtement en mettant un timer avec un délais assez long. Mais je voulais profiter de l'occasion pour apprendre quelque chose dans ce domaine. Je n'y renoncerai que si cela s'avère prendre trop de temps.
    En tout cas, merci pour ces indications utiles.

  4. #4
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Au fait, il y a une ambiguité dans la façon dont j'ai posé la question.
    En effet, je n'ai pas clairement dit où le bouton "Lecture" se trouve :
    Il n'est pas sur la page web.
    Il se trouve sur Form1 de l'application qui contient le morceau de code recopié dans mon premier message. Il n'y a donc pas à rechercher ce bouton, ce qui certainement simplifie considérablement le travail.
    Il suffirait donc d'intercaler Lecture.click dans le code après avoir testé que la page web est a bien été obtenue. C'est ce test qui semble difficile à faire.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Cela correspond au OnDocumentComplete du TWebBrowser
    Même lors de cet évènement, les JS ne sont pas encore terminés ce qui peut impacter le InnerHTML
    Sans parler d'un site massivement AJAX dont une page en appel d'autres en cascade

    Il est difficile de savoir dans une application externe si elle a fini de travailler (lire CPU usage ?), ShellExecute lance le programme ensuite, selon le navigateur cela peut fonctionner différemment mais je pense qu'il lance tous un thread pour le téléchargement le page (comme le fait aussi le Navigate2) donc ShellExecute rend la main assez rapidement et il te faut attendre un temps variable selon puissance la machine, encombrement du LAN et du WAN... et de l'age de capitaine

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Très bien ! L'âge du capitaine est connu, mais le reste ne l'étant pas, mieux vaut en rester là.
    En laissant un délai raisonnable, ça devrait quand même marcher tant bien que mal.
    Merci encore pour l'info qui m'évite de perdre mon temps à chercher un solution propre mais introuvable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Ouverture Page Web - Automation Error
    Par Nelmech dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/04/2014, 14h04
  2. X3V5 - Ouverture page web navigateur
    Par g_antoine dans le forum SAGE
    Réponses: 1
    Dernier message: 02/12/2013, 09h35
  3. [Débutant] Ouverture page web complete dans une autre page.
    Par tremblou dans le forum ASP.NET
    Réponses: 0
    Dernier message: 01/05/2012, 21h59
  4. Ouverture pages web et exe + création raccourcis
    Par ananar dans le forum VBScript
    Réponses: 3
    Dernier message: 09/09/2008, 16h44
  5. [FLASH MX] Ouverture page web à la fin de l'animation
    Par claudyyyyy dans le forum Flash
    Réponses: 4
    Dernier message: 26/05/2004, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo