Imports System.Threading Imports System.IO Imports System.Globalization Imports DD_LIB_Standards Imports DD_Clipboard_Watcher.ClassConstants Public Class frmStart Dim WithEvents Hotkey As New ClassHotkey(Me) Private WithEvents _Watcher As ClipboardWatcher = ClipboardWatcher.Singleton Public Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. Dim splash As New frmSplash() splash.ShowDialog() If ERROR_INIT <> "INVALID USER" Then Dim cultureInfo As New CultureInfo(USER_LANGUAGE) Thread.CurrentThread.CurrentCulture = cultureInfo Thread.CurrentThread.CurrentUICulture = cultureInfo CultureInfo.DefaultThreadCurrentCulture = cultureInfo CultureInfo.DefaultThreadCurrentUICulture = cultureInfo End If End Sub Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load ClassWindowLocation.LoadFormLocationSize(Me) If ERROR_INIT = "FAILED DBCONNECTION" Or ERROR_INIT = "DATABASE" Then frmConfig_Basic.ShowDialog() End If If Database.DBInitialized = True Then If ERROR_INIT <> "" Then If ERROR_INIT = "NO CLIENT" Then MsgBox("You are not related to a client!" & vbNewLine & "Please contact the system administrator!", MsgBoxStyle.Exclamation) Else MsgBox("Sorry Something went wrong in user configuration!" & vbNewLine & "Reason: " & ERROR_INIT & vbNewLine & "Please contact the system administrator!", MsgBoxStyle.Exclamation) End If Exit Sub End If NotifyIconMain.Visible = True ClassInit.Refresh_Profile_Links() ClassInit.Refresh_Connections() Hotkey.AddHotKey(Keys.T, ClassHotkey.ModfierKey.MOD_CONTROL, HOTKEY_TOGGLE_WATCHER) Dim oKeyCode As Keys Dim oConverter As New KeysConverter Dim oObject As Object = oConverter.ConvertFromString(HotkeySearchKey.ToUpper) oKeyCode = CType(oObject, Keys) If HotkeyFunctionKey = HOTKEY_CTRL Then Hotkey.AddHotKey(oKeyCode, ClassHotkey.ModfierKey.MOD_CONTROL, ClassConstants.HOTKEY_TRIGGER_WATCHER) ElseIf HotkeyFunctionKey = HOTKEY_SHIFT Then Hotkey.AddHotKey(oKeyCode, ClassHotkey.ModfierKey.MOD_SHIFT, ClassConstants.HOTKEY_TRIGGER_WATCHER) End If End If labelUser.Text = String.Format(labelUser.Text, USER_USERNAME) labelVersion.Text = String.Format(labelVersion.Text, My.Application.Info.Version.ToString) labelHotkey.Text = String.Format(labelHotkey.Text, $"{HotkeyFunctionKey.ToUpper}+{HotkeySearchKey.ToUpper}") End Sub Private Sub frmMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Logger.Info(">> Logout time: " & Now.ToString, False) If ERROR_INIT = "INVALID USER" Or ERROR_INIT = "NO CLIENT" Then Exit Sub End If Try Dim sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND UPPER(MODULE) = UPPER('Clipboard-Watcher')" Database.ExecuteNonQuery(sql) ClassWindowLocation.SaveFormLocationSize(Me, "") My.Settings.Save() Catch ex As Exception End Try Try Hotkey.RemoveHotKey(ClassConstants.HOTKEY_TOGGLE_WATCHER) Hotkey.RemoveHotKey(ClassConstants.HOTKEY_TRIGGER_WATCHER) Catch ex As Exception Logger.Error(ex) Logger.Warn("Hotkeys could not be removed") End Try 'TempDateien löschen For Each oFile In TEMP_FILES Try File.Delete(oFile) Catch ex As Exception Logger.Warn("Temp file {0} could not be deleted", oFile) Logger.Error(ex) End Try Next End Sub Private Sub frmClipboardWatch_Disposed(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Disposed _Watcher.Dispose() End Sub Private Sub WatcherChanged_New(ByVal sender As Object, ByVal e As EventArgs) Handles _Watcher.Changed If MONITORING_ACTIVE = False Then NotifyIconMain.ShowBalloonTip(20000, "Clipboard Watcher", "Clipboard-watcher is inactive.", ToolTipIcon.Info) Exit Sub End If If DT_USER_PROFILES Is Nothing OrElse DT_USER_PROFILES.Rows.Count = 0 Then Exit Sub End If Dim oWindowInfo = ClassWindowAPI.GetWindowInfo() Dim ClipboardContents As String = Clipboard.GetText() Dim oProfileFilter As ClassProfileFilter Try oProfileFilter = New ClassProfileFilter(DT_USER_PROFILES, DTPROFILE_REL_WINDOW, DTPROFILE_REL_CONTROL) Catch ex As Exception MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor.") Exit Sub End Try Dim oProfiles = oProfileFilter.Profiles.AsEnumerable() oProfiles = oProfileFilter.FilterProfilesByProcess(oProfiles, oWindowInfo.ProcessName) oProfiles = oProfileFilter.FilterProfilesByClipboardRegex(oProfiles, ClipboardContents) oProfiles = oProfileFilter.FilterWindowsByWindowTitleRegex(oProfiles, oWindowInfo.WindowTitle) oProfiles = oProfileFilter.FilterWindowsByWindowClipboardRegex(oProfiles, ClipboardContents) oProfiles = oProfileFilter.FilterProfilesByFocusedControl(oProfiles) oProfiles = oProfileFilter.RemoveDuplicateProfiles() oProfiles = oProfiles.ToList() CURRENT_MATCHING_PROFILES = oProfiles CURRENT_CLIPBOARD_CONTENTS = ClipboardContents End Sub Private Sub ReceiveHotKey(ByVal HotKeyID As String) Handles Hotkey.HotKeyPressed If HotKeyID = HOTKEY_TRIGGER_WATCHER Then If CURRENT_MATCHING_PROFILES.Count > 0 And MONITORING_ACTIVE = True Then CHECK_PROFILE_MATCH() End If ElseIf HotKeyID = HOTKEY_TOGGLE_WATCHER Then Change_Monitoring_State() End If End Sub Sub CHECK_PROFILE_MATCH() Dim oProfiles = CURRENT_MATCHING_PROFILES Dim oInvalidDocumentSQL = False Dim oInvalidDataSQL = False For Each oProfile In oProfiles Dim oDocumentSQL = oProfile.SQLCountDocs Dim oDataSQL = oProfile.SQLCountData Dim oResultDocs As Integer = 0 Dim oResultData As Integer = 0 Dim oDataSearches As DataTable = Database.GetDatatable($"SELECT COUNT_COMMAND FROM TBCW_PROF_DATA_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {oProfile.Guid}") Dim oDocSearches As DataTable = Database.GetDatatable($"SELECT COUNT_COMMAND FROM TBCW_PROF_DOC_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {oProfile.Guid}") For Each oRow As DataRow In oDataSearches.Rows Try Dim oCountCommand = oRow.Item("COUNT_COMMAND") If oCountCommand = String.Empty Then Continue For End If oDataSQL = clsPatterns.ReplaceAllValues(oCountCommand, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_EMAIL, USER_ID, oProfile.Guid) oResultData += Database.NewExecuteScalar(oDataSQL) Catch ex As Exception Logger.Warn("Invalid SQL Query for Counting Data in Profile {0}: {1}", oProfile.Guid, oDataSQL) oInvalidDataSQL = True End Try Next For Each oRow As DataRow In oDocSearches.Rows Try Dim oCountCommand = oRow.Item("COUNT_COMMAND") If oCountCommand = String.Empty Then Continue For End If oDataSQL = clsPatterns.ReplaceAllValues(oCountCommand, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_EMAIL, USER_ID, oProfile.Guid) oResultDocs += Database.NewExecuteScalar(oDataSQL) Catch ex As Exception oInvalidDocumentSQL = True Logger.Warn("Invalid SQL Query for Counting Data in Profile {0}: {1}", oProfile.Guid, oDataSQL) End Try Next oProfile.CountData = oResultData oProfile.CountDocs = oResultDocs Next If oInvalidDocumentSQL Or oInvalidDataSQL Then MsgBox("Ein oder mehrere Abfragen konnten nicht ausgeführt werden. Bitte überprüfen Sie das Log.", MsgBoxStyle.Exclamation, "Warnung") End If Dim oForm As New frmProfileMatch() oForm.ShowDialog() End Sub Sub Change_Monitoring_State() If MONITORING_ACTIVE = True Then NotifyIconMain.ShowBalloonTip(30000, "Clipboard Watcher", "Clipboard-Watcher wurde deaktiviert!", ToolTipIcon.Info) MONITORING_ACTIVE = False Else MONITORING_ACTIVE = True NotifyIconMain.ShowBalloonTip(30000, "Clipboard Watcher", "Clipboard-Watcher wurde wieder aktiviert!", ToolTipIcon.Info) End If End Sub Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown If ERROR_INIT <> "INVALID USER" And LICENSE_COUNT > 0 Then If DT_USER_PROFILES.Rows.Count >= 1 Then Hide() End If Else If USER_IS_ADMIN = True And ERROR_INIT = "NO LICENSE" Then MsgBox("As an admin You have access! Please inform Digital Data to add a valid license!", MsgBoxStyle.Exclamation, "No valid License") Else If Not USER_IS_ADMIN Then MsgBox("Application will close now!", MsgBoxStyle.Critical, "No valid License") Close() End If End If End If If USER_IS_ADMIN = True Then btnAdminConfig.Visible = True End If End Sub Private Sub NotifyIcon1_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIconMain.DoubleClick OpenClose() End Sub Sub OpenClose() If Visible = False Then BringToFront() Visible = True TimerClose.Start() Else Hide() NotifyIconMain.Visible = True End If End Sub Private Sub frmMain_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp If e.KeyCode = Keys.F12 And USER_IS_ADMIN = True Then frmLicense.ShowDialog() End If End Sub Private Sub tsmiChangeState_Click(sender As Object, e As EventArgs) Handles tsmiChangeState.Click If tsmiChangeState.Tag = "stop" Then tsmiChangeState.Tag = "start" tsmiChangeState.Image = My.Resources.control_start_blue tsmiChangeState.Text = "Überwachung Clipboard starten" MONITORING_ACTIVE = False NotifyIconMain.ShowBalloonTip(30000, "Clipboard Watcher", "Clipboard-Watcher wurde inaktiviert!", ToolTipIcon.Info) Else tsmiChangeState.Image = My.Resources.StatusAnnotations_Stop_16xLG tsmiChangeState.Tag = "stop" tsmiChangeState.Text = "Überwachung Clipboard stoppen" MONITORING_ACTIVE = True NotifyIconMain.ShowBalloonTip(30000, "Clipboard Watcher", "Clipboard-Watcher wurde wieder aktiviert!", ToolTipIcon.Info) End If End Sub Private Sub TimerClose_Tick(sender As Object, e As EventArgs) Handles TimerClose.Tick Hide() End Sub Private Sub frmMain_VisibleChanged(sender As Object, e As EventArgs) Handles Me.VisibleChanged If TimerClose.Enabled = True Then TimerClose.Stop() End If End Sub Private Sub MinimierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MinimierenToolStripMenuItem.Click Hide() End Sub Private Sub ClientÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClientÖffnenToolStripMenuItem.Click OpenClose() End Sub Private Sub btnUserConfig_Click(sender As Object, e As EventArgs) Handles btnUserConfig.Click frmConfig_Basic.ShowDialog() End Sub Private Sub btnAdminConfig_Click(sender As Object, e As EventArgs) Handles btnAdminConfig.Click TimerClose.Stop() MONITORING_ACTIVE = False frmAdministration.ShowDialog() TimerClose.Start() MONITORING_ACTIVE = True End Sub End Class