Jaafar.
I added a very basic mouse hook and it works ok. The only problem is the hook is not being unhooked when the dragdropper object is destroyed. The hook code is in module2 and is very basic. I need only be concerned with mousedown messages.
WARNING: This file contains code that will absolutely crash Excel.
Removed: DragDrop4.zip
Thanks...
Module2 code:
<table width="100%" border="1" bgcolor="White" style="filter

rogid:DXImageTransform.Microsoft.Gradient(endColorstr='#C0CFE2', startColorstr='#FFFFFF', gradientType='0');"><tr><TD><font size="2" face=Courier New> <font color="#0000A0">Option</font> <font color="#0000A0">Explicit</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Declare</font> <font color="#0000A0">Function</font> SetWindowsHookEx <font color="#0000A0">Lib</font> "user32" <font color="#0000A0">Alias</font> "SetWindowsHookExA" (ByVal idHook <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> lpfn <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> hmod <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> dwThreadId <font color="#0000A0">As</font> Long) <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Declare</font> <font color="#0000A0">Function</font> UnhookWindowsHookEx <font color="#0000A0">Lib</font> "user32" (ByVal hHook <font color="#0000A0">As</font> Long) <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Declare</font> <font color="#0000A0">Function</font> CallNextHookEx <font color="#0000A0">Lib</font> "user32" (ByVal hHook <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> ncode <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> wParam <font color="#0000A0">As</font> Long, lParam <font color="#0000A0">As</font> Any) <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">Private</font> <font color="#0000A0">Const</font> WH_MOUSE_LL <font color="#0000A0">As</font> <font color="#0000A0">Long</font> = 14
<font color="#0000A0">Private</font> <font color="#0000A0">Const</font> WM_LBUTTONDOWN <font color="#0000A0">As</font> <font color="#0000A0">Long</font> = &H201
<font color="#0000A0">Private</font> hHook <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">Private</font> pDragDropperCBRef <font color="#0000A0">As</font> DragDropper
<font color="#0000A0">Sub</font> DragDropperMouseHookUtility(DragDropperCBRef <font color="#0000A0">As</font> DragDropper)
<font color="#0000A0">Set</font> pDragDropperCBRef = DragDropperCBRef
hHook = SetWindowsHookEx(WH_MOUSE_LL, <font color="#0000A0">AddressOf</font> LowLevelMouseProc, Application.Hinstance, 0)
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Sub</font> StopHooking()
<font color="#0000A0">Set</font> pDragDropperCBRef = <font color="#0000A0">Nothing</font>
UnhookWindowsHookEx hHook
<font color="#0000A0">End</font> <font color="#0000A0">Sub</font>
<font color="#0000A0">Public</font> <font color="#0000A0">Function</font> LowLevelMouseProc _
(ByVal idHook <font color="#0000A0">As</font> Long, <font color="#0000A0">ByVal</font> wParam <font color="#0000A0">As</font> Long, lParam <font color="#0000A0">As</font> Long) <font color="#0000A0">As</font> <font color="#0000A0">Long</font>
<font color="#0000A0">If</font> wParam = WM_LBUTTONDOWN <font color="#0000A0">Then</font>
<font color="#008000"> 'determine if we are over a range that drags are allowed to initiate from</font>
<font color="#0000A0">If</font> pDragDropperCBRef.ValidDragSource <font color="#0000A0">Then</font>
UnhookWindowsHookEx hHook
<font color="#0000A0">End</font> <font color="#0000A0">If</font>
<font color="#0000A0">Else</font>
LowLevelMouseProc = CallNextHookEx(hHook, idHook, wParam, <font color="#0000A0">ByVal</font> lParam)
<font color="#0000A0">End</font> <font color="#0000A0">If</font>
<font color="#0000A0">End</font> <font color="#0000A0">Function</font>
</FONT></td></tr></table><button onclick='document.all("1018200784144516").value=document.all("1018200784144516").value.replace(/<br \/>\s\s/g,"");document.all("1018200784144516").value=document.all("1018200784144516").value.replace(/<br \/>/g,"");window.clipboardData.setData("Text",document.all("1018200784144516").value);'>Copy to Clipboard</BUTTON><textarea style="position:absolute;visibility:hidden" name="1018200784144516" wrap="virtual">
Option Explicit
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WH_MOUSE_LL As Long = 14
Private Const WM_LBUTTONDOWN As Long = &H201
Private hHook As Long
Private pDragDropperCBRef As DragDropper
Sub DragDropperMouseHookUtility(DragDropperCBRef As DragDropper)
Set pDragDropperCBRef = DragDropperCBRef
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf LowLevelMouseProc, Application.Hinstance, 0)
End Sub
Sub StopHooking()
Set pDragDropperCBRef = Nothing
UnhookWindowsHookEx hHook
End Sub
Public Function LowLevelMouseProc _
(ByVal idHook As Long, ByVal wParam As Long, lParam As Long) As Long
If wParam = WM_LBUTTONDOWN Then
'determine if we are over a range that drags are allowed to initiate from
If pDragDropperCBRef.ValidDragSource Then
UnhookWindowsHookEx hHook
End If
Else
LowLevelMouseProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function</textarea>