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

C++Builder Discussion :

Comment exécuter une page web sans ouvrir le navigateur !


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment exécuter une page web sans ouvrir le navigateur !
    Bonjour à tous,

    je souhaiterai exécuter un script php sur un serveur sans ouvrir le navigateur.

    J'ai essayé avec la méthode ShellExecute mais il m'ouvre le navigateur web !

    Et, je suis en train d'essayer avec le composant IdHTTP et sa méthode Post mais j'ai du mal à savoir l'utiliser. J'ai beau chercher de l'aide ou des exemple là dessus mais sans succès.

    Merci d'avance pour vos réponses et à bientôt !

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Si tu souhaite simplement masquer le navigateur, tu peux utiliser le paramètre SW_HIDE avec ShellExecute...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour sat83,

    j'ai essayé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute (NULL, "open" , URL.c_str(), 0, 0, SW_HIDE);
    Mais le navigateur s'ouvre quand même !!!

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Tu pourrais utiliser le composant TCppWebBrowser.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci Crayon,

    j'ai utilisé TWebBrowser et ça fonctionne.

    Par contre, à partir d'une URL où se trouve un fichier .ini, je souhaiterai faire un get avec je pense le composant IdHTTP mais je ne sais pas comment récupérer les infos à l'intérieur sans l'importer sur la machine.

  6. #6
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Je en sais pas si c'est important pour toi, mais je n'ai jamais été capable de dépasser mon proxy avec le composant TIdHTTP. C'est pourquoi j'utilise THttpCli et/ou TSslHttpCli de OverByte: http://www.overbyte.be/frame_index.html

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour à tous,

    j'ai utilisé le composant IdHTTP et j'ai réussi à accéder au fichier ini distant.
    Le soucis est que pour pouvoir lire les infos à l'intérieur, je suis obligé de le rapatrier sur ma machine !

    N'y aurait il pas une méthode pour le lire sans le sauvegarder sur ma machine ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TMemoryStream * Mem = new TMemoryStream();
    IdHTTP_INI->Get(URL_INI, Mem);
    Mem->SaveToFile("fichier.ini");
    delete Mem;

  8. #8
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Tu mets déjà le fichier dans TMemoryStream, pourquoi tu ne mets pas le résultats dans un buffer avec Mem->Write()?

    Je ne sais pas trop les détails de ton fichier, mais voici des fonctions que tu peux utiliser (c'est juste une piste il manque des morceaux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TBytes BytesBuffer;
    AnsiString Buffer;
    Mem->Write(BytesBuffer, XXXX);
    Buffer = BytesToString(BytesBuffer, 0, XXXX, en8Bit);

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci Crayon,

    je planche là dessus.

    Une autre petite question, j'effectue un ping sur un site à l'aide de la commande "system".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("ping -n 1 www.google.fr");
    Comment faire pour faire ceci en tâche de fond ?
    Lorsque j'effectue cette commande, il m'affiche la fenêtre ms-dos l'espace d'une seconde et je souhaiterai qu'elle n'apparaisse pas.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Slt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(0,"","cmd.exe","ping.exe -n 1 www.google.fr >resultat.txt",NULL, SW_HIDE );
    Non ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Salut à tous,

    Cedni, j'ai essayé ta commande ShellExecute mais aucun fichier ne se créé !!!

  12. #12
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Étant donnée que tu utilises déjà Indy, pourquoi tu n'ajoutes pas un composant TIdIcmpClient à ton programme.

    Pour faire le ping tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        IdIcmpClient1->ReceiveTimeout = 1000;
        IdIcmpClient1->Ping("www.google.fr", 0);
    Ensuite dans l'évènement OnReply:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        AnsiString sTime;
        if(AReplyStatus->MsRoundTripTime == 0)
            sTime = "<1";
        else
            sTime = "=";
     
        AnsiString Info;
        Info.sprintf("%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms",
            AReplyStatus->BytesReceived,
            AnsiString(AReplyStatus->FromIpAddress),
            AReplyStatus->SequenceId,
            AReplyStatus->TimeToLive,
            sTime,
            AReplyStatus->MsRoundTripTime);
    Ensuite tu fais ce que tu veux de la String Info.

    Le code est un résumé rapide de Indy9Demos\PingGUI.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci Crayon pour ton aide,

    j'ai testé ce que tu m'as dit avec le composant TIdIcmpClient mais j'obtiens une erreur EidSocketError access denied à l'exécution de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IdIcmpClient1->Ping("www.google.fr", 0);
    Comment ça se fait ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Salut

    Tiens , voilà un code qui va bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TStringList *RequeteCMDTemp = new TStringList();
    RequeteCMDTemp->Add("ping.exe -n 1 www.google.fr >resultat.txt") ;
    RequeteCMDTemp->SaveToFile("ping.bat") ;
    ShellExecute(0,"","ping.bat","",NULL, SW_HIDE );
    ++

  15. #15
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par petitclem Voir le message
    j'obtiens une erreur EidSocketError access denied à l'exécution
    J'ai trouvé ceci dans la doc:
    For Windows NT and Windows 2000, administrator privileges are required to allow TIdICMPClient.Ping to work properly.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour à tous,

    mon problème est résolu, je l'ai solutionné par le composant TTcpClient !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            TcpClient->RemoteHost = "www.google.fr";
    	bool Connexion = TcpClient->Connect();
     
    	if (Connexion == true)
    	{
    		ShellExecute ( [...] );
    	}
    	else
    		ShowMessage ("Erreur Connexion !");

    Encore merci à tous et à bientôt !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/12/2010, 21h54
  2. Réponses: 8
    Dernier message: 05/05/2010, 17h46
  3. Executer une page internet sans ouvrir le navigateur
    Par Tatiana91 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 20/01/2009, 16h17
  4. invoquer une page web sans l'ouvrir
    Par peppena dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2006, 08h45
  5. Comment affciher une page web dans ma feuille MDI
    Par callo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/01/2005, 17h23

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