Es kann schwierig sein, dem Drucker das Drucken aus einer ausgewählten Anwendung zu erlauben. Es gibt keinen solchen Mechanismus in Windows, aber Sie können dies irgendwie umgehen. Ich habe welche schmutzige Idee , Sie können mehr darüber nachdenken und vielleicht werden Sie etwas besseres oder weniger komplexes herausfinden.
Sie können Druckerberechtigungen verwalten, einschließlich lokaler Drucker in Windows (seit Windows 2000).
I. Blockieren Sie die Druckberechtigungen für den Gast (oder eine Gruppe von Gästen oder einen anderen Benutzer, der Ihr Programm verwenden soll), um das normale Drucken für dieses Konto / diese Gruppe zu deaktivieren.
- Wechseln Sie zu Geräte und Drucker (in der Systemsteuerung).
- Klicken Sie mit der rechten Maustaste auf den Drucker und wählen Sie "Druckereigenschaften" (nicht nur "Eigenschaften"!).
- Es sollte die Registerkarte Sicherheit geben. Sie können Berechtigungen für Konten und Gruppen verwalten.
- Konfigurieren Sie die Berechtigungen für Ihr Gastkonto (oder für die Gruppe Gäste, es liegt an Ihnen).
II. Bereiten Sie das System und Ihre Anwendung darauf vor, als anderer Benutzer zu drucken
Fügen Sie ein zusätzliches Windows-Konto hinzu, und lassen Sie es drucken. Möglicherweise möchten Sie die normale Anmeldung deaktivieren (ich denke, das Entfernen dieses Benutzers aus der Gruppe Benutzer wird verhindern, dass dieser Benutzer auf dem Anmeldebildschirm angezeigt wird).
Teilen Sie Ihren Drucker (normalerweise wie bei einem Netzwerk)
Verwenden Sie in Ihrer Anwendung eine für Ihre Programmiersprache geeignete Funktion, die Befehlszeilenbefehle ausführt. Für .NET könnte dies System.Diagnostics.Process.Start (Zeichenfolge) sein, in Python os.system (cmd) usw.
net use \\ localhost \ printer_share_name / u: nonguestaccountname nonguestaccountpassowrd "
Dadurch wird Ihr Drucker durch Verwendung von als anderer Benutzer (hoffentlich - sofort) zugeordnet nonguestaccountname
Kontoerlaubnis zum Ausdrucken (Das Drucken wird als anderer Benutzer vorgenommen, den wir zuvor erstellt haben).
- Möglicherweise müssen Sie warten, bis die Druckerzuordnung abgeschlossen ist, bevor Sie versuchen, zu drucken, Fehler zu behandeln usw.
- Behandeln Sie Ihren Druck in der Anwendung
Ausführen:
net use \\ localhost \ printer_share_name / delete
Dadurch wird Ihr Drucker (hoffentlich - sofort) abgemeldet.
Das Ganze sollte weniger als eine Sekunde dauern - während der Benutzer von jeder Anwendung aus drucken konnte, gibt es eine Loch in meiner Idee , aber normale Benutzer werden wahrscheinlich nicht herausfinden, was los ist und es sollte ausreichen, um Papier / Tinte / Toner in der Firma oder etwas zu sparen :)
Mit Netzwerkdruckern - das könnte unzuverlässig, langsam sein und von der LAN-Netzwerkqualität / -Last abhängen, aber wenn Sie lokale Drucker wie Netzwerkdrucker zuordnen, sollte dies sehr schnell funktionieren.
Wie ich bereits schrieb - dies ist eine sehr schmutzige Methode, aber ich habe keine andere Methode als die temporäre Druckerzuordnung als anderer Benutzer herausgefunden. Dies ist nicht 100% zuverlässig und sicher, aber für einige Zwecke können Sie es verwenden.
Alles, was ich oben geschrieben habe, kann mit CMD- oder VBS-Skripts in Ihrem Anwendungsinstallationsprogramm automatisiert werden.
EINE ANDERE METHODE Möglicherweise wird ein Share / Unhare-Drucker ausgeführt, aber Sie benötigen trotzdem ein zusätzliches Windows-Konto.
Zusätzliche tipps:
Drucker über Befehlszeile freigeben
(Ersetzen Sie en-US in path für Ihr Gebietsschema, wenn Sie keine englischen Fenster verwenden.)
Bearbeiten:
Möglicherweise müssen Sie dies unter Vista Basic und XP Home Edition testen. Möglicherweise ist die Benutzeroberfläche für die Berechtigungskontrolle vereinfacht, und einige Funktionen sind ausgeblendet.