Imports System.Drawing.Printing Imports System.Windows.Forms Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6 Imports System.IO Imports System.Data Public Class frmPrinterSettings Dim LogoTray As Integer = 0 Dim NormalTray As Integer = 0 Dim ManualTray As Integer = 0 Dim EnvelopeTray As Integer = 0 Dim Filepath As String = "" Dim OnInit As Boolean = True Sub New(ByRef a_wdapp As Object, ByVal params As String) InitializeComponent() Me.Filepath = params End Sub Private Sub frmPrinterSettings_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim Selindex As Integer = 0 Dim i As Integer = 0 For Each p As String In PrinterSettings.InstalledPrinters Dim tn As New treenode tn.Text = p tn.ImageIndex = 1 tn.SelectedImageIndex = 1 tn.StateImageIndex = 1 '20170711 - SHU Dim ConfigFilename As String ConfigFilename = Get_ConfigFilename(p) 'If File.Exists(Filepath + "\" + p.Replace("\", "@") + ".cfg") Then If File.Exists(Filepath + "\" + ConfigFilename) Then tn.ImageIndex = 0 tn.SelectedImageIndex = 0 tn.StateImageIndex = 0 End If Me.tvPrinters.Nodes.Add(tn) Me.tvPrinters.SelectedNode = tvPrinters.Nodes(i) i = i + 1 Next Me.SortNodes(Me.tvPrinters.Nodes) Me.tvPrinters.Nodes.Find(DefaultPrinterName, True) Me.OnInit = False For Each t As TreeNode In Me.tvPrinters.Nodes If t.Text = DefaultPrinterName() Then Me.tvPrinters.SelectedNode = t Next Me.tvPrinters.Focus() End Sub Public Sub SortNodes(ByVal NodesCollection As System.Windows.Forms.TreeNodeCollection, _ Optional ByVal Ascending As Boolean = True) Dim node1, node2 As System.Windows.Forms.TreeNode Dim iTn1, iTn2 As Integer Dim k As Integer Dim iCompareResult As Integer ' Alle Knoten durchwandern For i As Integer = 0 To NodesCollection.Count k = NodesCollection.Count Do While k > i k -= 1 ' Je zwei Nodes ermitteln und Texte vergleichen node1 = NodesCollection(i) node2 = NodesCollection(k) Console.WriteLine(node1.Text & ", " & node2.Text) iCompareResult = node1.Text.CompareTo(node2.Text) ' Falls die Sortierung nicht dem übergebenen Sortierkriterium entspricht: If (Ascending = True And iCompareResult > 0) _ OrElse _ (Ascending = False And iCompareResult < 0) Then ' Nodes austauschen With NodesCollection .Remove(node1) .Remove(node2) .Insert(i, node2) .Insert(k, node1) End With End If Loop Next End Sub Public Shared Function DefaultPrinterName() As String Dim oPS As New System.Drawing.Printing.PrinterSettings Try DefaultPrinterName = oPS.PrinterName Catch ex As System.Exception DefaultPrinterName = "" Finally oPS = Nothing End Try End Function Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click LogoTray = Me.lblLogoTray.SelectedValue NormalTray = Me.lblNormalTray.SelectedValue ManualTray = Me.lblManualTray.SelectedValue EnvelopeTray = Me.lblEnvelopeTray.SelectedValue SaveSettings() Me.tvPrinters.SelectedNode.ImageIndex = 0 Me.tvPrinters.SelectedNode.SelectedImageIndex = 0 Me.tvPrinters.SelectedNode.StateImageIndex = 0 Exit Sub End Sub Private Sub SaveSettings() If Not System.IO.Directory.Exists(Filepath) Then Me.Create_Folders(Filepath) '20170724 Dim ConfigFilename As String = "" ConfigFilename = Get_ConfigFilename(Me.tvPrinters.SelectedNode.Text) FileOpen(1, Filepath + "\" + ConfigFilename, OpenMode.Output) 'FileOpen(1, Filepath + "\" + Me.tvPrinters.SelectedNode.Text.Replace("\", "@") + ".cfg", OpenMode.Output) '20170724-Ende WriteLine(1, LogoTray) WriteLine(1, NormalTray) WriteLine(1, ManualTray) WriteLine(1, EnvelopeTray) FileClose(1) End Sub Private Function Get_ConfigFilename(ByVal pname As String) As String Dim i As Integer Dim cfilename As String = pname.Replace("\", "@") + ".cfg" If Microsoft.VisualBasic.Left(cfilename, 2) <> "@@" Then cfilename = pname i = cfilename.IndexOf("(") If i > 0 Then cfilename = cfilename.Substring(0, i - 1) + ".cfg" End If End If Return cfilename End Function Private Sub tvPrinters_AfterSelect(sender As System.Object, e As System.Windows.Forms.TreeViewEventArgs) Handles tvPrinters.AfterSelect If OnInit = True Then Exit Sub Dim s As String Dim i As Integer = 0 PopulatePrinterTray(Me.tvPrinters.SelectedNode.Text) If System.IO.File.Exists(Filepath + "\" + Me.tvPrinters.SelectedNode.Text.Replace("\", "@") + ".cfg") Then FileOpen(1, Filepath + "\" + Me.tvPrinters.SelectedNode.Text.Replace("\", "@") + ".cfg", OpenMode.Input) While Not EOF(1) i = i + 1 Input(1, s) Select Case i Case 1 Me.lblLogoTray.SelectedValue = s Case 2 Me.lblNormalTray.SelectedValue = s Case 3 Me.lblManualTray.SelectedValue = s Case 4 Me.lblEnvelopeTray.SelectedValue = s End Select End While FileClose(1) End If End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Me.Close() End Sub Dim dt As New System.Data.DataTable Dim dt2 As New System.Data.DataTable Dim dt3 As New System.Data.DataTable Dim dt4 As New System.Data.DataTable Private Sub PopulatePrinterTray(ByRef Printer As String) dt.Rows.Clear() dt.Columns.Clear() dt.Columns.Add("RawKind") dt.Columns.Add("Sourcename") Dim pkSource As System.Drawing.Printing.PaperSource Dim printDoc As New System.Drawing.Printing.PrintDocument printDoc.PrinterSettings.PrinterName = Printer For Each pkSource In printDoc.PrinterSettings.PaperSources Dim dr As DataRow dr = dt.NewRow dr.Item(0) = pkSource.RawKind dr.Item(1) = pkSource.SourceName dt.Rows.Add(dr) Next dt2 = dt.Copy dt3 = dt.Copy dt4 = dt.Copy Me.lblLogoTray.DataSource = dt Me.lblLogoTray.ValueMember = "RawKind" Me.lblLogoTray.DisplayMember = "Sourcename" Me.lblEnvelopeTray.DataSource = dt2 Me.lblEnvelopeTray.ValueMember = "RawKind" Me.lblEnvelopeTray.DisplayMember = "Sourcename" Me.lblNormalTray.DataSource = dt3 Me.lblNormalTray.ValueMember = "RawKind" Me.lblNormalTray.DisplayMember = "Sourcename" Me.lblManualTray.DataSource = dt4 Me.lblManualTray.ValueMember = "RawKind" Me.lblManualTray.DisplayMember = "Sourcename" End Sub Private Sub Label2_Click(sender As System.Object, e As System.EventArgs) Handles Label2.Click End Sub Private Sub Label3_Click(sender As System.Object, e As System.EventArgs) Handles Label3.Click End Sub Public Function Create_Folders(ByVal s As String) As Boolean Dim xt(10) As String Dim xti As Integer Dim po As Integer Dim x As String Dim xti1 As Integer Dim i As Long po = InStr(s, "\") xti = 0 While po <> 0 xt(xti) = Microsoft.VisualBasic.Left(s, po - 1) xti = xti + 1 s = Microsoft.VisualBasic.Right(s, Len(s) - (po)) po = InStr(s, "\") End While xt(xti) = s For xti1 = 0 To xti If x <> "" Then x = x & "\" x = x & xt(xti1) If Not FolderExist(x) Then Create_Folder(x) Next Create_Folders = True End Function Public Function Create_Folder(ByVal dn As String) As Boolean Try System.IO.Directory.CreateDirectory(dn) Catch Create_Folder = False End Try End Function Public Function FolderExist(ByVal dn As String) As Boolean Try If System.IO.Directory.Exists(dn) Then FolderExist = True Else FolderExist = False Catch FolderExist = False End Try End Function Public Function Set_Printer_To_Color() As Boolean Dim pr As New Printer Dim ps As New PrinterSettings If ps.SupportsColor = True Then pr.ColorMode = vbPRCMColor 'Else 'pr.ColorMode = vbPRCMMonochrome End If pr = Nothing ps = Nothing End Function Public Function Set_Printer_To_BW() As Boolean Dim pr As New Printer Dim ps As New PrinterSettings If ps.SupportsColor = True Then pr.ColorMode = vbPRCMMonochrome 'Else ' pr.ColorMode = vbPRCMMonochrome End If pr = Nothing ps = Nothing End Function End Class