From 97c628dfabdae5337483008f6a181ba3f8f35184 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 14:50:25 +0200 Subject: [PATCH 1/6] fix group filtering while importing users --- .../frmADImport_Users.Designer.vb | 12 +++++ .../DDUserManager/frmADImport_Users.vb | 44 ++++++++++++------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/DDUserManager/DDUserManager/frmADImport_Users.Designer.vb b/DDUserManager/DDUserManager/frmADImport_Users.Designer.vb index 9a31e8d..ea52632 100644 --- a/DDUserManager/DDUserManager/frmADImport_Users.Designer.vb +++ b/DDUserManager/DDUserManager/frmADImport_Users.Designer.vb @@ -37,6 +37,7 @@ Partial Class frmADImport_Users Me.colEMAIL = New DevExpress.XtraGrid.Columns.GridColumn() Me.Panel1 = New System.Windows.Forms.Panel() Me.btnImport = New System.Windows.Forms.Button() + Me.colGroupName = New DevExpress.XtraGrid.Columns.GridColumn() CType(Me.gridAD_Groups, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.viewAD_Groups, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.gridAD_Users, System.ComponentModel.ISupportInitialize).BeginInit() @@ -58,6 +59,7 @@ Partial Class frmADImport_Users ' 'viewAD_Groups ' + Me.viewAD_Groups.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colGroupName}) Me.viewAD_Groups.GridControl = Me.gridAD_Groups Me.viewAD_Groups.Name = "viewAD_Groups" Me.viewAD_Groups.OptionsBehavior.Editable = False @@ -164,6 +166,15 @@ Partial Class frmADImport_Users Me.btnImport.Text = "Import starten" Me.btnImport.UseVisualStyleBackColor = True ' + 'colGroupName + ' + Me.colGroupName.Caption = "Gruppe" + Me.colGroupName.FieldName = "Name" + Me.colGroupName.Name = "colGroupName" + Me.colGroupName.UnboundType = DevExpress.Data.UnboundColumnType.[String] + Me.colGroupName.Visible = True + Me.colGroupName.VisibleIndex = 0 + ' 'frmADImport_Users ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -199,4 +210,5 @@ Partial Class frmADImport_Users Friend WithEvents colSELECTED As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents btnImport As Button Friend WithEvents Panel1 As Panel + Friend WithEvents colGroupName As DevExpress.XtraGrid.Columns.GridColumn End Class diff --git a/DDUserManager/DDUserManager/frmADImport_Users.vb b/DDUserManager/DDUserManager/frmADImport_Users.vb index e93fc28..a6d3b04 100644 --- a/DDUserManager/DDUserManager/frmADImport_Users.vb +++ b/DDUserManager/DDUserManager/frmADImport_Users.vb @@ -18,7 +18,8 @@ Public Class frmADImport_Users Dim oGroups = activeDirectory.ListGroups(MyConfig.Config.AdGroupFilter) - gridAD_Groups.DataSource = oGroups.Select(Function(g) g.SAMAccountName) + 'gridAD_Groups.DataSource = oGroups.Select(Function(g) g.SAMAccountName) + gridAD_Groups.DataSource = oGroups viewAD_Groups.Columns.Item(0).Caption = "Gruppe" Catch ex As Exception logger.Error(ex, $"Error while loading initial groups") @@ -27,29 +28,38 @@ Public Class frmADImport_Users End Sub Private Sub gridADGroups_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles viewAD_Groups.FocusedRowChanged - Dim groupName As String = viewAD_Groups.GetRow(e.FocusedRowHandle) + Dim oGroup As ADGroup = Nothing Try - Dim oUsers = activeDirectory.ListUsers(groupName, MyConfig.Config.AdUserFilter) + oGroup = viewAD_Groups.GetRow(e.FocusedRowHandle) + Catch ex As Exception + logger.Error(ex, $"Error while loading focused group") + MsgBox($"Error while loading focused group", MsgBoxStyle.Critical, Text) + End Try - UserDataSet.TBLOCAL_ADUSERS.Clear() + If Not IsNothing(oGroup) Then + Try + Dim oUsers = activeDirectory.ListUsers(oGroup.Name, MyConfig.Config.AdUserFilter) - For Each user As ADUser In oUsers - Dim row As TBLOCAL_ADUSERSRow = UserDataSet.TBLOCAL_ADUSERS.NewTBLOCAL_ADUSERSRow() + UserDataSet.TBLOCAL_ADUSERS.Clear() - row.NAME = user.Surname - row.PRENAME = user.GivenName - row.USERNAME = user.samAccountName - row.EMAIL = user.Email + For Each user As ADUser In oUsers + Dim row As TBLOCAL_ADUSERSRow = UserDataSet.TBLOCAL_ADUSERS.NewTBLOCAL_ADUSERSRow() - UserDataSet.TBLOCAL_ADUSERS.AddTBLOCAL_ADUSERSRow(row) - Next + row.NAME = user.Surname + row.PRENAME = user.GivenName + row.USERNAME = user.samAccountName + row.EMAIL = user.Email - TBLOCAL_ADUSERSBindingSource.DataSource = UserDataSet.TBLOCAL_ADUSERS - Catch ex As Exception - logger.Error(ex, $"Error while loading users for group {groupName}") - MsgBox($"Error while loading users for group {groupName}") - End Try + UserDataSet.TBLOCAL_ADUSERS.AddTBLOCAL_ADUSERSRow(row) + Next + + TBLOCAL_ADUSERSBindingSource.DataSource = UserDataSet.TBLOCAL_ADUSERS + Catch ex As Exception + logger.Error(ex, $"Error while loading users for group {oGroup.Name}") + MsgBox($"Error while loading users for group {oGroup.Name}") + End Try + End If End Sub Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click From 75539c686f40f00c9638d5bfff0531210d2a9255 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 14:50:54 +0200 Subject: [PATCH 2/6] fix debug logging and ldap query testing --- DDUserManager/DDUserManager/frmMain.vb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DDUserManager/DDUserManager/frmMain.vb b/DDUserManager/DDUserManager/frmMain.vb index 6ffd9a0..7d17043 100644 --- a/DDUserManager/DDUserManager/frmMain.vb +++ b/DDUserManager/DDUserManager/frmMain.vb @@ -40,6 +40,7 @@ Public Class frmMain MyLogger.Info("Starting UserManager v" & CurrentVersion) MyLogger.Info($"Current Username: {Environment.UserName}") + MyLogConfig.Debug = Not MyConfig.Config.LogErrorsOnly If MyConnectionString = "" Then frmConfigDatabase.ShowDialog() @@ -1093,12 +1094,14 @@ Public Class frmMain Dim oActiveDirectory As New ActiveDirectoryInterface(MyLogConfig, ldapPAth) If oActiveDirectory.Authenticate() Then - MsgBox("Verbindung erfolgreich aufgebaut!", MsgBoxStyle.Information) + MsgBox("Verbindung erfolgreich aufgebaut!", MsgBoxStyle.Information, Text) MyConfig.Config.AdRootPath = txtADRootNode.Text MyConfig.Save() MyLogger.Info($"New ActiveDirectory Path saved: {txtADRootNode.Text}") + Else + MsgBox("Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Eingabe!", MsgBoxStyle.Critical, Text) End If End Sub From 1c6114b41e90e0530af442b4f22e87a48437ce6e Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 14:51:14 +0200 Subject: [PATCH 3/6] remove obsolete columns from dataset --- .../DDUserManager/DDUserManager.vbproj.bak | 296 ------------------ .../DDUserManager/UserDataSet.Designer.vb | 26 +- 2 files changed, 13 insertions(+), 309 deletions(-) delete mode 100644 DDUserManager/DDUserManager/DDUserManager.vbproj.bak diff --git a/DDUserManager/DDUserManager/DDUserManager.vbproj.bak b/DDUserManager/DDUserManager/DDUserManager.vbproj.bak deleted file mode 100644 index b824241..0000000 --- a/DDUserManager/DDUserManager/DDUserManager.vbproj.bak +++ /dev/null @@ -1,296 +0,0 @@ - - - - - Debug - AnyCPU - {87122913-C196-46BC-A7CD-27F7E201E55F} - WinExe - DDUserManager.My.MyApplication - DDUserManager - DDUserManager - 512 - WindowsForms - v4.6.1 - true - - - - AnyCPU - true - full - true - true - bin\Debug\ - DDUserManager.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - AnyCPU - pdbonly - false - true - true - bin\Release\ - DDUserManager.xml - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - - - On - - - Binary - - - Off - - - On - - - user.ico - - - - - - - - - - - - ..\..\..\DDMonorepo\Modules.Config\bin\Debug\DigitalData.Modules.Config.dll - - - ..\..\..\DDMonorepo\Modules.Database\bin\Debug\DigitalData.Modules.Database.dll - - - ..\..\..\DDMonorepo\Modules.Filesystem\bin\Debug\DigitalData.Modules.Filesystem.dll - - - ..\..\..\DDMonorepo\Modules.Interfaces\bin\Debug\DigitalData.Modules.Interfaces.dll - - - ..\..\..\DDMonorepo\Modules.Logging\bin\Debug\DigitalData.Modules.Logging.dll - - - - ..\packages\NLog.4.7.2\lib\net45\NLog.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - DS_ChangeS.xsd - - - frmADDebug_Groups.vb - - - Form - - - frmADDebug_Users.vb - - - Form - - - frmConfigDatabase.vb - - - Form - - - frmADImport_Groups.vb - - - Form - - - frmADImport_Users.vb - - - Form - - - Form - - - frmMain.vb - Form - - - - - True - Application.myapp - - - True - True - Resources.resx - - - True - Settings.settings - True - - - - True - True - UserDataSet.xsd - - - UserDataSet.xsd - - - - - frmADDebug_Groups.vb - - - frmADDebug_Users.vb - - - frmConfigDatabase.vb - - - frmADImport_Groups.vb - - - frmADImport_Users.vb - - - frmMain.vb - Designer - - - - VbMyResourcesResXFileCodeGenerator - My.Resources - Designer - Resources.Designer.vb - - - - - DS_ChangeS.xsd - - - Designer - MSDataSetGenerator - DS_ChangeS.Designer.vb - - - DS_ChangeS.xsd - - - MyApplicationCodeGenerator - Application.Designer.vb - - - SettingsSingleFileGenerator - My - Settings.Designer.vb - - - - - UserDataSet.xsd - - - Designer - MSDataSetGenerator - UserDataSet.Designer.vb - - - UserDataSet.xsd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/DDUserManager/DDUserManager/UserDataSet.Designer.vb b/DDUserManager/DDUserManager/UserDataSet.Designer.vb index db8d61a..dae5db5 100644 --- a/DDUserManager/DDUserManager/UserDataSet.Designer.vb +++ b/DDUserManager/DDUserManager/UserDataSet.Designer.vb @@ -10951,12 +10951,12 @@ Namespace UserDataSetTableAdapters Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_GUID", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.Input, 0, 0, "GUID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) Me._adapter.InsertCommand = New Global.System.Data.SqlClient.SqlCommand() Me._adapter.InsertCommand.Connection = Me.Connection - Me._adapter.InsertCommand.CommandText = "INSERT INTO TBDD_USER"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" (PRENAME, NAME, USERNAME, SHORTNA"& _ - "ME, EMAIL, LANGUAGE, COMMENT, DATE_FORMAT, ADDED_WHO)"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"VALUES (@PRENAME,@"& _ - "NAME,@USERNAME,@SHORTNAME,@EMAIL,@LANGUAGE,@COMMENT,@DATE_FORMAT,@ADDED_WHO); "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)& _ - "SELECT GUID, PRENAME, NAME, USERNAME, SHORTNAME, EMAIL, LANGUAGE, GENERAL_VIEWER"& _ - ", COMMENT, WAN_ENVIRONMENT, LOGGED_IN, LOGGED_WHERE, LOG_IN_WHEN, LOG_OUT_WHEN, "& _ - "PM_RIGHT_FILE_DELETE, USERID_FK_INT_ECM, DATE_FORMAT, ADDED_WHO, ADDED_WHEN, CHA"& _ + Me._adapter.InsertCommand.CommandText = "INSERT INTO TBDD_USER" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " (PRENAME, NAME, USERNAME, SHORTNA" & + "ME, EMAIL, LANGUAGE, COMMENT, DATE_FORMAT, ADDED_WHO)" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "VALUES (@PRENAME,@" & + "NAME,@USERNAME,@SHORTNAME,@EMAIL,@LANGUAGE,@COMMENT,@DATE_FORMAT,@ADDED_WHO); " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & + "SELECT GUID, PRENAME, NAME, USERNAME, SHORTNAME, EMAIL, LANGUAGE, GENERAL_VIEWER" & + ", COMMENT, WAN_ENVIRONMENT, " & + "USERID_FK_INT_ECM, DATE_FORMAT, ADDED_WHO, ADDED_WHEN, CHA" & "NGED_WHO, CHANGED_WHEN FROM TBDD_USER WHERE (GUID = SCOPE_IDENTITY())" Me._adapter.InsertCommand.CommandType = Global.System.Data.CommandType.Text Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PRENAME", Global.System.Data.SqlDbType.VarChar, 50, Global.System.Data.ParameterDirection.Input, 0, 0, "PRENAME", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) @@ -10970,13 +10970,13 @@ Namespace UserDataSetTableAdapters Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@ADDED_WHO", Global.System.Data.SqlDbType.VarChar, 50, Global.System.Data.ParameterDirection.Input, 0, 0, "ADDED_WHO", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) Me._adapter.UpdateCommand = New Global.System.Data.SqlClient.SqlCommand() Me._adapter.UpdateCommand.Connection = Me.Connection - Me._adapter.UpdateCommand.CommandText = "UPDATE TBDD_USER"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SET PRENAME = @PRENAME, NAME = @NAME, USER"& _ - "NAME = @USERNAME, SHORTNAME = @SHORTNAME, EMAIL = @EMAIL, LANGUAGE = @LANGUAGE, "& _ - "COMMENT = @COMMENT, DATE_FORMAT = @DATE_FORMAT, "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&" CHANG"& _ - "ED_WHO = @CHANGED_WHO"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"WHERE (GUID = @Original_GUID); "&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT GUID, PREN"& _ - "AME, NAME, USERNAME, SHORTNAME, EMAIL, LANGUAGE, GENERAL_VIEWER, COMMENT, WAN_EN"& _ - "VIRONMENT, LOGGED_IN, LOGGED_WHERE, LOG_IN_WHEN, LOG_OUT_WHEN, PM_RIGHT_FILE_DEL"& _ - "ETE, USERID_FK_INT_ECM, DATE_FORMAT, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED"& _ + Me._adapter.UpdateCommand.CommandText = "UPDATE TBDD_USER" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "SET PRENAME = @PRENAME, NAME = @NAME, USER" & + "NAME = @USERNAME, SHORTNAME = @SHORTNAME, EMAIL = @EMAIL, LANGUAGE = @LANGUAGE, " & + "COMMENT = @COMMENT, DATE_FORMAT = @DATE_FORMAT, " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " CHANG" & + "ED_WHO = @CHANGED_WHO" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "WHERE (GUID = @Original_GUID); " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "SELECT GUID, PREN" & + "AME, NAME, USERNAME, SHORTNAME, EMAIL, LANGUAGE, GENERAL_VIEWER, COMMENT, WAN_EN" & + "VIRONMENT, " & + "USERID_FK_INT_ECM, DATE_FORMAT, ADDED_WHO, ADDED_WHEN, CHANGED_WHO, CHANGED" & "_WHEN FROM TBDD_USER WHERE (GUID = @GUID)" Me._adapter.UpdateCommand.CommandType = Global.System.Data.CommandType.Text Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PRENAME", Global.System.Data.SqlDbType.VarChar, 50, Global.System.Data.ParameterDirection.Input, 0, 0, "PRENAME", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) From 173cbdb49c9721057456b8d46c8d63b6c51303e4 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 16:46:44 +0200 Subject: [PATCH 4/6] Version 1.1.0.0 --- .../DDUserManager/My Project/AssemblyInfo.vb | 2 +- DDUserManager/DDUserManager/frmMain.vb | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb b/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb index cc41fb4..1891267 100644 --- a/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb +++ b/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/DDUserManager/DDUserManager/frmMain.vb b/DDUserManager/DDUserManager/frmMain.vb index 7d17043..207f4c8 100644 --- a/DDUserManager/DDUserManager/frmMain.vb +++ b/DDUserManager/DDUserManager/frmMain.vb @@ -1116,12 +1116,11 @@ Public Class frmMain Dim oActiveDirectory As New ActiveDirectoryInterface(MyLogConfig, MyConfig.Config.AdRootPath) Await Task.Run(Sub() + Dim oAuth = oActiveDirectory.Authenticate() Dim groups = oActiveDirectory.ListGroups(MyConfig.Config.AdGroupFilter) Dim frm As New frmADDebug_Groups() frm.DebugData = groups frm.ShowDialog() - - End Sub) btnDebugGroupQuery.Text = "Abfrage starten" @@ -1158,16 +1157,18 @@ Public Class frmMain End Sub Private Sub BindingNavigatorDeleteItem1_Click(sender As Object, e As EventArgs) Handles BindingNavigatorDeleteItem1.Click - If MessageBox.Show("Wollen Sie die ausgewählte Gruppe löschen? Bestehende Benutzer-Zuordnungen werden entfernt", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then - Try - Validate() - TBDD_GROUPSBindingSource1.EndEdit() - TBDD_GROUPSTableAdapter.Delete(GUIDTextBox1.Text) + Dim oGroupId = GUIDTextBox1.Text + Dim oGroupName = NAMETextBox1.Text + Dim oMessage = String.Format("Wollen sie die Gruppe {0} löschen?", oGroupName) + If MessageBox.Show(oMessage, "Gruppe löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then + Dim osql = $"EXEC PRDD_DELETE_GROUP {oGroupId}" + If MyDatabase.GetScalarValue(osql) = -1 Then + MessageBox.Show("Fehler beim Löschen der Gruppe.", "Gruppe löschen", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Else UpdateSavedLabel() - Catch ex As Exception - ShowErrorMessage($"Error while deleting group", ex) - End Try + LoadData() + End If End If End Sub End Class From 83769ac848e277c7f2e9582b4f770fafb1ed2226 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 17:00:13 +0200 Subject: [PATCH 5/6] fix filter saving for users/groups lol --- DDUserManager/DDUserManager/frmMain.vb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DDUserManager/DDUserManager/frmMain.vb b/DDUserManager/DDUserManager/frmMain.vb index 207f4c8..d0e4ae0 100644 --- a/DDUserManager/DDUserManager/frmMain.vb +++ b/DDUserManager/DDUserManager/frmMain.vb @@ -1145,6 +1145,8 @@ Public Class frmMain Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click, Button4.Click MyConfig.Config.AdUserFilter = txtLDAPUserQuery.Text + MyConfig.Config.AdGroupFilter = txtLDAPGroupQuery.Text + MyConfig.Save() End Sub From f931beccbccbdf25cb1aee5e03cd460d05e8e354 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 2 Oct 2020 17:00:36 +0200 Subject: [PATCH 6/6] Version 1.1.0.1 --- DDUserManager/DDUserManager/My Project/AssemblyInfo.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb b/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb index 1891267..1243bc3 100644 --- a/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb +++ b/DDUserManager/DDUserManager/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - +