Самый простой способ сделать это, кажется, просто меняя мышь курсор на составное изображение курсора мыши по умолчанию и изображение, которое вы хотите после него. Затем после того, как вы закончите, измените его на указатель мыши по умолчанию.
Есть способы сделать это с помощью P/Invokes, но вот теория о том, как это сделать без них. В примерах, которые я запускал через P/Invokes, в основном используется для получения указателя на/для созданной структуры курсора и Marshalled в неуправляемую память. Затем указатель передается конструктору для класса System.Windows.Forms.Cursor.
Однако в классе курсора есть перегрузка, которая принимает поток памяти. Если бы одна и та же структура файлов курсора могла быть построена в потоке памяти, ее затем можно было бы передать в конструктор, который дал бы нам курсор для изменения. Файл изображения «cur» очень похож на файл «ico» и довольно прост. Он состоит из небольшого заголовка, каталога изображений и, наконец, самих данных изображения (Wikipedia entry on the ICO file format). Это не должно быть слишком сложно построить, а затем записать в поток памяти.