Results 1 to 3 of 3

Thread: How to change the app icon displayed at the windows taskbar during runtime?

  1. #1

    Thread Starter
    Fanatic Member Mith's Avatar
    Join Date
    Jul 2017
    Location
    Thailand
    Posts
    540

    Question How to change the app icon displayed at the windows taskbar during runtime?

    hi,

    at the load event of my form i use the API SendMessage with WM_SETICON to set the 16px icon (ICON_SMALL) for the form and the 32px icon (ICON_BIG) for the taskbar/app-switcher.

    If i use the API SendMessage with WM_SETICON & ICON_BIG later during runtime the icon at the windows taskbar doesnt change anymore. But the 32px icon at the app-switcher (ALT+TAB) is changed!

    Does anyone know how to change the app icon displayed at the windows taskbar during runtime?

  2. #2
    Fanatic Member
    Join Date
    Jun 2016
    Location
    España
    Posts
    630

    Re: How to change the app icon displayed at the windows taskbar during runtime?

    I use this I do not know if it will work for you.

    Code:
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    
    Private Const SM_CXICON = 11
    Private Const SM_CYICON = 12
    
    Private Const SM_CXSMICON = 49
    Private Const SM_CYSMICON = 50
       
    Private Declare Function LoadImageAsString Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal uType As Long, ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal fuLoad As Long) As Long
       
    Private Const LR_DEFAULTCOLOR = &H0
    Private Const LR_MONOCHROME = &H1
    Private Const LR_COLOR = &H2
    Private Const LR_COPYRETURNORG = &H4
    Private Const LR_COPYDELETEORG = &H8
    Private Const LR_LOADFROMFILE = &H10
    Private Const LR_LOADTRANSPARENT = &H20
    Private Const LR_DEFAULTSIZE = &H40
    Private Const LR_VGACOLOR = &H80
    Private Const LR_LOADMAP3DCOLORS = &H1000
    Private Const LR_CREATEDIBSECTION = &H2000
    Private Const LR_COPYFROMRESOURCE = &H4000
    Private Const LR_SHARED = &H8000&
    
    Private Const IMAGE_ICON = 1
    
    Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    
    Private Const WM_SETICON = &H80
    
    Private Const ICON_SMALL = 0
    Private Const ICON_BIG = 1
    
    Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
    Private Const GW_OWNER = 4
    
    
    Public Sub SetIcon(ByVal hWnd As Long, ByVal sIconResName As String, Optional ByVal bSetAsAppIcon As Boolean = True)
    Dim lhWndTop As Long
    Dim lhWnd As Long
    Dim cx As Long
    Dim cy As Long
    Dim hIconLarge As Long
    Dim hIconSmall As Long
          
       If (bSetAsAppIcon) Then
          ' Find VB's hidden parent window:
          lhWnd = hWnd
          lhWndTop = lhWnd
          Do While Not (lhWnd = 0)
             lhWnd = GetWindow(lhWnd, GW_OWNER)
             If Not (lhWnd = 0) Then
                lhWndTop = lhWnd
             End If
          Loop
       End If
       
       cx = GetSystemMetrics(SM_CXICON)
       cy = GetSystemMetrics(SM_CYICON)
       hIconLarge = LoadImageAsString(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED)
       If (bSetAsAppIcon) Then
          SendMessageLong lhWndTop, WM_SETICON, ICON_BIG, hIconLarge
       End If
       SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIconLarge
       
       cx = GetSystemMetrics(SM_CXSMICON)
       cy = GetSystemMetrics(SM_CYSMICON)
       hIconSmall = LoadImageAsString(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED)
       If (bSetAsAppIcon) Then
          SendMessageLong lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall
       End If
       SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIconSmall
       
    End Sub
    Use:
    Code:
    Private Sub Form_Load()
        SetIcon Me.hWnd, "AAA", True
    End Sub

  3. #3

    Thread Starter
    Fanatic Member Mith's Avatar
    Join Date
    Jul 2017
    Location
    Thailand
    Posts
    540

    Re: How to change the app icon displayed at the windows taskbar during runtime?

    Quote Originally Posted by yokesee View Post
    I use this I do not know if it will work for you.
    I use a similar code but the code (SendMessageLong & WM_SETICON & ICON_BIG) works only at the form_load event.
    After the form is loaded the code doesnt change the icon at the windows taskbar anymore.
    You can try it yourself. I tested the code with Win8/10/11.

    I just hope there is another API to change the icon at the windows taskbar at runtime (after the form is loaded)...

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width