Click here to Skip to main content
Click here to Skip to main content

Tagged as

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

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

Introduction

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:
    <PropertyGroup>
        <Win32Resource>assemblyWin32.res</Win32Resource>
    </PropertyGroup>
  8. You can put it after condition block. Here
    is the example:

    <PropertyGroup
    Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
       ...
       ...
    </PropertyGroup>

    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

   'Usage  
   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)
         Else
            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(
             System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0))
         Dim cPtr As IntPtr = LoadCursorAPI(hInstance, "#" & embeddedWin32ResourceID)
         If cPtr = IntPtr.Zero Then
            Return Nothing
         Else
            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.

History

02/22/2011, Initial Rev.

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

License

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

Share

About the Author

CodeMajster

United States United States
No Biography provided

Comments and Discussions

 
QuestionDon't Download has Trojan.MSIL Inside PinmemberToni_s7-Apr-14 23:52 
GeneralAwesome! PinmemberChewsHumans22-Mar-12 14:50 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.1411023.1 | Last Updated 5 Apr 2012
Article Copyright 2011 by CodeMajster
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid