Click here to Skip to main content
14,659,498 members
Articles » General Programming » Programming Tips » General
Posted 22 Feb 2011

Tagged as


10 bookmarked

How to Embed Multiple Icons and Color/Animated Cursors in .NET Executable or DLL Library as Native Win32 Resources using VS2010

Rate this:
4.80 (5 votes)
Please Sign up or sign in to vote.
4.80 (5 votes)
4 Apr 2012CPOL
A detailed tutorial on how to embed multiple icons and color/animated cursors in VS2010 VB project assembly as native win32 resources.


This is useful if you need your EXE or DLL to provide multiple icons for documents associated with your application. It also provides a way to load color and animated cursors for your forms and/or controls with LoadCursor API. Note: even .NET 4.0 does not support this natively, it can only load black and while cursors.

The Process

Method 1 (simple, but requires repeating following steps after every build):

  1. Open your EXE or DLL in Visual Studio (either from File->Open File or solution explorer).
  2. Add icons and/or cursors to the EXE or DLL.
  3. Save file.

Method 2 (more involved, but done only once):

Note: once this is set up Visual Studio will stop updating assembly information in the output file (file version, description, and more) taken from AssemblyInfo.vb.

  1. Enter assembly information first (ex. Project Properties->Application->Assembly Information).
  2. Build the project.
  3. Open produced EXE or DLL in Visual Studio (either from File->Open File or solution explorer). This opens native resource editor.
  4. Go to File->Save As. Pick 32-bit resource file in Save As type and save file as assemblyWin32.res. Again, resource file (not exe or dll).
  5. Include assemblyWin32.res in your project, and set to compile it as content in Build Action.
  6. Add icons and/or cursors to the assemblyWin32.res file.
  7. Open your project file in notepad (*.vbProj) and add the following block:
  8. You can put it after condition block. Here
    is the example:

    Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">

    Note: IDE will detect changes and ask you to reload your project file. Just press reload.

  9. Build the project.
  10. If you need to change assembly information open resource file and update version information manually. Alternatively, you can remove section added to the project file in step 7 and repeat from step 1.

How to Load Embedded Color Cursor

Dim HighlightPointer As Cursor =   ColorCursor.LoadCursor(101)

''' <summary>
'''   Provides ability to load color and/or animated cursor for the form or control.
'''   Note: cursor must be embedded as native win32 resource in the assembly.
''' </summary>
Private Class ColorCursor

   Private Declare Function LoadCursorAPI Lib "user32.dll" Alias "LoadCursorA" (
       ByVal hInstance As IntPtr, ByVal lpCursorName As String) As IntPtr

   Public Shared Function LoadCursor(ByVal embeddedWin32ResourceID As Integer) As Cursor
      Dim cursor As Cursor = TryLoadCursor(embeddedWin32ResourceID)
      If cursor Is Nothing Then
         Throw New System.ComponentModel.Win32Exception(Err.LastDllError)
         Return cursor
      End If
   End Function

   Public Shared Function TryLoadCursor(ByVal embeddedWin32ResourceID As Integer) As Cursor
      Dim hInstance As IntPtr = System.Runtime.InteropServices.Marshal.GetHINSTANCE(
      Dim cPtr As IntPtr = LoadCursorAPI(hInstance, "#" & embeddedWin32ResourceID)
      If cPtr = IntPtr.Zero Then
         Return Nothing
         Return New Cursor(cPtr)
      End If
   End Function

End Class

Similar Articles

Embedding Multiple Icons into .NET Executables By Ed.Poore Note: Ed’s article is based on C# and VS2005. The template to create *.res file is no longer available in VS2010.


02/22/2011, Initial Rev.

04/04/2012, Updated title and method 2 to handle assembly information.  


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

United States United States
No Biography provided

Comments and Discussions

QuestionDon't Download has Trojan.MSIL Inside Pin
Toni_s7-Apr-14 22:52
MemberToni_s7-Apr-14 22:52 
GeneralAwesome! Pin
ChewsHumans22-Mar-12 13:50
MemberChewsHumans22-Mar-12 13:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.