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++ Discussion :

Un 'ShellExecute' qui fonctionne sous Windows et Linux


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut Un 'ShellExecute' qui fonctionne sous Windows et Linux
    Bonjour,

    J'ai un programme ecrit en C++ pour Windows qui affiche une barre de pub. La barre elle-meme affiche une banniere GIF, et quand l'utilisateur clique sur la banniere, le programme ouvre le navigateur par defaut qui se connecte a l'adresse attachee a la banniere.

    Ma ligne de code pour ouvrir le navigateur par defaut est simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(NULL,"open",AdresseSite,NULL,NULL,SW_SHOWNORMAL);
    Alors, ca marche tres bien. Et de plus plus la barre de pub a le bon gout de fonctionner a 99% sous Linux par l'intermediaire du logiciel Wine. Le pourcent manquant vient justement de cette commande ShellExecute qui semble ne pas fonctionner. Ma question est donc la suivante: Existe-t-il une autre commande qui permette d'ouvrir le navigateur par defaut et qui soit independante du systeme?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Faut juste installer internet explorer sous wine. Car le programme, ne pourra jamais sortir du contexte de wine.

    Sinon, pour les trucs plus multiplateforme, je dirai, utilisez Qt.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Faut juste installer internet explorer sous wine. Car le programme, ne pourra jamais sortir du contexte de wine.
    Ok, alors ceci m'amene a une autre question. Comment puis-je dans mon programme detecter si Internet Explorer est installe? Car dans le cas contraire mon programme doit se fermer en demandant a l'utilisateur d'installer IE sous wine.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Hul, là c'est de la programmation windows.
    Devrait y avoir une commande je pense ( recherche msdn ). Sinon, voir dans la base de registre ( ce qui serai pas étonnant sous windows ). Sinon, je peux rien dire de plus :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je pense que tu peux tester le retour de ShellExecute/ShellExecuteEx. Voir la doc pour plus d'infos, mais normalement, GetLastError doit te donner une explication en cas d'échec.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    En toute honnêteté, le passage par wine ne me semble pas *vraiment* être la meilleure solution à envisager si tu souhaite faire du multi plateformes...

    Ne serait-ce que parce qu'il y a encore énormément de chances qu'un utilisateur de linux ne dispose absolument pas de wine, et, dans ce cas, tu peux dire adieu à tout ce qui touche de près ou de loin aux possibilités propres à windows (shellExecute en premier, vu que tu en parle, mais, aussi tout le coté graphique, à moins que tu n'utilise Qt ou wxWidget, j'en passe, et de meilleures)

    Bref, j'aurais tendance à dire que, avant de t'inquiéter à la minorité qui pourrait souhaiter faire tourner ton application sous wine, il est sans doute des plus intéressant de faire en sorte qu'elle tourne correctement sous windows, quitte, une fois que ce sera stable de ce point de vue, à essayer de le porter réellement sous linux, mais, comme je l'ai dit, cela risque de passer par la refonte au minimum de toute la partie graphique
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Je me souviens, il y a bien longtemps, j'avais développé une petite application pour Windows.
    Mais le client: "c'est bien mais il faut que ça tourne aussi sous Mac".

    Bon, qu'à cela ne tienne, c'était fait sous Visual C++ 4.0. Et à l'époque il y avait une extension, un cross-compiler pour Mac. Non seulement on pouvait compiler des binaires natifs pour Mac-PowerPC depuis un PC (avec remote debugging fonctionnel), mais en plus on le faisait comme si on était sous Windows. L'API Windows était traduite au runtime en appel ad-hoc pour Mac. Une seule source pour deux plateformes.

    Ça n'existe plus ce genre d'outil ?

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Si on respecte le standard, il existe toujours des cross compilateurs, je te rassure

    Mais dés qu'il est question de travailler avec des threads ou avec des sockets, ou pire, d'accéder à du hardware, cela devient directement beaucoup plus compliqué.

    Tu me dira qu'il existe pthread qui fournit une interface "posix" pour les thread, et qu'il existe de très bonnes bibliothèques (portables, ce qui ne gache rien) pour travailler avec les sockets, mais on s'éloigne dans ce cas fortement de ce qui est fournit "de base" sous windows

    De même, il existe des bibliothèques graphiques (qui en profitent d'ailleurs pour fournir plein d'autres services) portables, comme Qt ou WxWidget, mais, à ma connaissance du moins, les bibliothèques de chez microsoft ne le sont absolument pas.

    La raison tient, essentiellement, au fait que depuis plusieurs années maintenant microsoft tend à tout faire converger vers sont framework .NET.

    Il existe bien un projet, cocoa, je crois qui tente de fournir un semblant de portabilité de ce framework sous linux, mais, la dernière fois que je m'y suis intéressé (cela fait longtemps, je l'avoue), ce n'était pas encore vraiment utilisable en prod

    Et puis, il reste LE problème que je tendais de pointer du doigt: Tant bien même il existerait une fonction (autre que system) similaire à ShellExecute sous windows, la pratique en elle-même a de quoi me rebuter car elle tend à s'appuyer beaucoup trop sur la présence supposée d'un exécutable ou l'autre: Tant que l'exécutable en question sera présent, cela devrait fonctionner plus ou moins correctement, mais, si, un jour, on tombe sur "une des rares machines" sur lesquelles il n'est pas présent, cela coincera séverement
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Et puis, il reste LE problème que je tendais de pointer du doigt: Tant bien même il existerait une fonction (autre que system) similaire à ShellExecute sous windows, la pratique en elle-même a de quoi me rebuter car elle tend à s'appuyer beaucoup trop sur la présence supposée d'un exécutable ou l'autre: Tant que l'exécutable en question sera présent, cela devrait fonctionner plus ou moins correctement, mais, si, un jour, on tombe sur "une des rares machines" sur lesquelles il n'est pas présent, cela coincera séverement
    Tu m'y fais penser avec cette remarque, mais ShellExecute est fait pour lancer l'application enregistrée, si on lui donne un fichier html par exemple. Et il me semble que wine sait lancer un navigateur avec gecko comme moteur dans ce genre de cas. Ça peut être une solution ici.

Discussions similaires

  1. [Débuter] Programme qui fonctionne sous Linux mais qui plante sous Windows 7
    Par p1a2t3 dans le forum Qt Creator
    Réponses: 1
    Dernier message: 22/11/2014, 12h38
  2. [LibreOffice][Tableur] Une macro qui fonctionne sous Linux mais pas sous windows
    Par ludox62 dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 07/01/2014, 21h26
  3. Executer un jar sous Linux qui fonctionne sous Windows ?
    Par grenoult dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/01/2012, 18h11
  4. [Prob] code qui fonctionne sous windows mais pas sous linux
    Par hannibal.76 dans le forum Multimédia
    Réponses: 3
    Dernier message: 07/02/2011, 17h46
  5. Réponses: 5
    Dernier message: 13/04/2009, 23h12

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