4 Commits

Author SHA1 Message Date
Jonathan Jenne
4eae3d6e80 GUIs.Common: Version 1.0.0.3 2020-12-15 13:23:11 +01:00
Jonathan Jenne
acbd5c82be GUIs.Common: Add Legacy File Properties to context menu 2020-12-15 13:22:42 +01:00
Jonathan Jenne
a5075cc7f4 Windows: Add OpenFileProperties method 2020-12-15 13:20:57 +01:00
Jonathan Jenne
22cf38d83c GUIs.ClipboardWatcher: Version 1.0.0.5 2020-12-15 11:28:07 +01:00
9 changed files with 147 additions and 29 deletions

View File

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

View File

@@ -194,6 +194,10 @@
<Project>{81cac44f-3711-4c8f-ae98-e02a7448782a}</Project> <Project>{81cac44f-3711-4c8f-ae98-e02a7448782a}</Project>
<Name>ZooFlow</Name> <Name>ZooFlow</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Windows\Windows.vbproj">
<Project>{5EFAEF9B-90B9-4F05-9F70-F79AD77FFF86}</Project>
<Name>Windows</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />

View File

@@ -2,7 +2,5 @@
Public Const NO_ROW_HANDLE = -1 Public Const NO_ROW_HANDLE = -1
Public Shared ReadOnly MESSAGE_TOO_MANY_SEARCHES = "You have more than three searches configured. This Window will only show the first three result lists!" Public Shared ReadOnly MESSAGE_TOO_MANY_SEARCHES = "You have more than three searches configured. This Window will only show the first three result lists!"
Public Shared ReadOnly MESSAGE_ERROR_IN_SEARCHES = $"An error occurred while executing searches or no searches were found!{vbNewLine} Public Shared ReadOnly MESSAGE_ERROR_IN_SEARCHES = $"An error occurred while executing searches or no searches were found!{vbNewLine}Please check the SQL Queries for errors and if the correct connection was configured.{vbNewLine}{vbNewLine}For more information check the Logfile."
Please check the SQL Queries for errors and if the correct connection was configured.{vbNewLine}{vbNewLine}
For more information check the Logfile."
End Class End Class

View File

@@ -1,29 +1,61 @@
Imports System.Windows.Forms Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports DevExpress.Utils.Menu Imports DevExpress.Utils.Menu
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windows.NativeMethods
Imports DigitalData.Modules.Windows.File
Imports DigitalData.Modules.ZooFlow Imports DigitalData.Modules.ZooFlow
Public Class DocumentPropertyMenu Public Class DocumentPropertyMenu
Private ReadOnly _Logger As Logger Private ReadOnly _Logger As Logger
Private ReadOnly _LogConfig As LogConfig Private ReadOnly _LogConfig As LogConfig
Private ReadOnly _Environment As Environment Private ReadOnly _Environment As Environment
Private ReadOnly _File As Modules.Windows.File
Private ReadOnly _FilePath As String Private ReadOnly _FilePath As String
Private ReadOnly _ObjectId As Long Private ReadOnly _ObjectId As Long
Public Const OPEN_FILE As String = "Datei öffnen"
Public Const OPEN_DIRECTORY As String = "Ordner öffnen"
Public Const COPY_PATH As String = "Dateipfad kopieren"
Public Const OPEN_PROPERTIES As String = "Eigenschaften"
Public Sub New(LogConfig As LogConfig, Environment As Environment, FilePath As String, Optional ObjectId As Long = 0) Public Sub New(LogConfig As LogConfig, Environment As Environment, FilePath As String, Optional ObjectId As Long = 0)
_LogConfig = LogConfig _LogConfig = LogConfig
_Logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()
_Environment = Environment _Environment = Environment
_FilePath = FilePath _FilePath = FilePath
_ObjectId = ObjectId _ObjectId = ObjectId
_File = New Modules.Windows.File(LogConfig)
End Sub End Sub
Public Function GetMenuItems() As List(Of DXMenuItem) Public Function GetMenuItems(IsLegacy As Boolean) As List(Of DXMenuItem)
Dim oOpenFile = New DXMenuItem("Datei öffnen", AddressOf OpenFile_Click) If IsLegacy Then
Dim oOpenFolder = New DXMenuItem("Ordner öffnen", AddressOf OpenFolder_Click) Return GetLegacyMenuItems()
Dim oCopyPath = New DXMenuItem("Pfad kopieren", AddressOf CopyPath_Click) Else
Dim oProperties = New DXMenuItem("Eigenschaften", AddressOf Properties_Click) Return GetIDBMenuItems()
End If
End Function
Public Function GetIDBMenuItems() As List(Of DXMenuItem)
Dim oOpenFile = New DXMenuItem(OPEN_FILE, AddressOf OpenFile_Click)
Dim oOpenFolder = New DXMenuItem(OPEN_DIRECTORY, AddressOf OpenFolder_Click)
Dim oCopyPath = New DXMenuItem(COPY_PATH, AddressOf CopyPath_Click)
Dim oProperties = New DXMenuItem(OPEN_PROPERTIES, AddressOf Properties_Click)
Return New List(Of DXMenuItem) From {
oOpenFile,
oOpenFolder,
oCopyPath,
oProperties
}
End Function
Public Function GetLegacyMenuItems() As List(Of DXMenuItem)
Dim oOpenFile = New DXMenuItem(OPEN_FILE, AddressOf OpenFile_Click)
Dim oOpenFolder = New DXMenuItem(OPEN_DIRECTORY, AddressOf OpenFolder_Click)
Dim oCopyPath = New DXMenuItem(COPY_PATH, AddressOf CopyPath_Click)
Dim oProperties = New DXMenuItem(OPEN_PROPERTIES, AddressOf Properties_Click_Legacy)
Return New List(Of DXMenuItem) From { Return New List(Of DXMenuItem) From {
oOpenFile, oOpenFile,
@@ -34,7 +66,7 @@ Public Class DocumentPropertyMenu
End Function End Function
Public Sub Properties_Click(sender As Object, e As EventArgs) Public Sub Properties_Click(sender As Object, e As EventArgs)
If _ObjectId = 0 Then If TestObjectIdExists(OPEN_PROPERTIES) Then
Exit Sub Exit Sub
End If End If
@@ -42,28 +74,50 @@ Public Class DocumentPropertyMenu
oPropertyDialog.Show() oPropertyDialog.Show()
End Sub End Sub
Public Sub CopyPath_Click(sender As Object, e As EventArgs) Public Sub Properties_Click_Legacy(sender As Object, e As EventArgs)
If IO.File.Exists(_FilePath) Then If TestPathExists(OPEN_PROPERTIES) = False Then
Clipboard.SetText(_FilePath) Exit Sub
Else
MessageBox.Show($"Datei {_FilePath} existiert nicht oder wurde verschoben!", "Dateipfad kopieren", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If End If
_File.OpenFileProperties(_FilePath)
End Sub
Public Sub CopyPath_Click(sender As Object, e As EventArgs)
Clipboard.SetText(_FilePath)
End Sub End Sub
Public Sub OpenFile_Click(sender As Object, e As EventArgs) Public Sub OpenFile_Click(sender As Object, e As EventArgs)
If IO.File.Exists(_FilePath) Then If TestPathExists(OPEN_FILE) = False Then
Process.Start(_FilePath) Exit Sub
Else
MessageBox.Show($"Datei {_FilePath} existiert nicht oder wurde verschoben!", "Datei öffnen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If End If
Process.Start(_FilePath)
End Sub End Sub
Public Sub OpenFolder_Click(sender As Object, e As EventArgs) Public Sub OpenFolder_Click(sender As Object, e As EventArgs)
If IO.File.Exists(_FilePath) Then If TestPathExists(OPEN_DIRECTORY) = False Then
Dim oDirectory = IO.Path.GetDirectoryName(_FilePath) Exit Sub
Process.Start(oDirectory)
Else
MessageBox.Show($"Datei {_FilePath} existiert nicht oder wurde verschoben!", "Ordner öffnen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If End If
Dim oDirectory = IO.Path.GetDirectoryName(_FilePath)
Process.Start(oDirectory)
End Sub End Sub
Private Function TestPathExists(Title As String) As Boolean
If IO.File.Exists(_FilePath) = False Then
MessageBox.Show($"Datei {_FilePath} existiert nicht oder wurde verschoben!", Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
Else
Return True
End If
End Function
Private Function TestObjectIdExists(Title As String) As Boolean
If _ObjectId = 0 Then
MessageBox.Show($"Objekt {_ObjectId} existiert nicht oder wurde verschoben!", Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
Else
Return True
End If
End Function
End Class End Class

View File

@@ -598,7 +598,7 @@ Public Class frmDocumentResultList
e.Menu.Items.Clear() e.Menu.Items.Clear()
For Each oItem In oMenu.GetMenuItems() For Each oItem In oMenu.GetMenuItems(_IsLegacy)
e.Menu.Items.Add(oItem) e.Menu.Items.Add(oItem)
Next Next
End If End If

View File

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

36
Windows/File.vb Normal file
View File

@@ -0,0 +1,36 @@
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windows.NativeMethods
Public Class File
Private _LogConfig As LogConfig
Private _Logger As Logger
Public Sub New(LogConfig As LogConfig)
_LogConfig = LogConfig
_Logger = LogConfig.GetLogger()
End Sub
Public Function OpenFileProperties(FilePath As String) As Boolean
Try
Dim oShellExecuteInfo As New ShellExecuteInfo()
oShellExecuteInfo.cbSize = Marshal.SizeOf(oShellExecuteInfo)
oShellExecuteInfo.lpVerb = "properties"
oShellExecuteInfo.lpFile = FilePath
oShellExecuteInfo.nShow = SW_SHOW
oShellExecuteInfo.fMask = SEE_MASK_INVOKEIDLIST
If Not ShellExecuteEx(oShellExecuteInfo) Then
Dim oWin32Error = Marshal.GetLastWin32Error()
Dim oException As New Win32Exception(oWin32Error)
Throw oException
End If
Return True
Catch ex As Exception
_Logger.Error(ex)
Return False
End Try
End Function
End Class

View File

@@ -5,6 +5,9 @@ Public Class NativeMethods
Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Int32) As Integer Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Int32) As Integer
Public Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As IntPtr, ByVal WinTitle As String, ByVal MaxLength As Integer) As Integer Public Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As IntPtr, ByVal WinTitle As String, ByVal MaxLength As Integer) As Integer
<DllImport("Shell32", CharSet:=CharSet.Auto, SetLastError:=True)>
Public Shared Function ShellExecuteEx(ByRef lpExecInfo As ShellExecuteInfo) As Boolean
End Function
<DllImport("user32.dll")> <DllImport("user32.dll")>
Public Shared Function GetDC(ByVal hwnd As IntPtr) As IntPtr Public Shared Function GetDC(ByVal hwnd As IntPtr) As IntPtr
End Function End Function
@@ -97,6 +100,10 @@ Public Class NativeMethods
Public Const MEM_MAPPED As Integer = &H40000 Public Const MEM_MAPPED As Integer = &H40000
Public Const MEM_TOP_DOWN As Integer = &H100000 Public Const MEM_TOP_DOWN As Integer = &H100000
Public Const INVALID_HANDLE_VALUE As Integer = -1 Public Const INVALID_HANDLE_VALUE As Integer = -1
Public Const SW_SHOW As Short = 5
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Enum PageProtection As UInteger Public Enum PageProtection As UInteger
NoAccess = &H1 NoAccess = &H1
@@ -130,6 +137,24 @@ Public Class NativeMethods
End Function End Function
End Structure End Structure
Public Structure ShellExecuteInfo
Public cbSize As Integer
Public fMask As Integer
Public hwnd As IntPtr
<MarshalAs(UnmanagedType.LPTStr)> Public lpVerb As String
<MarshalAs(UnmanagedType.LPTStr)> Public lpFile As String
<MarshalAs(UnmanagedType.LPTStr)> Public lpParameters As String
<MarshalAs(UnmanagedType.LPTStr)> Public lpDirectory As String
Dim nShow As Integer
Dim hInstApp As IntPtr
Dim lpIDList As IntPtr
<MarshalAs(UnmanagedType.LPTStr)> Public lpClass As String
Public hkeyClass As IntPtr
Public dwHotKey As Integer
Public hIcon As IntPtr
Public hProcess As IntPtr
End Structure
<System.Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> <System.Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)>
Public Structure PointAPI Public Structure PointAPI
Public X As Integer Public X As Integer

View File

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