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 :

[C#/Excel] Comment retrouver sur quel réseau se trouve l'imprimante ?


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut [C#/Excel] Comment retrouver sur quel réseau se trouve l'imprimante ?
    Bonjour à toutes et à tous !

    Dans mon application, je dois lister les imprimantes installées sur le poste où elles sont installées et choisir l'une d'entre elles pour imprimer un document Excel.

    Je n'ai pas de problème pour lister les imprimantes avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                string imprimantesInstallees = "" ;
     
                for (int i=0 ; i < PrinterSettings.InstalledPrinters.Count ; i++)
                    imprimantesInstallees += PrinterSettings.InstalledPrinters[i] + "
     " + PrinterSettings. + "\n" ;
    La liste des imprimantes apparaît ainsi :
    Citation Envoyé par Console
    \\serveurImpression1\FieryRezPS
    \\serveurImpression1\MY10001
    \\serveurImpression1\SC10002
    \\serveurImpression2\Fiery2ePS
    \\serveurImpression2\MY20001
    \\serveurImpression2\MY20041PCL
    \\serveurImpression2\MY20041PS
    \\serveurImpression2\SC20001
    Acrobat PDFWriter
    Acrobat Distiller
    Alors que dans Excel, lorsque j'enregistre une macro, le nom de l'imprimante choisie apparaît ainsi :
    Citation Envoyé par VBA Excel
    Application.ActivePrinter = "\\serveurImpression1\SC20001 sur Ne08:"
    Evidemment, si je ne mets pas la partie "sur Ne08:" lorsque j'essaie d'imprimer via mon code, cela ne fonctionne pas.

    Comment puis-je faire pour retrouver sur quel réseau se trouve l'imprimante :

    Bonne journée

    A plus

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Salut Neguib,

    je te remercie pour ta réponse.

    Pour faire plus simple qu'accéder à un annuaire, saurais-tu s'il est possible d'obtenir les printerInfo avec .Net ?

    A plus

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Je sais pas trop as-tu fouillé les Membres de PrinterSettings
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Ce n'est pas grave.

    J'ai effectivement fouillé les membres de la classe PrinterSettings et il apparaît qu'elle ne fournit que les éléments que tu peux trouver dans une boîte de dialogue "Imprimer" classique.

    Je vais essayer de faire autrement.

    Merci

  6. #6
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Citation Envoyé par neguib
    En fait, je croyais que cela ne serait pas trop grave, mais j'ai l'impression que la partie "sur Ne01:" change dynamiquement (par exemple, cela peut être une fois "sur Ne05:", une autre fois "sur Ne08:").
    Je ne peux de ce fait pas inscrire cette partie en dur dans mon code...

    Si je comprends bien, à l'aide de l'annuaire, je vais pouvoir déterminer sur quel réseau se trouve mon imprimante, est-ce correct :

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Kcirtap
    Citation Envoyé par neguib
    En fait, je croyais que cela ne serait pas trop grave, mais j'ai l'impression que la partie "sur Ne01:" change dynamiquement (par exemple, cela peut être une fois "sur Ne05:", une autre fois "sur Ne08:").
    Je ne peux de ce fait pas inscrire cette partie en dur dans mon code...

    Si je comprends bien, à l'aide de l'annuaire, je vais pouvoir déterminer sur quel réseau se trouve mon imprimante, est-ce correct :
    Bonjour Kcirtap

    j'ai exactement le meme problème que toi, et je ne trouve pas de solution, merci de me prevenir si tu trouve un moyen.

  8. #8
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Salut,

    j'ai un début de solution.

    Celle-ci ne se base pas sur ActiveDirectory, mais sur le registre de Windows.

    Dans la clef
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
    je trouve une liste de valeur de toutes les imprimantes installées sur le poste de travail sur lequel je me trouve.

    Pour chaque valeur, le nom correspond à celui de l'imprimante, et dans la valeur, tu retrouves
    Je pense que cela peut être une piste, mais je ne peux pas te dire si cette solution est vraiement valable.

    Par contre, pourrais-tu me confirmer que tu retrouves les imprimantes installées sur ton poste dans la même clef :

    A plus

    Patrick

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Kcirtap
    Par contre, pourrais-tu me confirmer que tu retrouves les imprimantes installées sur ton poste dans la même clef :
    oui
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  10. #10
    Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Euréka
    Bonjour,

    En cherchant un peu partout sur le net, j'ai trouvé un bout de code, qui m'a permis de trouver une solution à mon problème .

    Une 1 ere Macro te permet de connaitre le nom de tes imprimantes en reseau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Sub NomImprimanteReseau()
      Dim Msg As String
      With CreateObject("WScript.Network").EnumPrinterConnections
        For iCount = 0 To .Count - 1 Step 2
          Msg = Msg & .Item(iCount + 1) & " sur port: " & .Item(iCount) & vbLf
        Next
      End With
      MsgBox Msg
    End Sub
    Une deuxieme macro te permet d'imprimer sur chacune d'elle
    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
     
    Sub DefaultPrinter()
      With CreateObject("WScript.Network")
     
        .SetDefaultPrinter "4039 PS" 'sur port: 192.1.20.42:LPT1"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
     
        .SetDefaultPrinter "OPT-S16" 'sur port: 192.1.20.44:LPT1"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
     
        .SetDefaultPrinter "LEX-CONTREMAITRE" ' sur port 192.1.20.32:LPT1:"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
     
      End With
    End Sub
    J'ai supprimé la réference du port et voila.
    Enfin, ça marche pour moi, et j'espere que pour toi aussi.

    @++++

  11. #11
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    En fait, j'ai trouvé LA solution à mon problème.

    Comme j'utilise Excel et que l'application tourne en arrière plan, il y a moyen de n'afficher que la boîte de dialogue "Imprimer" d'Excel.

    Voici le code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    using Excel ;
     
    xlApplication = new Excel.ApplicationClass() ;
     
    // ouverture du fichier Excel
    xlApplication.Workbooks.Open(@"c:\test.xls",
        2,
        true,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing,
        oMissing) ;
     
    // affichage de la boîte de dialogue Imprimer d'Excel
    xlApplication.Application.Dialogs.get_Item
    (XlBuiltInDialog.xlDialogPrint).Show(Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing,
        Type.Missing) ;
    A noter que ce code fonctionne même lorsque l'application Excel n'est pas visible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xlApplication.Visible = false ;
    En espérant que cela puisse servir à d'autres.

    Bonne fin de semaine à tous

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

Discussions similaires

  1. Comment connaître sur quel port ouvert sur ma machine?
    Par sebac dans le forum Général Java
    Réponses: 5
    Dernier message: 23/12/2009, 14h41
  2. Comment savoir sur quel bouton on a cliqué ?
    Par sarah65536 dans le forum Langage
    Réponses: 10
    Dernier message: 26/06/2009, 18h25
  3. Comment savoir sur quel StringItem je refere...
    Par white-rabbit dans le forum Java ME
    Réponses: 6
    Dernier message: 16/03/2006, 19h11
  4. [WinForms]comment savoir sur quel bouton j'ai cliqué?
    Par bossun dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 14/03/2006, 14h18
  5. [C#] Comment savoir sur quel onglet on est ds 1 TabControl ?
    Par Gonat dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/10/2005, 23h17

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