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 :

Application C/C++ Transparente pour Utilisateur


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut Application C/C++ Transparente pour Utilisateur
    Bonjour,

    J'espère que mon titre est assez clair et que le forum C++ est plus approprié que le C.

    J'explique brièvement ce que je veux faire, en espérant avoir des réponses ou une aide de votre part tant sur la faisabilité de mon projet mais aussi sur les moyens de le faire.

    J'ai une application C/C++ qui se lance via un .exe, rien d'exceptionnel.
    Cependant cette application communique avec une application flash, c'est une sorte de module pour utiliser un périphérique et donc le rendre accessible au véritable programme développé sur Flash.

    Ma question est de savoir si il est possible de transformer ce .exe en un service windows ou quelque chose d'équivalent qui renderait l'application c/c++ transparente pour l'utilisateur. En gros, qu'il n'est pas a lancer le .exe, mais seulement le .swf.

    J'ai pour l'instant l'idée d'un service windows, cependant je ne sais pas comment le développer.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Citation Envoyé par johntayback Voir le message
    Bonjour,
    Ma question est de savoir si il est possible de transformer ce .exe en un service windows
    Oui. Tu as un exemple assez complet dans la FAQ.
    Citation Envoyé par johntayback Voir le message
    ou quelque chose d'équivalent qui renderait l'application c/c++ transparente pour l'utilisateur.
    Une application sans IHM démarrée automatiquement ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut re
    Citation Envoyé par 3DArchi Voir le message
    Une application sans IHM démarrée automatiquement ?
    Oui ! sa serait parfait !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    je peux réaliser ça comment?

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Une application standard mais tu caches la fenêtre principale ou tu n'en créés pas.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    donc pas une application console? et comment démarrer l'application automatiquement?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par johntayback Voir le message
    donc pas une application console?
    Je ne sais pas s'il est possible de démarrer une application console sans affichage de la console.

    Citation Envoyé par johntayback Voir le message
    et comment démarrer l'application automatiquement?
    En l'ajoutant dans "Démarrer/Démarrage" à l'install.
    Mais peut être que le service est le mieux pour toi. L'appli silencieuse est une autre approche. Tout dépend de qui l'utilise, comment elle est déployée et tout et tout.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Au pire, tu utilises FindWindow puis ShowWindow(...,SW_HIDE) pour planquer la fenêtre de la console à l'exécution.

    Par défaut, le titre de la fenêtre devrait être le chemin complet de ton exécutable (cf. GetModuleFileName).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    merci pour vos réponses.
    je vais essayer de le lancer au démarrage et de cacher la fenêtre console.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    J'ai regardé les fonctions ShowWindow et FindWindow, j'ai cependant un petit problème pour utiliser FindWindow.

    Donc si j'ai bien compris je devrais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowWindow(hWnd, SW_HIDE);
    En ce qui concerne le handle (hWnd) je doit le récupérer grâce à FindWindow.
    Mais je ne sais pas comment renseigner les paramètres de cette fonction pour mon application console.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HWND FindWindow(      
        LPCTSTR lpClassName,
        LPCTSTR lpWindowName
    );
    Si vous avez un peu de temps pour m'expliquer.

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    lpClassName : mets NULL.
    lpWindowName : le résultat de GetModuleFileName.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    Voila ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	HWND fenetre;
    	LPTSTR chemin;
    	DWORD taille=4000000;
    	GetModuleFileName(NULL,chemin,taille);
    	fenetre = FindWindow(NULL,chemin);
    	ShowWindow(fenetre, SW_HIDE);
    Par d'erreur de compilation, par contre j'ai une erreur lors de l'exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception de première chance à 0x7c91216c dans cps_project.exe*: 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x50000169.
    Exception de première chance à 0x7c9112b0 dans cps_project.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x50000169.
    Exception non gérée à 0x7c9112b0 dans cps_project.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x50000169.
    Le programme '[3312] cps_project.exe: Natif' s'est arrêté avec le code 0 (0x0).
    Mon problème vient peut être de ma variable "taille", je ne sais pas comment je dois la dimensionner.

    Merci.

  13. #13
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Allouer ton "LPTSTR chemin" ne serait pas une mauvaise idée en soi, ça t'évitera d'aller jardiner n'importe où...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    c'est à dire? je suppose que je ne peux pas faire un simple malloc()?

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    MAX_PATH est là pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const DWORD taille=MAX_PATH;
    TCHAR chemin[taille];
    GetModuleFileName(NULL,chemin,taille);
    HWND fenetre = FindWindow(NULL,chemin);
    ShowWindow(fenetre, SW_HIDE);
    [EDIT] : l'allocation n'est probablement pas nécessaire. Et malheureux, pas de malloc en C++ !

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    merci d'aider un malheureux! comme moi !

  17. #17
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    l'allocation n'est probablement pas nécessaire. Et malheureux, pas de malloc en C++ !
    Allocation au sens large : pas forcément une allocation dynamique, une statique via un TCHAR chemin[MAX_PATH] est amplement suffisante pour ce cas précis...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  18. #18
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Par défaut
    La proposition de 3DArchi est encore bien plus simple: ne pas créer de fenêtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )
    {
    Structure_interprocess           ipc;
    Mon_serveur                      serveur ( ipc );
     
        serveur.run();
     
        return S_OK;
    }
    Il n'y aura aucun parasite de fenêtre nulle part, pas de console ni rien.

  19. #19
    Membre Expert
    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
    Par défaut
    MAX_PATH est là pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const DWORD taille=MAX_PATH;
    TCHAR chemin[taille];
    GetModuleFileName(NULL,chemin,taille);
    HWND fenetre = FindWindow(NULL,chemin);
    ShowWindow(fenetre, SW_HIDE);
    Attention, avec les paths longs unicode, MAX_PATH peut très bien être trop petit --> le path sera tronqué, ça va faire n'importe quoi.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    Citation Envoyé par ac_wingless Voir le message
    Il n'y aura aucun parasite de fenêtre nulle part, pas de console ni rien.
    Pour utiliser ta solution, je dois récréer un projet vide? Pour l'instant, j'ai un projet Console sur Visual Studio.

    En tout cas ta solution m'intéresse car la méthode de la fenêtre invisible fonctionne bien quand je lance le .exe, mais la fenêtre reste affichée quand l'application se lance seule au démarrage.

Discussions similaires

  1. Application pour utilisateurs simultanées
    Par jouclar dans le forum Général Python
    Réponses: 4
    Dernier message: 18/01/2015, 16h30
  2. Réponses: 4
    Dernier message: 06/01/2010, 09h15
  3. Réponses: 4
    Dernier message: 09/06/2009, 14h59
  4. Interface graphique pour utilisateur
    Par Missvan dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 14/02/2005, 09h56
  5. [XSL] Application d'un XSL pour produire un XSL... help
    Par Greedo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/05/2003, 11h30

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