Comment contrôlez-vous le plateau de l'imprimante sélection d'imprimante dans Windows
Nous avons besoin pour être en mesure de modifier la valeur par défaut sélectionnée plateau d'impression d'une imprimante donnée. Quelqu'un aurait-VC++/win32 code pour faire cela?
En cas de questions, je crois que nous avons de changer le réglage par défaut de l'imprimante. Nos travaux d'impression sont exécutées par une application autre que la nôtre, nous ne pouvons pas faire ces sortes de modifications dans le cadre d'une opération d'impression provenant de l'intérieur de notre application. Sauf s'il existe un moyen de modifier les paramètres d'impression par défaut dans une autre application, je pense que nous sommes coincés modification de l'utilisateur par défaut pour l'imprimante, mettre en œuvre notre travail d'impression, puis en réglant les paramètres par défaut en arrière à l'original des valeurs.
Nous aimerions vraiment préfèrent avoir les valeurs par défaut de changement pour l'utilisateur courant, et ne pas nécessiter une élévation, etc...
Je soupçonne qu'il va utiliser quelque chose de similaire à ce qui est indiqué dans cet article MSDN, et impliquent la définition des champs de la structure DEVMODE (dmDefaultSource ou dmFormName ou les deux).
Tout preneurs? Ou est-ce quelqu'un avez des astuces à partager?
EDIT: Voici un lien pour DEVMODE documentation DEVMODE documentation
EDIT: je tiens également à souligner que nous sommes à la recherche d'une solution générale - pas quelque chose de spécifique à une imprimante particulière (nous déployer dans de nombreux, de nombreux environnements)
OriginalL'auteur Kevin Day | 2008-10-03
Vous devez vous connecter pour publier un commentaire.
FYI - la solution que nous avons à la liquidation de l'aide est de capturer la structure DEVMODE. Nous avons un petit win32 application qui présente la boîte de dialogue paramètres de l'imprimante (via DocumentProperties avec fMode ensemble de DM_IN_PROMPT). La résultante DEVMODE est ensuite enregistré sur le disque. Lorsque nous faisons de notre impression, que l'on capture le courant DEVMODE, définir la stockées DEVMODE, de lancer l'impression, puis restaurer l'original DEVMODE.
Cela fonctionne assez bien. Parfois, les pilotes d'impression sera mise à jour et la cause de la stockées DEVMODE casser, mais ça n'arrive pas très souvent et c'est assez facile pour les utilisateurs à corriger.
Comme un bonus supplémentaire, cette approche nous permet de saisir TOUS les paramètres de l'imprimante (pas seulement le bac de sortie) - nous avons donc été en mesure de soutenir les paramètres avancés tels que l'agrafage, assemblage, etc...
Astuce: Si vous essayez cela, assurez-vous d'écrire sur le disque en tant que fichier binaire du flux de sortie. Dans mon évaluation initiale de cette approche, j'ai accidentellement mis le flux de sortie comme un texte de flux de sortie. Les choses fonctionnent très bien pour de nombreux cas, puis, soudain, une pause pour certaines imprimantes (qui s'est servi de l'ordre des octets dans leur structure DEVMODE données privées). Un idiot, mais facile, erreur d'en faire - et celui qui a pris une très belle solution de la table pendant un certain temps.
Assurez - vous d'utiliser DocumentProperties avec une valeur différente pour fMode
Ce lien a plus de description et des exemples de code C#. nicolas.piasecki.nom/blog/2008/11/...
OriginalL'auteur Kevin Day
La configuration des fonctionnalités comme cela peut être difficile, surtout si le pilote n'a pas suivi de Microsoft imprimer des lignes directrices. Cela étant dit, nous avons eu un certain succès avec le Système.De dessin.De l'impression.PrinterSettings. Vous pouvez définir PaperSource mais je ne suis pas sûr que vous pouvez définir les valeurs par défaut.
Si vous n'avez pas vu cet exemple, vous voudrez peut-être chercher plus loin. Il décrit une méthode pour stocker et recharger les paramètres de l'imprimante. Un de mes gars a dit qu'il m':
PrinterSettings Évolution, de Stockage et de Chargement des Paramètres de l'Imprimante
Une autre méthode, qui pourraient travailler, mais pourrait ne pas fonctionner pour vous, est de déterminer votre la poignée de réglages dont vous avez besoin. Installer une imprimante avec chacun d'eux (c'est à dire: le Bac 1, Bac 2) les configurations. Ensuite, il suffit de changer la valeur par défaut de l'imprimante lors de l'impression. Pas ce que vous cherchez, mais il peut aider.
Ce que nous avons généralement le faire dans ces situations est la 3ème partie de l'app écrire les données dans un dossier que nous suivons, nous avons ensuite chercher le fichier et analyser le Postscript ou PCL nous-mêmes et de changer le bac à papier et l'envoyer ensuite sur le périphérique de destination. Beaucoup plus simple qu'il peut paraître.
OriginalL'auteur Douglas Anderson
dmDefaultSource contrôle le plateau. Malheureusement, les valeurs que vous souhaitez définir cela diffère en fonction de votre pilote comme c'est un numéro de bin et pas nécessairement le même nombre que le plateau de# imprimés sur votre imprimante.
Le lien suivant fournit certaines VB6 code pour rassembler des informations sur vos imprimantes plateau/bin affectations. Vous pouvez utiliser cette information pour en programmant attribuer dmDefaultSource approprié bin # pour un plateau. En gros, vous avez besoin d'utiliser DeviceCapabilities pour retourner des informations à propos de vos imprimantes, puis rechercher une chaîne de caractères (comme "le Bac 1") pour obtenir la corbeille de nombre.
http://support.microsoft.com/kb/194789
OriginalL'auteur Stimy
Que j'avais à faire quelque chose de très similaire récemment sur un pilote d'imprimante spécifique et il a fallu un fournisseur SDK spécifique. Le bac ne semble pas apparaître dans DEVMODE ou l'un des autres PRINTINFO_* des structures, donc je suppose que je devrais déposer un e-mail à l'imprimante vendeur.
En dernier recours, je peux penser à deux hacks. L'un est d'automatiser le pilote à GUI de niveau à l'aide d'un script d'outil tel que AutoIT. La deuxième est de vider le registre de fichier, modifiez le paramètre de pilote, de vider le registre de nouveau, et de comparer les différences (peut ou peut ne pas fonctionner).
OriginalL'auteur SmacL
Autant que je sache, les imprimantes sont contrôlés par le pilote de l'imprimante par l'envoi de SNMP ou commandes PJL. Mais pas toutes les imprimantes de mettre en œuvre complètement ces ensembles de commandes.
Pour les imprimantes HP que j'ai trouvé à: http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=bpl07282&jumpid=reg_R1002_USEN certaines commandes PJL (il y a quelques liées à la zone de notification).
Je ne suis pas sûr que cela aide, mais le prendre comme un indice pour de futures recherches...
OriginalL'auteur Citrone