Реализовать UnSubclassing для Excel - VB

Узнай цену своей работы

Формулировка задачи:

Написал прогу для постановки Excel в очередь получателей извещения об изменении содержимого буфера обмена. Взял за основу субклассинг от Jaafar Tribak. Возникла проблема с остановкой субклассинга. Вручную (не закрывая Excel) получается. Но хочется, чтобы этот процесс сам корректно завершался по нажатию крестика. Из-под события Thisworkbook_BeforeClose() не получается, т.к. Excel "падает" в тот момент, когда это событие еще не начало выполняться. Возможно ли по-другому успеть перехватить событие закрытия книги, чтобы во время завершить субклассинг (строка 106)?

Решение задачи: «Реализовать UnSubclassing для Excel»

textual
Листинг программы
'UnSubClass
Private Const WM_SYSCOMMAND As Long = &H112&
Private Const SC_CLOSE As Long = &HF060&
....
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uMsg
        Case WM_DRAWCLIPBOARD 'The clipboard has changed...
            MsgBox "The clipboard has changed..."
            SendMessage GetProp(GetDesktopWindow, "NextClipBoardViewerHWnd"), uMsg, wParam, lParam
 
        Case WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...
            If wParam = GetProp(GetDesktopWindow, "NextClipBoardViewerHWnd") Then
                SetProp GetDesktopWindow, "NextClipBoardViewerHWnd", lParam
            Else
                SendMessage GetProp(GetDesktopWindow, "NextClipBoardViewerHWnd"), uMsg, wParam, lParam
            End If
        Case WM_SYSCOMMAND
            If wParam = SC_CLOSE Then
                Call UnSubClassExcel(Application.hwnd)
                WindowProc = 0
                PostMessage hwnd, WM_SYSCOMMAND, SC_CLOSE, lParam
            End If
   End Select
   If flag Then WindowProc = CallWindowProc(lOldWinProc, hwnd, uMsg, wParam, lParam)
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5