296 lines
12 KiB
VB.net
296 lines
12 KiB
VB.net
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)
|
|
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.FilterProfilesByWindowClipboardRegex(oProfiles, ClipboardContents)
|
|
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 PROFILE_ID = {oProfile.Guid}")
|
|
Dim oDocSearches As DataTable = Database.GetDatatable($"SELECT COUNT_COMMAND FROM TBCW_PROF_DOC_SEARCH WHERE 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
|