Guten Abend,
ich versuche derzeit einen Copy Hook zu schreiben, da MS das CopyHook Beispiel im All-In-On Framework entfernt hatte habe ich die C++ Variante in .net umgeschrieben.
Derzeit scheint es ein Problem mit dem Interface zu geben, da Shell Extension schwer zu Debuggen sind komme ich jetzt nicht weiter. Das einzige was ich sagen kann ist das der explorer die Extension über mscoree lädt, und diese eine Exception auswirft.
Dachte zuerst es gibt ein Problem mit dem Namespace in VB alles in C# umgecodet, hat wenig gebracht. Ansonsten der Assembly ist Signiert und ist für x64 Compiled.
Das C++ Bsp. Project, C# u. VB im Dateianhang
Hier mal ein Ausschnitt, hoffe mal hier kann mir jemand weiterhelfen
Spoiler anzeigen
ich versuche derzeit einen Copy Hook zu schreiben, da MS das CopyHook Beispiel im All-In-On Framework entfernt hatte habe ich die C++ Variante in .net umgeschrieben.
Derzeit scheint es ein Problem mit dem Interface zu geben, da Shell Extension schwer zu Debuggen sind komme ich jetzt nicht weiter. Das einzige was ich sagen kann ist das der explorer die Extension über mscoree lädt, und diese eine Exception auswirft.
Dachte zuerst es gibt ein Problem mit dem Namespace in VB alles in C# umgecodet, hat wenig gebracht. Ansonsten der Assembly ist Signiert und ist für x64 Compiled.
Das C++ Bsp. Project, C# u. VB im Dateianhang
Hier mal ein Ausschnitt, hoffe mal hier kann mir jemand weiterhelfen
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Imports Microsoft.Win32
- #Region "Shell Interfaces"
- <ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), _
- Guid("000214e8-0000-0000-c000-000000000046")> _
- Interface IShellExtInit
- <PreserveSig()> _
- Sub Initialize( _
- ByVal pidlFolder As IntPtr, _
- ByVal pDataObj As IntPtr, _
- ByVal hKeyProgID As IntPtr)
- End Interface
- <ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), _
- Guid("000214FC-0000-0000-C000-000000000046")> _
- Interface ICopyHook
- <PreserveSig()> _
- Function CopyCallback( _
- ByVal hwnd As IntPtr, _
- ByVal wFunc As UInteger, _
- ByVal wFlags As UInteger, _
- <MarshalAs(UnmanagedType.LPStr)> ByVal pszSrcFile As String, _
- ByVal dwSrcAttribs As UInteger, _
- <MarshalAs(UnmanagedType.LPStr)> ByVal pszDestFile As String, _
- ByVal dwDestAttribs As UInteger) As UInteger
- End Interface
- #End Region
- #Region "Enums & Structs"
- Public Enum eCOPYCALLBACK_STATUS As UInteger
- IDCANCEL = 2
- IDYES = 6
- IDNO = 7
- End Enum
- Public Enum eSHELL_FILE_OPERATIONS As UInteger
- FO_MOVE = 1
- FO_COPY = 2
- FO_DELETE = 3
- FO_RENAME = 4
- End Enum
- <StructLayout(LayoutKind.Sequential)> _
- Class SHFILEOPSTRUCT
- Public hwnd As Integer
- Public wFunc As Integer
- <MarshalAs(UnmanagedType.LPWStr)> _
- Public pFrom As String
- <MarshalAs(UnmanagedType.LPWStr)> _
- Public pTo As String
- Public fFlags As Integer
- <MarshalAs(UnmanagedType.Bool)> _
- Public fAnyOperationsAborted As Boolean
- Public hNameMappings As Integer
- <MarshalAs(UnmanagedType.LPWStr)> _
- Public lpszProgressTitle As String
- End Class
- #End Region
- #Region "Shell Registration"
- Friend Class ShellExtReg
- ''' <summary>
- ''' Register the copy hook handler.
- ''' </summary>
- ''' <param name="name"></param>
- ''' <param name="clsid"></param>
- ''' <remarks></remarks>
- Public Shared Sub RegisterShellExtContextMenuHandler( _
- ByVal name As String, _
- ByVal clsid As Guid)
- If clsid = Guid.Empty Then
- Throw New ArgumentException("CLSID must not be empty")
- End If
- Dim keyName As String = String.Format("Directory\shellex\CopyHookHandlers\{0}", name)
- Using key As RegistryKey = Registry.ClassesRoot.CreateSubKey(keyName)
- key.SetValue(Nothing, clsid.ToString("B"))
- End Using
- End Sub
- ''' <summary>
- ''' Unregister the copy hook handler.
- ''' </summary>
- Public Shared Sub UnregisterShellExtContextMenuHandler( _
- ByVal name As String)
- Dim keyName As String = String.Format("Directory\shellex\CopyHookHandlers\{0}", name)
- Registry.ClassesRoot.DeleteSubKeyTree(keyName, False)
- End Sub
- End Class
- #End Region