ZooFlow: WIP Clipboard Watcher integration

This commit is contained in:
Jonathan Jenne 2021-01-14 16:46:06 +01:00
parent cfc4b17c34
commit a86f5e1703
12 changed files with 415 additions and 93 deletions

View File

@ -18,7 +18,12 @@
Public Const ATTR_TYPE_INTEGER = "BIG INTEGER"
Public Const ATTR_TYPE_DATE = "DATE"
Public Const ATTR_TYPE_BOOLEAN = "BIT"
Public Const VECTORSEPARATOR = ""
Public Const SERVICE_ADDRESS_SEPARATOR = ":"
Public Const HOTKEY_TOGGLE_WATCHER = 354522017
Public Const HOTKEY_TRIGGER_WATCHER = 354523017
Public Const SQLCMD_FLOW_SEARCH1 = "FLOW_SEARCH1"

View File

@ -1,3 +1,15 @@
Public Class ClassEnvironment
Imports DigitalData.Modules.ZooFlow
Public Class ClassEnvironment
Public Shared Function GetEnvironment() As Environment
Dim oEnvironment As New Environment() With {
.DatabaseIDB = My.DatabaseIDB,
.Database = My.Database,
.Modules = My.Application.Modules,
.Service = My.Application.Service,
.Settings = My.Application.Settings,
.User = My.Application.User
}
Return oEnvironment
End Function
End Class

View File

@ -14,8 +14,10 @@ Public Class ClassInit
Private _MainForm As frmFlowForm
Private _Logger As Logger
Private _LogConfig As LogConfig
Public Event Completed As EventHandler
Private _DataASorDB As ClassDataASorDB
Private _Loader As ClassInitLoader
Public Event Completed As EventHandler
Public Sub New(LogConfig As LogConfig, ParentForm As frmFlowForm)
_MainForm = ParentForm
@ -36,22 +38,23 @@ Public Class ClassInit
MsgBox("Keine Verbindungs-Informationen hinterlegt. Anwendung wird beendet.", MsgBoxStyle.Critical, _MainForm.Text)
Application.Exit()
Else
Dim oInit As New ClassInitLoader()
_Loader = New ClassInitLoader()
' === Init Schritte definieren
oInit.AddStep("Checking connectivity..", AddressOf CheckConnectivity, True)
oInit.AddStep("Initializing User..", AddressOf InitializeUser, True)
oInit.AddStep("Initializing IDB Database..", AddressOf InitializeIDBDatabase, True)
oInit.AddStep("Initializing IDB Service..", AddressOf InitializeIDBService, True)
oInit.AddStep("Initializing Language..", AddressOf InitializeLanguage, False)
oInit.AddStep("Loading 3rd-party licenses..", AddressOf Initialize3rdParty, False)
oInit.AddStep("Loading Basic Configs..", AddressOf InitBasicData, False)
_Loader.AddStep("Checking connectivity..", AddressOf CheckConnectivity, True)
_Loader.AddStep("Initializing User..", AddressOf InitializeUser, True)
_Loader.AddStep("Initializing IDB Database..", AddressOf InitializeIDBDatabase, True)
_Loader.AddStep("Initializing IDB Service..", AddressOf InitializeIDBService, True)
_Loader.AddStep("Initializing Language..", AddressOf InitializeLanguage, False)
_Loader.AddStep("Initializing Clipboard Watcher..", AddressOf InitializeClipboardWatcher, False)
_Loader.AddStep("Loading 3rd-party licenses..", AddressOf Initialize3rdParty, False)
_Loader.AddStep("Loading Basic Configs..", AddressOf InitBasicData, False)
' === Init Schritte definieren
AddHandler oInit.ProgressChanged, AddressOf ProgressChanged
AddHandler oInit.InitCompleted, AddressOf InitCompleted
AddHandler _Loader.ProgressChanged, AddressOf ProgressChanged
AddHandler _Loader.InitCompleted, AddressOf InitCompleted
oInit.Run()
_Loader.Run()
End If
End Sub
@ -96,6 +99,7 @@ Public Class ClassInit
My.Application.User = oMyApplication.User
My.Application.Modules = oMyApplication.Modules
My.Application.ModulesActive = oMyApplication.ModulesActive
My.Application.ClipboardWatcher = oMyApplication.ClipboardWatcher
RaiseEvent Completed(sender, Nothing)
End If
@ -127,11 +131,9 @@ Public Class ClassInit
Dim oRow As DataRow = oDatatable.Rows.Item(0)
MyApplication.Settings.GdPictureKey = NotNull(oRow.Item("LICENSE"), String.Empty)
My.Application.Settings.GdPictureKey = NotNull(oRow.Item("LICENSE"), String.Empty)
My.Application.GDPictureLicense = My.Application.Settings.GdPictureKey
Catch ex As Exception
_Logger.Error(ex)
Throw New InitException("Error initializing3rdParty!")
Throw New InitException("Error initializing3rdParty!", ex)
End Try
End Sub
Private Sub InitBasicData(MyApplication As My.MyApplication)
@ -156,7 +158,7 @@ Public Class ClassInit
Next
Catch ex As Exception
_Logger.Error(ex)
Throw New InitException("Error in InitBasicData")
Throw New InitException("Error in InitBasicData", ex)
End Try
End Sub
@ -182,7 +184,7 @@ Public Class ClassInit
Catch ex As Exception
_Logger.Error(ex)
Throw New InitException("Error in InitBasicData")
Throw New InitException("Error in InitBasicData", ex)
End Try
End Sub
@ -252,7 +254,40 @@ Public Class ClassInit
Catch ex As Exception
_Logger.Error(ex)
Throw ex
Throw New InitException("Error while initializing user!", ex)
End Try
End Sub
Private Sub InitializeClipboardWatcher(MyApplication As My.MyApplication)
Try
Dim oUserId = My.Application.User.UserId
Dim oWhereClause = $"T1.USER_ID = {oUserId} OR GROUP_ID IN (SELECT DISTINCT GUID FROM TBDD_GROUPS WHERE GUID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {oUserId}))"
Dim oProfileSQL As String = $"SELECT DISTINCT GUID, NAME,REGEX_EXPRESSION,COMMENT,PROC_NAME,PROFILE_TYPE FROM VWCW_USER_PROFILE T1 WHERE {oWhereClause}"
Dim oProcessSQL As String = $"SELECT DISTINCT T.GUID, T.PROFILE_ID,T.PROC_NAME FROM TBCW_PROFILE_PROCESS T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})"
Dim oWindowSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_WINDOW T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})"
Dim oControlSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_CONTROL T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})"
Dim oUserProfiles = My.Database.GetDatatable(oProfileSQL)
If oUserProfiles Is Nothing OrElse oUserProfiles.Rows.Count = 0 Then
MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.NoProfilesConfigured
End If
Dim oProfileProcesses = My.Database.GetDatatable(oProcessSQL)
Dim oProfileWindows = My.Database.GetDatatable(oWindowSQL)
Dim oProfileControls = My.Database.GetDatatable(oControlSQL)
MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.OK
MyApplication.ClipboardWatcher.UserProfiles = oUserProfiles
MyApplication.ClipboardWatcher.ProfileProcesses = oProfileProcesses
MyApplication.ClipboardWatcher.ProfileWindows = oProfileWindows
MyApplication.ClipboardWatcher.ProfileControls = oProfileControls
MyApplication.ClipboardWatcher.MonitoringActive = True
Catch ex As Exception
MyApplication.ClipboardWatcher.Status = ClipboardWatcher.State.EnumStatus.Exception
_Logger.Error(ex)
Throw New InitException("Error while initializing clipboard watcher!", ex)
End Try
End Sub
@ -277,7 +312,6 @@ Public Class ClassInit
MyApplication.User.Language = NotNull(oValue.ToString, "de-DE")
End Select
End Sub
Private Sub HandleModuleInfo(MyApplication As My.MyApplication, ModuleName As String, Row As DataRow)
Dim oValue As Object = Row.Item("VALUE")
Dim oName As String = Row.Item("NAME").ToString

View File

@ -1,4 +1,5 @@
Imports System.ComponentModel
Imports DigitalData.GUIs.ZooFlow.My
Imports DigitalData.Modules.Logging
Public Class ClassInitLoader
@ -52,6 +53,13 @@ Public Class ClassInitLoader
Try
oStep.Action.Invoke(oMyApplication)
My.Application.Settings = oMyApplication.Settings
My.Application.User = oMyApplication.User
My.Application.Modules = oMyApplication.Modules
My.Application.ModulesActive = oMyApplication.ModulesActive
My.Application.ClipboardWatcher = oMyApplication.ClipboardWatcher
Catch ex As Exception
_Logger.Error(ex)
_Logger.Warn("Init Step '{0}' failed!", oStep.Name)

View File

@ -1,8 +1,25 @@
Namespace ClipboardWatcher
Imports DigitalData.Modules.ZooFlow.Params
Namespace ClipboardWatcher
Public Class State
Public UserProfiles As DataTable
Public ProfileProcesses As DataTable
Public ProfileWindows As DataTable
Public ProfileControls As DataTable
Public Enum EnumStatus
OK
NoProfilesConfigured
Exception
End Enum
Public UserProfiles As DataTable = Nothing
Public ProfileProcesses As DataTable = Nothing
Public ProfileWindows As DataTable = Nothing
Public ProfileControls As DataTable = Nothing
Public MatchTreeView As TreeView = New TreeView()
Public Property CurrentMatchingProfiles As List(Of ProfileData) = New List(Of ProfileData)
Public Property CurrentProfilesWithResults As List(Of ProfileData) = New List(Of ProfileData)
Public Property CurrentClipboardContents As String = String.Empty
Public Property MonitoringActive As Boolean = False
Public Property Status As EnumStatus
End Class
End Namespace

View File

@ -35,20 +35,21 @@ Partial Class frmFlowForm
Me.ZooFlowBeendenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.TimerRefreshData = New System.Windows.Forms.Timer(Me.components)
Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
Me.TimerCheckActiveForms = New System.Windows.Forms.Timer(Me.components)
Me.TimerCheckDroppedFiles = New System.Windows.Forms.Timer(Me.components)
Me.PictureBoxAbo = New System.Windows.Forms.PictureBox()
Me.PictureBoxDragDrop = New System.Windows.Forms.PictureBox()
Me.PictureBoxGlobix = New System.Windows.Forms.PictureBox()
Me.PictureBoxPM = New System.Windows.Forms.PictureBox()
Me.PictureBoxSearch = New System.Windows.Forms.PictureBox()
Me.TimerCheckActiveForms = New System.Windows.Forms.Timer(Me.components)
Me.TimerCheckDroppedFiles = New System.Windows.Forms.Timer(Me.components)
Me.PictureBoxGlobix = New System.Windows.Forms.PictureBox()
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
Me.ContextMenuSystray.SuspendLayout()
CType(Me.PictureBoxAbo, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBoxDragDrop, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBoxGlobix, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBoxPM, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBoxSearch, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBoxGlobix, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
@ -106,14 +107,6 @@ Partial Class frmFlowForm
Me.ZooFlowBeendenToolStripMenuItem.Size = New System.Drawing.Size(173, 22)
Me.ZooFlowBeendenToolStripMenuItem.Text = "ZooFlow beenden"
'
'TimerCheckActiveForms
'
Me.TimerCheckActiveForms.Interval = 2000
'
'TimerCheckDroppedFiles
'
Me.TimerCheckDroppedFiles.Interval = 400
'
'PictureBoxAbo
'
Me.PictureBoxAbo.Cursor = System.Windows.Forms.Cursors.Hand
@ -137,18 +130,6 @@ Partial Class frmFlowForm
Me.PictureBoxDragDrop.TabStop = False
Me.ToolTip1.SetToolTip(Me.PictureBoxDragDrop, "Drag and Drop files here")
'
'PictureBoxGlobix
'
Me.PictureBoxGlobix.BackColor = System.Drawing.Color.Transparent
Me.PictureBoxGlobix.Cursor = System.Windows.Forms.Cursors.Hand
Me.PictureBoxGlobix.Image = CType(resources.GetObject("PictureBoxGlobix.Image"), System.Drawing.Image)
Me.PictureBoxGlobix.Location = New System.Drawing.Point(448, 23)
Me.PictureBoxGlobix.Name = "PictureBoxGlobix"
Me.PictureBoxGlobix.Size = New System.Drawing.Size(90, 101)
Me.PictureBoxGlobix.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.PictureBoxGlobix.TabIndex = 9
Me.PictureBoxGlobix.TabStop = False
'
'PictureBoxPM
'
Me.PictureBoxPM.BackColor = System.Drawing.Color.Transparent
@ -175,6 +156,26 @@ Partial Class frmFlowForm
Me.PictureBoxSearch.TabStop = False
Me.ToolTip1.SetToolTip(Me.PictureBoxSearch, "ZooFlow Suche")
'
'TimerCheckActiveForms
'
Me.TimerCheckActiveForms.Interval = 2000
'
'TimerCheckDroppedFiles
'
Me.TimerCheckDroppedFiles.Interval = 400
'
'PictureBoxGlobix
'
Me.PictureBoxGlobix.BackColor = System.Drawing.Color.Transparent
Me.PictureBoxGlobix.Cursor = System.Windows.Forms.Cursors.Hand
Me.PictureBoxGlobix.Image = CType(resources.GetObject("PictureBoxGlobix.Image"), System.Drawing.Image)
Me.PictureBoxGlobix.Location = New System.Drawing.Point(448, 23)
Me.PictureBoxGlobix.Name = "PictureBoxGlobix"
Me.PictureBoxGlobix.Size = New System.Drawing.Size(90, 101)
Me.PictureBoxGlobix.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
Me.PictureBoxGlobix.TabIndex = 9
Me.PictureBoxGlobix.TabStop = False
'
'PictureBox1
'
Me.PictureBox1.BackColor = System.Drawing.Color.Transparent
@ -185,6 +186,12 @@ Partial Class frmFlowForm
Me.PictureBox1.TabIndex = 12
Me.PictureBox1.TabStop = False
'
'ImageList1
'
Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)
Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
'
'frmFlowForm
'
Me.AllowDrop = True
@ -210,9 +217,9 @@ Partial Class frmFlowForm
Me.ContextMenuSystray.ResumeLayout(False)
CType(Me.PictureBoxAbo, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBoxDragDrop, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBoxGlobix, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBoxPM, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBoxSearch, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBoxGlobix, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
@ -235,4 +242,5 @@ Partial Class frmFlowForm
Friend WithEvents TimerCheckActiveForms As Timer
Friend WithEvents TimerCheckDroppedFiles As Timer
Friend WithEvents PictureBox1 As PictureBox
Friend WithEvents ImageList1 As ImageList
End Class

View File

@ -1962,34 +1962,6 @@
<metadata name="ToolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>610, 17</value>
</metadata>
<metadata name="TimerCheckActiveForms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>709, 17</value>
</metadata>
<metadata name="TimerCheckDroppedFiles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>891, 17</value>
</metadata>
<data name="PictureBoxGlobix.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EgAACxIB0t1+/AAAA8pJREFUeF7t3D1uFEEQhmEfwUdwBAIhZG7gI/goPoKP4CP4FAQEyCIgRIgAiQRZ
IiAhcERAstQnjaX26t3dmu7qnlm5giepWXf9aH9me2Z9stlsUgMMJj8MJj8MJj8MJj8MJj8MJj8MJj8M
Jj8MJj8MjvTj/Ytzc2VuzZ3ZHKDH6LH6m3NacyQM9maNX05DeDA0pDm0hta6pFy9YbAHa/DUXJt7Q4OI
oLWV45Rq6AGD0aamIp5tXsp1TbVEw2AUa+LC9HzGHaLcF1RbFAy2sqL1cr2ZmlgD1dLlZY3BFlbomfk6
Fb4mqumMam6BwVpWoE5JRr7XzaXaQk99MFhDhU0FUuFrEjpEDM6lgqbCqOA1ChsiBuewQvSed0zDe6Sa
m98TMehlBejTdo0fGF6qvenTGYNelnxNpyq1bqg3Lwx6WGKdJFNBx6j6ZBuDHpa06hvGn89vuvr18RXm
PeCeevTA4CGWUN9tqZCDNt/fdaUhUl6Hqu/OGNzHEumDo/pTl5qO1DBA9TT7AwWD+1iS6mefbDe7z79v
dqpWPN5Df0d5nWY/CzG4jyVp2l0pm6Xjpb9f3j55vEfjAGe/F2JwF0ugnWRK7FY2S8dLCwxQZu1sY3AX
W1xb55TUrWyWjpcWGuAt9b4LBnexxZu/spXN0vHSQgN8oN53wSCxhbVhQAlnKZul46WFBijujQYMEltU
lxEp2Sxls3S8tOAAr2gGBIPEFm1+/5OyWTpeWnCA7vdBDBJb1HPR+6CyWTpeWnCAdzQDgkECSaqUzdLx
0u9Pr5883iNogNYyz2EbBgklqVE2S8draGg5wAarH6AtqA0ETDTXsQzQuDYWMLhNi20tXu1ZDlAgQZVj
GeB2/7tgkFCSGjnARs95gMNPpL06DLDLifTwr3JeHQbY5avc8M0Erw4D7LKZMHw7y6vDAOO3s8QWHrqh
6hU8wD4bqmKLD93S9woeYNct/aEXlbyCB9jvopJYgmGXNb0CB9j3sqZYkrAL63S8RuAAh1xYD7u1g47X
CBrgmFs7xBKF3FykLfsI5S0gDQMcc3PRI0tY9V5YDrCHygGOvb1NLGnVDZbUdKTKAY6/wVIs8exbfHUD
ZE8/P7zEvHssc4uvWPK8yZyCc1gB+TOHVlZI/tCmlQqaCqOC1yRseILBWipsKpAKX4PQ4QkGW1iB+XPX
VlaoPp3zB9etrOj8yX8EayL/6UQra0gvaw2y5zNSaytHl5crwWBv1mD+450o1rhOffJfPz1XGEx+GEx+
GEx+GEx+GEx+GEx+GEx+GEx+GExem5P/BhegvGcbWY4AAAAASUVORK5CYII=
</value>
</data>
<data name="PictureBoxPM.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAGsAAABQCAYAAAAeAotiAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
@ -2043,14 +2015,44 @@
iTozEYp40EgT8aCRIsXWP0j108YYpYdeAAAAAElFTkSuQmCC
</value>
</data>
<data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<metadata name="TimerCheckActiveForms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>709, 17</value>
</metadata>
<metadata name="TimerCheckDroppedFiles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>891, 17</value>
</metadata>
<data name="PictureBoxGlobix.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAC3RFWHRUaXRsZQBab29tO88J
/rwAAACnSURBVDhPtZLREURAEERJRy4yEIQIHGK4LNT5Fo6fk8bod4XaWnbvnPLx1NR0T88uEjO7xOeR
t8MRqShEJ6YFanpo0QAMtbAAaGksgC0Y3+IhsgVqemhFLICjYmLA1+ihdbEA7ouJrb5GD226NeDyFV4C
0xrCVqD++hIrsQ6HCH5Gf7gXP/9I/nAj3PAdbsBTnBoGN2AUp4bBDSgFIZxkZwyxBfyPJTM6YCR+mWYM
fQAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EgAACxIB0t1+/AAAA8pJREFUeF7t3D1uFEEQhmEfwUdwBAIhZG7gI/goPoKP4CP4FAQEyCIgRIgAiQRZ
IiAhcERAstQnjaX26t3dmu7qnlm5giepWXf9aH9me2Z9stlsUgMMJj8MJj8MJj8MJj8MJj8MJj8MJj8M
Jj8MJj8MjvTj/Ytzc2VuzZ3ZHKDH6LH6m3NacyQM9maNX05DeDA0pDm0hta6pFy9YbAHa/DUXJt7Q4OI
oLWV45Rq6AGD0aamIp5tXsp1TbVEw2AUa+LC9HzGHaLcF1RbFAy2sqL1cr2ZmlgD1dLlZY3BFlbomfk6
Fb4mqumMam6BwVpWoE5JRr7XzaXaQk99MFhDhU0FUuFrEjpEDM6lgqbCqOA1ChsiBuewQvSed0zDe6Sa
m98TMehlBejTdo0fGF6qvenTGYNelnxNpyq1bqg3Lwx6WGKdJFNBx6j6ZBuDHpa06hvGn89vuvr18RXm
PeCeevTA4CGWUN9tqZCDNt/fdaUhUl6Hqu/OGNzHEumDo/pTl5qO1DBA9TT7AwWD+1iS6mefbDe7z79v
dqpWPN5Df0d5nWY/CzG4jyVp2l0pm6Xjpb9f3j55vEfjAGe/F2JwF0ugnWRK7FY2S8dLCwxQZu1sY3AX
W1xb55TUrWyWjpcWGuAt9b4LBnexxZu/spXN0vHSQgN8oN53wSCxhbVhQAlnKZul46WFBijujQYMEltU
lxEp2Sxls3S8tOAAr2gGBIPEFm1+/5OyWTpeWnCA7vdBDBJb1HPR+6CyWTpeWnCAdzQDgkECSaqUzdLx
0u9Pr5883iNogNYyz2EbBgklqVE2S8draGg5wAarH6AtqA0ETDTXsQzQuDYWMLhNi20tXu1ZDlAgQZVj
GeB2/7tgkFCSGjnARs95gMNPpL06DLDLifTwr3JeHQbY5avc8M0Erw4D7LKZMHw7y6vDAOO3s8QWHrqh
6hU8wD4bqmKLD93S9woeYNct/aEXlbyCB9jvopJYgmGXNb0CB9j3sqZYkrAL63S8RuAAh1xYD7u1g47X
CBrgmFs7xBKF3FykLfsI5S0gDQMcc3PRI0tY9V5YDrCHygGOvb1NLGnVDZbUdKTKAY6/wVIs8exbfHUD
ZE8/P7zEvHssc4uvWPK8yZyCc1gB+TOHVlZI/tCmlQqaCqOC1yRseILBWipsKpAKX4PQ4QkGW1iB+XPX
VlaoPp3zB9etrOj8yX8EayL/6UQra0gvaw2y5zNSaytHl5crwWBv1mD+450o1rhOffJfPz1XGEx+GEx+
GEx+GEx+GEx+GEx+GEx+GEx+GExem5P/BhegvGcbWY4AAAAASUVORK5CYII=
</value>
</data>
<data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAALdEVYdFRpdGxlAFpvb207zwn+vAAAAKdJREFUOE+1
ktERREAQRElHLjIQhAgcYrgs1PkWjp+Txuh3hdpadu+c8vHU1HRPzy4SM7vE55G3wxGpKEQnpgVqemjR
AAy1sABoaSyALRjf4iGyBWp6aEUsgKNiYsDX6KF1sQDui4mtvkYPbbo14PIVXgLTGsJWoP76EiuxDocI
fkZ/uBc//0j+cCPc8B1uwFOcGgY3YBSnhsENKAUhnGRnDLEF/I8lMzpgJH6ZZgx9AAAAAElFTkSuQmCC
</value>
</data>
<metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1079, 17</value>
</metadata>
</root>

View File

@ -4,6 +4,8 @@ Imports System.IO
Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Messaging
Imports DigitalData.Modules.Windows
Imports DigitalData.GUIs.ClipboardWatcher
Imports DigitalData.GUIs.ZooFlow.ClassConstants
@ -21,6 +23,8 @@ Public Class frmFlowForm
Private FileDrop As ClassFileDrop
Private FileHandle As ClassFilehandle
Private ProfileFilter As ProfileFilter
Private WindowClass As Window
' Runtime Flags
Private ApplicationLoading As Boolean = True
@ -33,6 +37,7 @@ Public Class frmFlowForm
' Events
Public Event ClipboardChanged As EventHandler(Of IDataObject)
Private WithEvents HotkeyClass As Hotkey
Private WithEvents Watcher As ClipboardWatcher.Watcher = ClipboardWatcher.Watcher.Singleton
Public Sub New()
@ -89,7 +94,6 @@ Public Class frmFlowForm
' === Register As Event Listener ===
EventBus.Instance.Register(Me)
' === Set Form Properties ===
TopMost = True
AllowDrop = True
@ -108,7 +112,6 @@ Public Class frmFlowForm
AddHandler Watcher.ClipboardChanged, AddressOf Watcher_ClipboardChanged
' TODO: Clean up
Dim oSQL = My.Queries.Common.FNIDB_GET_SEARCH_PROFILES(My.Application.User.UserId, My.Application.User.Language)
Dim oDatatable As DataTable = My.DatabaseIDB.GetDatatable(oSQL)
@ -119,17 +122,136 @@ Public Class frmFlowForm
DTIDB_SEARCHES = oDatatable
PictureBoxSearch.Visible = True
End If
If My.Application.ModulesActive.Contains(MODULE_CLIPBOARDWATCHER) Then
Try
WindowClass = New Window(My.LogConfig)
HotkeyClass = New Hotkey(Me)
'Add Toggle Hotkey
HotkeyClass.AddHotKey(Keys.T, Hotkey.ModfierKey.MOD_CONTROL, HOTKEY_TOGGLE_WATCHER)
' Add Trigger Hotkey
'TODO: Configure Hotkey
Dim oSearchKey As String = "D"
Dim oFunctionKey As String = "CTRL"
Dim oConverter As New KeysConverter
Dim oObject As Object = oConverter.ConvertFromString(oSearchKey)
Dim oKeyCode As Keys = oObject
Select Case oFunctionKey
Case "CTRL"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_CONTROL, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "SHIFT"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_SHIFT, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "ALT"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_ALT, ClassConstants.HOTKEY_TRIGGER_WATCHER)
Case "WIN"
HotkeyClass.AddHotKey(oKeyCode, Hotkey.ModfierKey.MOD_WIN, ClassConstants.HOTKEY_TRIGGER_WATCHER)
End Select
Catch ex As Exception
Logger.Error(ex)
MsgBox("Error while initializing Hotkeys for Clipboard Watcher!", MsgBoxStyle.Critical, Text)
End Try
Else
My.Application.ClipboardWatcher.MonitoringActive = False
Logger.Info("Clipboard Watcher Module is not active. Hotkey Monitoring will be disabled!")
End If
If My.Application.ModulesActive.Contains(MODULE_GLOBAL_INDEXER) Then
FileDrop = New ClassFileDrop(My.LogConfig)
FileHandle = New ClassFilehandle(My.LogConfig)
Refresh_RegexTable()
End If
My.DTAttributes = My.DatabaseIDB.GetDatatable("SELECT * FROM TBIDB_ATTRIBUTE")
Me.Cursor = Cursors.Default
End Sub
Private Sub Watcher_ClipboardChanged(sender As Object, e As IDataObject)
Throw New NotImplementedException()
If My.Application.ClipboardWatcher.MonitoringActive = False Then
Logger.Info("Clipboard Watcher is not active!")
Exit Sub
End If
If My.Application.ClipboardWatcher.UserProfiles Is Nothing OrElse My.Application.ClipboardWatcher.UserProfiles.Rows.Count = 0 Then
Logger.Warn("User Profiles is empty!")
Exit Sub
End If
If My.Application.ClipboardWatcher.ProfileProcesses Is Nothing OrElse My.Application.ClipboardWatcher.ProfileProcesses.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
If My.Application.ClipboardWatcher.ProfileWindows Is Nothing OrElse My.Application.ClipboardWatcher.ProfileWindows.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
If My.Application.ClipboardWatcher.ProfileProcesses Is Nothing OrElse My.Application.ClipboardWatcher.ProfileProcesses.Rows.Count = 0 Then
Logger.Warn("Profile Processes is empty!")
Exit Sub
End If
Dim oWindowInfo = WindowClass.GetWindowInfo()
Dim ClipboardContents As String = Clipboard.GetText().Trim()
Try
' Tree View zurücksetzen
My.Application.ClipboardWatcher.MatchTreeView.Nodes.Clear()
ProfileFilter = New ProfileFilter(My.LogConfig,
My.Application.ClipboardWatcher.UserProfiles,
My.Application.ClipboardWatcher.ProfileProcesses,
My.Application.ClipboardWatcher.ProfileWindows,
My.Application.ClipboardWatcher.ProfileControls,
My.Application.ClipboardWatcher.MatchTreeView
)
Catch ex As Exception
Logger.Error(ex)
MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor. Mehr Informationen im Log.", MsgBoxStyle.Critical, Text)
End Try
Try
Dim oProfiles = ProfileFilter.Profiles.AsEnumerable()
Dim oEnvironment = ClassEnvironment.GetEnvironment()
' Filter by Clipboard Contents
oProfiles = ProfileFilter.FilterProfilesByClipboardRegex(oProfiles, ClipboardContents)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByClipboardRegex")
' Filter by Process Name
oProfiles = ProfileFilter.FilterProfilesByProcess(oProfiles, oWindowInfo.ProcessName)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByProcess")
' Filter by Window Title
oProfiles = ProfileFilter.FilterWindowsByWindowTitleRegex(oProfiles, oWindowInfo.WindowTitle)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterWindowsByWindowTitleRegex")
' Filter by Focused Control
oProfiles = ProfileFilter.FilterProfilesByFocusedControl(oProfiles, ClipboardContents, Handle)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesByFocusedControl")
My.Application.ClipboardWatcher.CurrentMatchingProfiles = oProfiles.ToList()
' Filter by Search Results
oProfiles = ProfileFilter.FilterProfilesBySearchResults(oProfiles, oEnvironment.Database, oEnvironment.User, ClipboardContents)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "FilterProfilesBySearchResults")
' Clean up Profiles
oProfiles = ProfileFilter.ClearNotMatchedProfiles(oProfiles)
oProfiles = ProfileFilter.ClearDuplicateProfiles(oProfiles)
oProfiles = ProfileFilter.LogRemainingProfiles(oProfiles, "CleanUp")
My.Application.ClipboardWatcher.CurrentProfilesWithResults = oProfiles.ToList()
My.Application.ClipboardWatcher.CurrentClipboardContents = ClipboardContents
Catch ex As Exception
Logger.Error(ex)
MsgBox("Fehler beim Auswerten der Profile. Mehr Informationen im Log.", MsgBoxStyle.Critical, Text)
End Try
End Sub
Private Sub TimerRefreshData_Tick(sender As Object, e As EventArgs)
@ -411,7 +533,7 @@ Public Class frmFlowForm
My.Application.Globix.CURRENT_WORKFILE_GUID = oFileRow.Item(0)
My.Application.Globix.CURRENT_WORKFILE = oFileRow.Item("FILENAME2WORK").ToString
Logger.Info(">> CURRENT_WORKFILE: " & My.Application.Globix.CURRENT_WORKFILE)
If File.Exists(My.Application.Globix.CURRENT_WORKFILE) = True And My.Application.Globix.DTACTUAL_FILES.Rows.Count > 0 Then
If IO.File.Exists(My.Application.Globix.CURRENT_WORKFILE) = True And My.Application.Globix.DTACTUAL_FILES.Rows.Count > 0 Then
Globix_Open_IndexDialog()
End If
Next
@ -441,6 +563,13 @@ Public Class frmFlowForm
My.UIConfigManager.Save()
End Sub
Private Sub frmFlowForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Try
HotkeyClass.RemoveHotKey(HOTKEY_TOGGLE_WATCHER)
HotkeyClass.RemoveHotKey(HOTKEY_TRIGGER_WATCHER)
Catch ex As Exception
Logger.Error(ex)
Logger.Warn("Hotkeys could not be removed")
End Try
End Sub
End Class

84
Windows/Hotkey.vb Normal file
View File

@ -0,0 +1,84 @@
Imports System.Windows.Forms
Public Class Hotkey
Implements IMessageFilter
Private _OwnerForm As Form
Private _HotkeyList As New Dictionary(Of Short, HotKeyObject)
Private _HotkeyIDList As New Dictionary(Of String, Short)
''' <summary>
''' Diesem Event wird immer die zugewiesene HotKeyID übergeben, wenn eine HotKey Kombination gedrückt wurde.
''' </summary>
Public Event HotKeyPressed(ByVal HotKeyID As String)
''' <summary>
''' Definiert verfügbare Modfier Keys
''' </summary>
Public Enum ModfierKey As Integer
MOD_ALT = 1
MOD_CONTROL = 2
MOD_SHIFT = 4
MOD_WIN = 8
End Enum
Sub New(ByVal pOwnerForm As Form)
_OwnerForm = pOwnerForm
Application.AddMessageFilter(Me)
End Sub
''' <summary>
''' Diese Funktion fügt einen Hotkey hinzu und registriert ihn auch sofort
''' </summary>
''' <param name="pKeyCode">Den KeyCode für die Taste</param>
''' <param name="pModifiers">Die Zusatztasten wie z.B. Strg oder Alt, diese können auch mit OR kombiniert werden</param>
''' <param name="pHotKeyID">Die ID die der Hotkey bekommen soll um diesen zu identifizieren</param>
Public Sub AddHotKey(ByVal pKeyCode As Keys, ByVal pModifiers As ModfierKey, ByVal pHotKeyID As Integer)
If _HotkeyIDList.ContainsKey(pHotKeyID) = True Then
Exit Sub
End If
Dim oHotkeyId As Short = NativeMethods.GlobalAddAtom(pHotKeyID)
_HotkeyIDList.Add(pHotKeyID, oHotkeyId)
_HotkeyList.Add(oHotkeyId, New HotKeyObject(pKeyCode, pModifiers, pHotKeyID))
NativeMethods.RegisterHotKey(_OwnerForm.Handle, oHotkeyId, _HotkeyList(oHotkeyId).Modifier, _HotkeyList(oHotkeyId).HotKey)
End Sub
''' <summary>
''' Diese Funktion entfernt einen Hotkey und deregistriert ihn auch sofort
''' </summary>
''' <param name="pHotKeyID">Gibt die HotkeyID an welche entfernt werden soll</param>
Public Sub RemoveHotKey(ByVal pHotKeyID As Integer)
If _HotkeyIDList.ContainsKey(pHotKeyID) = False Then
Exit Sub
End If
Dim oHotkeyId As Short = _HotkeyIDList(pHotKeyID)
_HotkeyIDList.Remove(pHotKeyID)
_HotkeyList.Remove(oHotkeyId)
NativeMethods.UnregisterHotKey(_OwnerForm.Handle, CInt(oHotkeyId))
NativeMethods.GlobalDeleteAtom(oHotkeyId)
End Sub
Private Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg = NativeMethods.WM_HOTKEY Then
If Clipboard.GetText().Trim() <> String.Empty Then
RaiseEvent HotKeyPressed(_HotkeyList(CShort(m.WParam)).HotKeyID)
End If
End If
End Function
Public Class HotKeyObject
Public Property HotKey() As Keys
Public Property Modifier() As ModfierKey
Public Property HotKeyID() As String
Public Property AtomID() As Short
Sub New(ByVal NewHotKey As Keys, ByVal NewModifier As ModfierKey, ByVal NewHotKeyID As String)
HotKey = NewHotKey
Modifier = NewModifier
HotKeyID = NewHotKeyID
End Sub
End Class
End Class

View File

@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: AssemblyVersion("1.1.0.0")>
<Assembly: AssemblyFileVersion("1.1.0.0")>

View File

@ -79,6 +79,27 @@ Public Class NativeMethods
Public Shared Function GetCursorPos(ByRef lpPoint As PointAPI) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
Public Declare Function RegisterHotKey Lib "user32" (
ByVal Hwnd As IntPtr,
ByVal ID As Integer,
ByVal Modifiers As Integer,
ByVal Key As Integer
) As Integer
Public Declare Function UnregisterHotKey Lib "user32" (
ByVal Hwnd As IntPtr,
ByVal ID As Integer
) As Integer
Public Declare Auto Function GetWindowText Lib "user32" (
ByVal hWnd As IntPtr,
ByVal lpString As StringBuilder,
ByVal cch As Integer
) As Integer
Public Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal IDString As String) As Short
Public Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal Atom As Short) As Short
Public Const STANDARD_RIGHTS_REQUIRED As Integer = &HF0000
Public Const SECTION_QUERY As Short = &H1
Public Const SECTION_MAP_WRITE As Short = &H2
@ -104,6 +125,7 @@ Public Class NativeMethods
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Const WM_HOTKEY As Integer = &H312
Public Enum PageProtection As UInteger
NoAccess = &H1

View File

@ -76,6 +76,7 @@
<ItemGroup>
<Compile Include="Drawing.vb" />
<Compile Include="File.vb" />
<Compile Include="Hotkey.vb" />
<Compile Include="NativeMethods.vb" />
<Compile Include="Utils.vb" />
<Compile Include="Window.vb" />