Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Klafu am 01.07.09 - 15:54:57
-
Hallo,
ich möchte mit einem periodischen Agenten Mails ausdrucken.
Allerdings ist im Betreff ein Schlüsselwort, dass den Drucker bestimmt.
Habt ihr mir einen Tip, wie ich die Drucker je nach Schlüsselwort ansprechen kann?
Die Sufu hat mir ja schon viel Hoffnung genommen, aber ich dacht mal da die meisten Einträge ca. 5 Jahre alt waren frag ich nochmal nach.
Software: Lotus Notes 7.0.3 und Windows XP
Chris
-
Hallo,
Ich habe einam etwas aehnliches gehabt und habe es mittels Windows-API geloest.
Andreas
-
also hier in Version 7.01. geht es auch mit folgendem Code zum Beispiel in einer Ansichts-Aktion. Der Drucker wird direkt übernommen und im Druckdialog angezeigt. Ist der gleiche Effekt, als würde man den Standarddrucker manuell über Start-Einstellungen ändern.
Sub Click(Source As Button)
Dim objScriptingNetwork As Variant
Set objScriptingNetwork = CreateObject("WScript.Network")
objScriptingNetwork.SetDefaultPrinter "\\Druckserver\MZ_13_Fach1"
Set objScriptingNetwork = Nothing
Dim workspace As New NotesUIWorkspace
Dim uiview As NotesUIView
Set uiview = workspace.Currentview
Call uiview.Print
End Sub
Edit: Ob das so auch mit lokalen Druckern geht, kann ich hier nicht testen.
Edit2: Grade beim Admin getestet, es geht auch mit lokalen Druckern.
-
So schön das kleine Script ist, so sehr fordert es doch auf, es um eine Auswahl aus der Liste der für den Benutzer verfügbaren Drucker zu ergänzen.
Die findet man unter HKLM\SOFTWARE\MICROSOFT\Windows NT\Current Version\Print\Printers
als die Einträge, bei denen kein weiterer Wert gesetzt ist (teilweise kaskadiert).
Man kann zwar mit @RegQueryValue bestimmte Schlüssel auslesen, aber wie kommt man an eine Auswahlliste der verfügbaren Drucker ?
Gruß
Norbert
-
Ich habe da etwas gefunden:
http://abeishbabu.blogspot.com/2009/06/listing-available-printers-using-lotus.html
Mit der Kombination der beiden Teile bekommt man eine schöne Benutzerschnittstelle zum Wechseln des Druckers hin.
Gruß
Norbert
-
das von mir heute morgen war nur ein schnelles Beispiel. Die letzten 4 Zeilen hab ich grad so aus der Designerhilfe kopiert. Ich selbst hab so Druck-Geschichten in Notes noch nicht gebraucht.
In Excel und Word bei uns musste ich mir auch die Drucker für die Auswahl über die Api auslesen lassen, da beide Anwendungen über Citrix laufen und sich die Druckerports ständig ändern. Die MS-Office VBA Befehle brachten an dem Punkt nichts.
Habe als Grundlage folgendes Script genommen:
http://www.michael-schwimmer.de/vba009.htm (http://www.michael-schwimmer.de/vba009.htm)
-
Hallo,
ich habe die beiden Teile einmal zusammengefügt - und herausgekommen ist ein kleiner AGent - gestartet aus der Agentenliste mit Ziel KEINES - den man dann in jeder Notes-Applikation einbauen kann, um damit den Defaultprinter zu ermitteln bzw. umzuswitchen:
(Options)
Option Public
Option Declare
(Declarations)
Dim WshNetwork As Variant
Dim wshShell As Variant
Dim WshPrinters As Variant
Dim pArray() As String
Dim iRetValue As Long
Dim DefaultPrinter As String
Dim pCount As Integer
Dim printerAvailable As Boolean
Dim n As Integer
Sub Initialize
Dim ws As New NotesUIWorkspace
' Dim pcount As Integer
' Dim n As Integer
Dim response As Variant
Dim sDefault As String
Set WshNetwork = CreateObject("WScript.Network")
Set WshPrinters = WshNetwork.EnumPrinterConnections()
'count the connected printers
pCount% = 0
For n = 1 To WshPrinters.Count() Step 2
If wshPrinters(n) <> "" Then pCount%=pCount%+1
Next
If pcount%=0 Then Exit Sub ' no Printers found
'collect the names of the connected printers
Redim pArray(pCount%-1) As String
pCount% = 0
For n = 1 To WshPrinters.Count() Step 2
If wshPrinters(n) <> "" Then
pArray(pCount%) = wshPrinters(n)
pCount%=pCount%+1
End If
Next
' Determine the actual Default printer
Set wshShell = CreateObject("WScript.Shell")
sDefault = ""
On Error Resume Next
sDefault = wshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")
sDefault = Left(sDefault ,Instr(sDefault, ",") - 1)
response = ws.Prompt (PROMPT_OKCANCELLIST, _
"Selection of defaultprinter", _
"Select the new defaultprinter. The actual Defaultprinter - if existant - is highlighted", _
sDefault, pArray)
If Isempty (response) Then Exit Sub ' If user presses CANCEL, then exit
WshNetwork.SetDefaultPrinter response
Set WshNetwork = Nothing
Set WshShell = Nothing
End Sub
-
Ah, das ist doch was :) Werde es mal unter Citrix testen, ob es da auch geht.
Edit: Rennt auch unter Citrix. Allerdings werden da auch "leere" Ports zurückgegeben. Naja Citrix halt :)
-
Lieber Demian,
für die Zeile
If wshPrinters(n) <> "" Then
wird man im CITRIX die Prüfung möglicherweise etwas erweitern müssen, aber ich glaube schon, daß man die "leeren Ports" aus der Liste wegbekommt. Aber ich kann das nicht machen, weil ich kein CITRIX habe.
Gruß
Norbert
-
Moin Norbert,
das mit dem rausfiltern ist schon klar. ::) Mich hatte nur mal interessiert, ob er die Drucker über Citrix so findet und da ist mir das aufgefallen. Ich selbst hab zum Glück lokales Notes ;D
-
Danke für euren vielen Antworten und die Scripte.
nur die auswahl sollte im Hintergrund (ohne User) stattfinden.
Aber das sollte ja mit dem script kein großes Problemdarstellen. WshNetwork.SetDefaultPrinter ...
Chris
-
Lieber Chris,
natürlich kann man das Ganze auch in eine Script-Lib stecken, z.B.
Call DefaultPrinterSetzen(textPrinterName As String)
Dann wird der ganze UI-Abfrageteil nur ausgeführt, wenn textPrinterName="" ist.
An einer Stelle muß man da aufpassen: wenn das auch im Backend noch funktionieren soll, dann muß der UI-Teil in einer separaten Subroutine stecken, in der die Variable ws als Variant - und nicht als NOTESUIWORKSPACE - deklariert wird.
Gruß
Norbert
-
Hallo Leute...
Ich hänge mich hier mal an..das obige Script läuft soweit..allerdings bekommt Notes gar nicht mit, wenn ich den Standard-Drucker gewechselt habe und druckt mal vorsichtshalber gar nicht.
Es soll bei uns so laufen, dass bestimmte Mails von verschiedenen Leuten auf einem zentralen Drucker ausgedruckt werden sollen, der aber nicht ihr Standard-Drucker ist.
Aber irgendwie funktioniert das nicht...
Ich habe den Druckernamen fest verdrahtet und versuche dann mit
WshNetwork.SetDefaultPrinter "\\Server\Druckername"
den Drucker umzusetzen. Das anschließende Drucken läuft dann ins leere. Wenn ich Notes dann schließe und mich neu anmelde dann scheint es zu funktionieren...aber eben nicht im laufenden Betrieb.
Liegt das an der Version 6.5 unserer Clients???