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 :

Shellexecuteex multiple et gestions du/des handle(s)à [Système/Fichiers/API]


Sujet :

C++Builder

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Shellexecuteex multiple et gestions du/des handle(s)à
    Bonsoir,

    J' utilise Shellexecuteex pour imprimer les fichiers pdf que je génère avec mon application.

    Le nombre de ces fichiers est indéterminé.

    La syntaxe pour imprimer chaque fichier est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hwnd = shellexecuteex(... ':print'...)
    j utilise aussi Shellexecuteex pour afficher le dernier fichier génère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hwndo = shellexecuteex(.... 'open'...
    Ce code utilise Acrord32.exe par défaut pour imprimer et afficher.

    Pour une question de performance, je ne veux pas tuer Acrobat après chaque print.

    Mon problème est le suivant :

    Je veux connaître le/les handle de mes appels Acrobat encore actifs pour pouvoir tuer ceux qui restent quand mon programme reprend son cycle d exécution lorsque de nouveaux fichiers sont à traiter.

    J ai parfois plus de 100 appels de shellexecute pour imprimer.
    Quel est le handle à utiliser pour tuer les tâches d impression et celle de visu du dernier pdf ?

    Merci pour votre aide.

    Nb: mon code actuel est en vba mais je vais le reconstruire en c++
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Pourquoi ne pas plutôt utiliser l'activeX installé (il faut juste gérer un GUID différent selon la version 7 à X)
    Comme par exemple AcroPDFLib.ocx ou AcroPDF.dll
    Ainsi cela ne chargera le programme qu'une seule fois et tu pourras faire de l'impression en masse

    Je ne pige pas trop l’intérêt d'imprimer des PDF existants en masse !
    Pour ma part, j'ai plutôt faire l'inverse au lieu d'imprimer sur Papier je générais un PDF qui était archivé !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Si tu tiens vraiment à lancer des process Acrobat en pagaille (plutôt que d'utiliser l'ActiveX comme le suggère ShaiLeTroll), regardes du côté de CreateProcess... Tu va récupérer facilement le handle du process créé.

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Explications
    Bonjour à tous les 2 et merci pour vos réponses.

    @ShaiLeTroll :
    Je ne pige pas trop l’intérêt d'imprimer des PDF existants en masse !
    C'est la demande de la production. Il faut produire des fiches de production qui s'impriment en Duplex (caractéristiques en face, plan au dos).

    1)Le systeme central produit un fichier type xml qui contient toute les données et variables.

    2)Via le software Bartender je produits une fiche simple face en Postscript en utiilisant une imprimante Gratuite PDF (CutePDF)

    3) Via Ghostscript je convertit le Postscript en PDF

    4) Ensuite je fusionne la fiche avec le plan dans 1 seul PDF (PDFTK)

    5) Je stocke les PDF produits sur le systeme central mais ILS VEULENT ABSOLUMENT l'impression Duplex, d'ou l'appel à ShellExecuteEx pour imprimer.

    @Tous les 2 :

    J'ai choisi ShellExecuteEx car mon code est encore en VBA et prévu en C++ bientôt et en VBA les ActiveX Acrobat sont totalement instables.

    J'ai commence à stocker les différents Handle produits pour essayer de comprendre celui de quelle fenêtre je dois utiliser pour tuer le tache unique active (malgré les multiples appels).

    -----EDIT-----------------

    Cela semble simple en fait. Le programme se ferme en utilisant pour ce faire le Handle récupéré au premier appel de ShellExecuteEx

    Je vérifie et finalise.

    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
    21
    ' ***********************************************************
    ' *
    ' * Ferme un programme à partir du hWnd de sa fenêtre.
    ' *
    ' ***********************************************************
     
    Public Function CloseProgram(hWnd As Long) As Boolean
        Dim lExitCode As Long
     
        If hWnd = 0 Then
            Exit Function
        End If
     
        On Error Resume Next
        CloseProgram = CBool(TerminateProcess(hWnd, lExitCode))
     
        CloseHandle hWnd
        DoEvents
        Sleep (100)
     
    End Function
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

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

Discussions similaires

  1. Problème gestion des handles axes
    Par sjunod dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 13/07/2010, 13h42
  2. Gestion des handles
    Par ontheroadagain dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 11/06/2009, 14h34
  3. Réponses: 8
    Dernier message: 15/10/2006, 18h45
  4. Gestion approfondie des utilisateurs
    Par Lux interior dans le forum XMLRAD
    Réponses: 11
    Dernier message: 04/03/2003, 21h43

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