JohnOne, This is my hobbyist coder attempt to explain it - no doubt a guru will be along in a while and blind you with all sorts of wondeful pixie-dust. I have only used DLLCallBackRegister when I an subclassing controls - that means to replace the procedure that they execute when actioned. It works like this: - 1. You write a new procedure for the control so that it does something different when actioned, An example is my NoFocusLines UDF where I tell the controls not to honour the $WM_SETFOCUS message so as not to get the dotted lines - look at the _NoFocusLines_Proc function within the UDF. - 2. You now register the procedure by using DllCallbackRegister like this: $hNoFocusLines_Proc = DllCallbackRegister("_NoFocusLines_Proc", "int", "hwnd;uint;wparam;lparam")This reserves a chunk of memory that contains the code you want Windows to run later and returns a handle to the procedure you have now registered. You also need a pointer so Windows know where to find it: $pNew_WindowProc= DllCallbackGetPtr($hNoFocusLines_Proc) - 3. Now we can tell Windows to replace the current procedure for a control with the one we have registered: $aRet = _WinAPI_SetWindowLong($hWnd, -4, $pNew_WindowProc) - 4. And when that control is now actioned it will use our procedure and not the default one. In the case of my UDF I wanted to pass on all other messages to the default Windows procedure for the control - the handle to which is returned by the WinAPI call we made earlier. So I can do this by using a call to _WinAPI_CallWindowProc(The_Returned_Handle, $hWnd, $iMsg, $wParam, $lParam) as the final line of my replacement procedure. - 5. And then when you have done and want to exit, you have to do the reverse - reset the control to the normal procedure by using _WinAPI_SetWindowLong again and finally clear the memory you reserved with the original DllCallbackRegister call by using DllCallbackFree. Head hurting yet? M23 P.S. Do not use the Beta if you want to play with this function (or the UDF I mentioned above) as it is not working correctly - it is fine with 3.3.8.1.