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

Windows Discussion :

Cacher un appel de programme externe?


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Cacher un appel de programme externe?
    Bonjour, voila j'ai un petit problème mais je ne sais pas si c'est possible de le résoudre...

    J'ai développer un programme qui fait appel a un programme externe pour la gestion d'envoi sur un port RS232.

    Je fais appel au programme externe comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShellExecute(hwnd,"open","techloader.exe",arguments,NULL,SW_HIDE);
    Le problème est que ce programme m'ouvre une petite fenetre d'envoi au premier plan, ce qui est extrèmement genant car le programme que j'ai développé est prévu pour tourner en tache de fond...

    Existe-t-il un moyen pour forcer l'execution et l'affichage au second plan???
    Ou ne pas l'afficher du tout???
    Existe-t-il un moyen d' "encapsuler" l'exe externe dans mon programme?

  2. #2
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    SW_HIDE n'est pas cencer cacher la fenetre?
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais cela ne fait qu'overrider le premier appel à ShowWindow() du programme lancé, pas les suivants s'il y en a...


    De plus, si jamais c'est un programme console, j'ignore si ça marche ou non...

    En fait, c'est peut-être possible en utilisant CreateProcess() pour l'ouvrir sur un autre desktop...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Le programme n'est pas en console.
    Je vais regarder du coté de CreateProcess merci

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    J'ai essayé comme ceci mais rien n'y fait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    STARTUPINFO StartupInfo;
    PROCESS_INFORMATION ProcessInfo;
    memset(&StartupInfo, 0, sizeof(StartupInfo));
    StartupInfo.cb = sizeof(STARTUPINFO);
    StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow = SW_HIDE;
    
    CreateProcess(NULL, "techloader.exe D:1:Softcam.key", NULL, NULL, FALSE,
                      CREATE_NO_WINDOW, NULL, NULL,&StartupInfo,&ProcessInfo);
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    Le prog ne veux pas s'exécuter entièrement en arrière plan...help!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je parlais de tenter de l'exécuter dans un autre desktop.
    Il y a un champ desktop pour cela dans la STARTUPINFO, mais je ne sais pas moi-même comment le remplir...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    J'ai regardé un peu cette fonction, il faut créer un desktop avec createdesktop et l'attribuer a mon thread avec setthreaddesktop mais bon ca a l'air un peu compliqué et je ne sais pas exactement ce que va faire createdesktop...me créer un nouveau bureau?ni comment l'affichage va se comporter

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, en théorie, le processus devrait se lancer (via la startupinfo) dans un desktop qui n'est pas celui à l'écran, il serait donc totalement invisible.
    Mais je peux aussi complètement faire fausse route...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci c tout a fait ce que je voulais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
         STARTUPINFO StartupInfo;
         PROCESS_INFORMATION ProcessInfo;
         memset(&StartupInfo, 0, sizeof(StartupInfo));
         StartupInfo.cb = sizeof(STARTUPINFO);
         StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
         StartupInfo.wShowWindow = SW_HIDE;
         
         HDESK hDesktop;
         LPCTSTR desktop;
         
         hDesktop = CreateDesktop("desktop", NULL, NULL, 0, GENERIC_ALL, NULL);
         
         //SwitchDesktop(hDesktop);
         StartupInfo.lpDesktop = "desktop";
    
        CreateProcess(NULL, "techloader.exe D:1:Softcam.key", NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL,&StartupInfo,&ProcessInfo);
        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
        CloseDesktop(hDesktop);

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2010, 11h49
  2. Réponses: 8
    Dernier message: 06/03/2008, 12h52
  3. Réponses: 5
    Dernier message: 16/01/2007, 11h07
  4. [Kylix] pb d'appel de programme externe
    Par wizwiz dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2004, 09h29
  5. appel programme externe depuis pl/sql
    Par txouki dans le forum PL/SQL
    Réponses: 6
    Dernier message: 11/05/2004, 18h35

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