Imports System.IO Imports Microsoft.Office.Interop Imports Independentsoft Imports DLLLicenseManager Imports System.Text Public Class frmStart Dim sql_User_Login As String = "UPDATE TBDD_USER SET LOGGED_IN = @LogInOut, LOGGED_WHERE = '@ANGEMELDETWO' WHERE (LOWER(USERNAME) = LOWER('@user'))" Dim sql_UserID As String = "SELECT GUID FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))" Private USER_GUID Private ISUserAdmin As Boolean = False Public _lizenzManager As ClassLicenseManager Dim loaded As Boolean = False Dim WithEvents HotKey As New clsHotkey(Me) Private Sub frmMain_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop ClassDragDrop.Drop_File(e) Check_Dropped_Files() End Sub Private Sub ReceiveHotKey(ByVal HotKeyID As String) Handles HotKey.HotKeyPressed Me.Cursor = Cursors.WaitCursor Me.NotifyIcon1.Visible = True NotifyIcon1.ShowBalloonTip(2000, "Hotkey", "Hotkey wird ausgeführt!", ToolTipIcon.Info) Try 'Die vorherige Tempfile löschen If CURRENT_WD_TEMPSEARCH <> "" Then If My.Computer.FileSystem.FileExists(CURRENT_WD_TEMPSEARCH) Then Try My.Computer.FileSystem.DeleteFile(CURRENT_WD_TEMPSEARCH) Catch ex As Exception End Try End If End If Dim HK1 As String Dim HK2 As String 'Die Hotkeys definieren Dim SQL As String = "SELECT * FROM TBHOTKEYTEMP_USER_HOTKEYS WHERE HOTKEY_ID = " & HotKeyID Dim DTHOTKEYSTEMP As DataTable = ClassDatabase.Return_Datatable(SQL, True) If Not IsNothing(DTHOTKEYSTEMP) Then HK1 = DTHOTKEYSTEMP.Rows(0).Item("HOTKEY1") HK2 = DTHOTKEYSTEMP.Rows(0).Item("HOTKEY2") 'Alle Profile raussuchen die die Tastaturkombination enthalten SQL = "select * from TBHOTKEY_USER_PROFILE where UPPER(HOTKEY1) = UPPER('" & HK1 & "') AND UPPER(HOTKEY2) = UPPER('" & HK2 & "') AND USER_ID = " & CURRENT_USERID Dim DTHOTKEY_PROFILES As DataTable = ClassDatabase.Return_Datatable(SQL, True) Dim Result As String = "" If Not IsNothing(DTHOTKEY_PROFILES) Then For Each row As DataRow In DTHOTKEY_PROFILES.Rows Result = ClassHotkey_Windream.RUN_WD_SEARCH(row.Item("GUID")) Next End If If Result = "" Then Me.NotifyIcon1.Visible = False Else NotifyIcon1.ShowBalloonTip(5000, "Hotkey-Fehler:", Result.ToString, ToolTipIcon.Warning) End If End If Catch ex As Exception MsgBox("Error in ReceiveHotKey: " & ex.Message, MsgBoxStyle.Critical) End Try Me.Cursor = Cursors.Default End Sub Private Sub frmMain_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter Drag_Enter(sender, e) End Sub Sub Drag_Enter(sender As Object, e As DragEventArgs) If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.All Console.WriteLine("DragEnter ...DragDrop") ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then 'handle a message dragged from Outlook e.Effect = DragDropEffects.Copy Console.WriteLine("DragEnter ...OutlookMessage") ElseIf e.Data.GetDataPresent("aryFileGroupDescriptor") AndAlso (e.Data.GetDataPresent("FileContents")) Then e.Effect = DragDropEffects.Copy Console.WriteLine("DragEnter ...Attachment from Outlook") Else 'otherwise, do not handle e.Effect = DragDropEffects.None End If End Sub Sub Check_Dropped_Files() 'Try Me.TopMost = False ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE WORKED = 1 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')") CURRENT_ABBRUCH = 0 Dim i As Integer For Each Str As Object In ClassDragDrop.files_dropped If Not Str Is Nothing Then If LogErrorsOnly = False Then ClassLogger.Add(">> Check Drop-File: " & Str.ToString, False) Dim handleType As String = Str.Substring(0, Str.LastIndexOf("@") + 1) Dim filename As String = Str.Substring(Str.LastIndexOf("@") + 1) If ClassIndexFunctions.FileExistsinDropTable(filename) = False Then ClassFilehandle.Decide_FileHandle(filename, handleType) i += 1 Else Console.WriteLine("File gibt es bereits") End If End If Next Me.TopMost = True Dim sql As String = "SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')" Dim DTFiles As DataTable = ClassDatabase.Return_Datatable(sql, True) If DTFiles.Rows.Count > 1 Then frmIndexFileList.ShowDialog() DTFiles = ClassDatabase.Return_Datatable(sql, True) End If For Each Filerow As DataRow In DTFiles.Rows Dim filestring As String = Filerow.Item("FILENAME2WORK") CURRENT_FILENAME = Filerow.Item("FILENAME2WORK") CURRENT_WORKFILE_GUID = Filerow.Item(0) CURRENT_WORKFILE = Filerow.Item("FILENAME2WORK") If LogErrorsOnly = False Then ClassLogger.Add(">> CURRENT_WORKFILE: " & CURRENT_WORKFILE, False) If File.Exists(CURRENT_WORKFILE) Then Open_IndexDialog() End If Next ''Prüfen ob alle Files abgearbeitet wurden 'Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND HANDLE_TYPE not like '%@FW%' AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')") 'If DT.Rows.Count > 0 Then ' For Each row As DataRow In DT.Rows ' Dim filestring As String = row.Item(1) ' filestring = filestring.Substring(filestring.LastIndexOf("@") + 1) ' Select Case CURRENT_ABBRUCH ' Case 0 ' CURRENT_ABBRUCH = 1 ' Case 1 ' CURRENT_ABBRUCH = 2 ' Case 2 ' CURRENT_ABBRUCH = 0 ' End Select ' If File.Exists(filestring) Then ' MsgBox("Es sind noch Dateien zum Indexieren vorhanden:" & vbNewLine & "Bitte indexieren Sie die folgende Datei vollständig:", MsgBoxStyle.Exclamation) ' CURRENT_WORKFILE = row.Item(1) ' CURRENT_FILENAME = row.Item(1) ' CURRENT_WORKFILE_GUID = row.Item(0) ' Open_IndexDialog() ' Else ' ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE GUID = " & row.Item(0)) ' End If ' Next 'End If 'Catch ex As Exception ' MsgBox("Check_Dropped_Files: " & ex.Message, MsgBoxStyle.Critical) 'End Try End Sub Sub Open_IndexDialog() Try Me.Hide() frmIndex.ShowDialog() Me.Visible = True Me.TopMost = True Me.BringToFront() If File.Exists(CURRENT_FILENAME) Then Select Case CURRENT_ABBRUCH Case 1 MsgBox("Bitte indexieren Sie die Datei vollständig!" & vbNewLine & "(Abbruch 1 des Indexierungsvorgangs)", MsgBoxStyle.Information) Open_IndexDialog() Case 2 Dim result As MsgBoxResult result = MessageBox.Show("Sie brechen nun zum zweiten Mal den Indexierungsvorgang ab!" & vbNewLine & "Wollen Sie die Indexierung aller Dateien abbrechen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", True) CURRENT_ABBRUCH = 0 Exit Sub Else CURRENT_ABBRUCH = 0 End If End Select End If Catch ex As Exception MsgBox("Fehler bei Aufruf Indexdialog: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) Me.Visible = True End Try End Sub Private Sub frmStart_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Try Dim sql = sql_User_Login sql = sql.Replace("@LogInOut", 0) sql = sql.Replace("@ANGEMELDETWO", "''") sql = sql.Replace("@user", Environment.UserName) ClassDatabase.Execute_non_Query(sql) sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE = 'Global-Indexer'" ClassDatabase.Execute_non_Query(sql) ClassWindowLocation.SaveFormLocationSize(Me) Catch ex As Exception End Try Unregister_Hotkeys() End Sub Sub Refresh_Licence() Try Me._lizenzManager = New ClassLicenseManager("#DigitalData35452!#", "") Dim sql As String = "SELECT LICENSEKEY FROM TBGI_CONFIGURATION WHERE GUID = 1" Dim lic As String = ClassDatabase.Execute_Scalar(sql, MyConnectionString) Dim licString = Me._lizenzManager.DecodeLicenseKey(lic) Dim split() = licString.ToString.Split("#") If lic <> "" Then License_Anzahl = split(0) Else License_Anzahl = 0 End If If CDate(split(1)) < CDate(Now.ToShortDateString) Then MsgBox("Ihre Lizenz ist abgelaufen!" & vbNewLine & "Letztes Gültigkeitsdatum: " & split(1) & vbNewLine & "Bitte setzen Sie sich mit Digital Data in Verbindung", MsgBoxStyle.Exclamation) License_Expired = True License_Anzahl = 0 End If 'tslblLicenses.Text = "Anzahl Lizenzen: " & licenseanzahl LicenseProfiles = split(2) Try LicenseHotKey = split(3) Catch ex As Exception LicenseHotKey = 0 End Try Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler bei Licensemanager:") End Try End Sub Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles Me.Load 'Me.TransparencyKey = Color.Transparent ' Me.BackColor = Color.Transparent Try If Environment.UserName.ToLower = "schreiberm" Then AApiToolStripMenuItem.Visible = True Else AApiToolStripMenuItem.Visible = False End If Me.Opacity = 30 ClassWindowLocation.LoadFormLocationSize(Me) Dim sql = sql_UserID sql = sql.Replace("@user", Environment.UserName) ClassLogger.Init("", "log_" & Environment.UserName) ClassLogger.Add(">> Username: " & Environment.UserName, False) LoadMyConfig() If MyConnectionString = String.Empty Then frmConfig_Basic.ShowDialog() End If If ClassDatabase.Init() = False Then MsgBox("Es konnte keine Datenbankverbindung aufgebaut werden!" & vbNewLine & "Bitte prüfen Sie die Einstellungen und den Datenbankserver", MsgBoxStyle.Critical) Me.Close() End If If UniversalViewer = String.Empty And My.Settings.DoNot_Show_Documents = False Then frmConfig_Basic.ShowDialog() End If If MyConnectionString = String.Empty Then Me.Close() End If Refresh_Licence() USER_GUID = ClassDatabase.Execute_Scalar(sql, MyConnectionString) If USER_GUID Is Nothing Then ClassLogger.Add(" - User: " & Environment.UserName & " nicht in der Userverwaltung hinterlegt!", False) MsgBox("Achtung: Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") Me.Close() Else CURRENT_USERID = USER_GUID Dim folderwatch = ClassDatabase.Execute_Scalar("SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE USER_ID = " & CURRENT_USERID, MyConnectionString) If Not folderwatch Is Nothing Then CURRENT_FOLDERWATCH = folderwatch If FW_started = True Then tslblFW.Visible = True ClassFolderWatcher.StartStop_FolderWatch() End If If CURRENT_FOLDERWATCH <> "" Then TimerFolderWatch.Start() End If End If sql = "SELECT MODULE_GI FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))" sql = sql.Replace("@user", Environment.UserName) If ClassDatabase.Execute_Scalar(sql, MyConnectionString, True) = False Then ClassLogger.Add(" - User: " & Environment.UserName & " nicht für Modul freigegben!", False) MsgBox("Achtung: Sie sind nicht für die Nutzung dieses Moduls freigeschaltet." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") Me.Close() Else 'Am System anmelden sql = sql_User_Login sql = sql.Replace("@LogInOut", 1) sql = sql.Replace("@ANGEMELDETWO", Environment.MachineName) sql = sql.Replace("@user", Environment.UserName) If ClassDatabase.Execute_non_Query(sql, True) = False Then Me.Close() End If sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE= 'Global-Indexer'" ClassDatabase.Execute_non_Query(sql, True) sql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE) VALUES (" & USER_GUID & ",'Global-Indexer')" ClassDatabase.Execute_non_Query(sql, True) sql = "SELECT GI_ADMIN FROM TBDD_USER WHERE GUID = " & USER_GUID ISUserAdmin = ClassDatabase.Execute_Scalar(sql, MyConnectionString) If ISUserAdmin = True Then ToolStripSeparator1.Visible = True AdministrationToolStripMenuItem.Visible = True Else ToolStripSeparator1.Visible = False AdministrationToolStripMenuItem.Visible = False End If 'Lizenz abgellaufen, überprüfen ob User Admin ist If License_Expired And ISUserAdmin = False Then ' wenn ja dann schliessen Me.Close() Else 'ansonsten timer starten TimerClose3Minutes.Start() End If 'Anzahl der eingeloggten User UserLoggedin = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Global-Indexer'", MyConnectionString) If License_Anzahl < UserLoggedin Then MsgBox("Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & License_Anzahl.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") ClassLogger.Add(" - Die Anzahl der aktuell angemeldeten User (" & UserLoggedin.ToString & ") überschreitet die Anzahl der Lizenzen für Process-Manager!", False) If ISUserAdmin = False Then Me.Close() Else 'ansonsten timer starten If TimerClose3Minutes.Enabled = False Then TimerClose3Minutes.Start() End If End If End If sql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'Global-Indexer'" Dim anzahl = ClassDatabase.Execute_Scalar(sql, MyConnectionString) ClassDatabase.Execute_non_Query("DELETE FROM TBGI_FILES_USER WHERE UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", True) If LogErrorsOnly = False Then ClassLogger.Add(" - Anzahl Angemeldete User: " & anzahl.ToString, False) If Load_BasicConfig() = False Then Me.Close() End If Unregister_Hotkeys() Load_Hotkeys() End If End If Catch ex As Exception MsgBox("Unexpected Error in Load-Form" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Sub Unregister_Hotkeys() Try Dim sql As String = "Select * from TBHOTKEYTEMP_USER_HOTKEYS where [USER_ID] = " & CURRENT_USERID Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True) If Not IsNothing(DT) Then For Each row As DataRow In DT.Rows HotKey.RemoveHotKey(row.Item("HOTKEY_ID")) Next sql = "delete from TBHOTKEYTEMP_USER_HOTKEYS where [USER_ID] = " & CURRENT_USERID ClassDatabase.Execute_non_Query(sql, True) End If Catch ex As Exception MsgBox("Error in Unregister_Hotkeys:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Sub Load_Hotkeys() Try Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT HOTKEY1, HOTKEY2, ABS(CONVERT(INT, CONVERT(binary(4), NEWID()))) AS HOTKEY_ID FROM TBHOTKEY_USER_PROFILE WHERE USER_ID = " & CURRENT_USERID & " GROUP BY HOTKEY1, HOTKEY2", True) If DT.Rows.Count > 0 Then If LogErrorsOnly = False Then ClassLogger.Add(" ... " & DT.Rows.Count & " Hotkeys", False) Dim i As Integer = 0 For Each row As DataRow In DT.Rows i += 1 Dim sql As String = "INSERT INTO TBHOTKEYTEMP_USER_HOTKEYS (HOTKEY_ID,HOTKEY1,HOTKEY2,[USER_ID]) VALUES (" & row.Item("HOTKEY_ID") & ", '" & row.Item("HOTKEY1") & "', '" & row.Item("HOTKEY2") & "', " & CURRENT_USERID & ")" ClassDatabase.Execute_non_Query(sql, True) Dim keyCode As Keys Try Dim kc As New KeysConverter Dim obj As Object = kc.ConvertFromString(row.Item("HOTKEY2").ToString.ToUpper) keyCode = CType(obj, Keys) Catch ex As Exception MsgBox("Error in Convert Key:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Exit Sub End Try Select Case row.Item("HOTKEY1") Case "Strg" If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Strg " & row.Item("HOTKEY2").ToString.ToUpper, False) HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_CONTROL, row.Item("HOTKEY_ID")) Case "Shift" If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Shift " & row.Item("HOTKEY2").ToString.ToUpper, False) HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_SHIFT, row.Item("HOTKEY_ID")) Case "Alt" If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Alt " & row.Item("HOTKEY2").ToString.ToUpper, False) HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_ALT, row.Item("HOTKEY_ID")) Case "win" If LogErrorsOnly = False Then ClassLogger.Add(" ..." & i.ToString + "|Win " & row.Item("HOTKEY2").ToString.ToUpper, False) HotKey.AddHotKey(keyCode, clsHotkey.MODKEY.MOD_WIN, row.Item("HOTKEY_ID")) End Select Next Else If LogErrorsOnly = False Then ClassLogger.Add(" ... Keine Hotkeys!", False) End If Catch ex As Exception MsgBox("Error in Load_Hotkeys:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub HotkeyEisntellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HotkeyEisntellungenToolStripMenuItem.Click Me.Hide() Unregister_Hotkeys() frmHotKey_Add.ShowDialog() Load_Hotkeys() Me.Visible = True End Sub Private Sub GlobalIndexerEinstellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GlobalIndexerEinstellungenToolStripMenuItem.Click Me.Hide() frmAdministration.ShowDialog() Me.Visible = True End Sub Private Sub GrundeinstellungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GrundeinstellungenToolStripMenuItem.Click Me.TopMost = False frmConfig_Basic.ShowDialog() Me.TopMost = True End Sub Private Sub FrmHotkeyAddToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FrmHotkeyAddToolStripMenuItem.Click Me.TopMost = False Unregister_Hotkeys() frmHotkey_User.ShowDialog() Load_Hotkeys() Me.TopMost = True End Sub Private Sub TimerFolderWatch_Tick(sender As Object, e As EventArgs) Handles TimerFolderWatch.Tick Try If FW_started = True Then 'Prüfen ob alle Files abgearbeitet wurden Dim sql = "SELECT * FROM TBGI_FILES_USER WHERE WORKED = 0 AND HANDLE_TYPE like '%@FW%' AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')" Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True) If DT.Rows.Count > 0 Then ' Dim fil As String Me.TimerFolderWatch.Stop() For Each row As DataRow In DT.Rows CURRENT_WORKFILE = row.Item(1) CURRENT_FILENAME = row.Item(1) CURRENT_WORKFILE_GUID = row.Item("GUID") Open_IndexDialog() Next Me.TimerFolderWatch.Start() End If tslblFW.Visible = True Else tslblFW.Visible = False End If Catch ex As Exception MsgBox("Error in Work FolderWatch-File:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub TimerClose3Minutes_Tick(sender As Object, e As EventArgs) Handles TimerClose3Minutes.Tick If License_Expired = True Or License_Anzahl < UserLoggedin Then MsgBox("Global Indexer wird nun geschlossen, weil keine neue Lizenzdaten eingegeben wurden!", MsgBoxStyle.Information) Me.Close() End If End Sub Private Sub frmStart_Shown(sender As Object, e As EventArgs) Handles Me.Shown loaded = True Opacity = 0.65 TimerFolderWatch.Start() End Sub Private Sub HistoryIndexierteDateienToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HistoryIndexierteDateienToolStripMenuItem.Click frmHistory.ShowDialog() End Sub End Class