Drag And Drop и Scroll в TreeView C#

Не так давно пришлось делать DragAndDrop для TreeView и с удивлением обнаружил что на .NET не работает сама собой прокрутка (никак не работает, как выяснилось Microsoft признаёт что есть такая проблема, и предлагают её решать способом описанным ниже).

Итак сам способ.

Вопервых импортируем функцию из user32 — SendMessage
Для этого разумеется не забываем включить в проект (using System.Runtime.InteropServices;)

[DllImport("user32.dll")]
public static extern int SendMessage(
       int hWnd,      // handle to destination window
       uint Msg,       // message
       long wParam,  // first message parameter
       long lParam   // second message parameter
       );
Подробнее