Implementing ICopyHook

Before we begin implementation of ICopyHook, we need to add a new class to the RadEx project called clsCopyHook. The class needs to implement both ICopyHookA and ICopyHookW:

'clsCopyHook.cls

Implements ICopyHookA
Implements ICopyHookW

Also, the address of CopyCallback for both versions of ICopyHook will need to be swapped out in the vtable. We have to do this because CopyCallback will need to return one of three values: IDYES, IDNO, or IDCANCEL. This code, which should be very familiar to you by now, is shown in Example 9.2.

Example 9-2. Class_Initialize Event for Copy Hook Handler

'clsCopyHook.cls

Private m_pOldCopyCallbackA As Long
Private m_pOldCopyCallbackW As Long

Private Sub Class_Initialize(  )
        
    Dim pCopyHookA As ICopyHookA
    Set pCopyHookA = Me
    
    m_pOldCopyCallbackA = SwapVtableEntry( _ 
                          ObjPtr(pCopyHookA), _ 
                          4, _ 
                          AddressOf CopyCallbackA)
    
    Dim pCopyHookW As ICopyHookW
    Set pCopyHookW = Me
    
    m_pOldCopyCallbackW = SwapVtableEntry( _ 
                          ObjPtr(pCopyHookW), _ 
                          4, _ 
                          AddressOf CopyCallbackW)
End Sub

The preceding code is something we’ve seen before.

All that remains now (this is a lie, of course) is to implement CopyCallbackA and CopyCallbackW. For now, our copy hook handler will do nothing but display a message box that says “Access Denied” and then it will return IDNO. Later, we will reimplement the function to display all of the parameters passed in by the shell.

Example 9.3 shows our implementation of CopyCallback. The code is self-explanatory. All it does is display ...

Get VB Shell Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.