首页 > 解决方案 > 无法使用vba更改任务栏中的excel图标

问题描述

我正在使用以下代码将 Windows 任务栏中的单词图标从通常的单词图标更改为我制作的图标。

但这不起作用...仅更改应用程序或用户窗体左上角的小图标。(不是任务栏)

我在网上尝试了解决方案,包括此链接( 如何在加载时更改任务栏中的 Excel 图标无法使用 vba 更改 excel 图标(在任务栏中))并在 stackoverflow.com 上进行搜索,但无济于事。

我正在使用 Windows 10 和 word 2010(我也在 excel 上尝试过这段代码,但它是一样的。)

我希望有人能帮帮忙....

#If VBA7 And Win64 Then

    Private Declare PtrSafe Function ExtractIconA Lib "shell32.dll" _
                                    (ByVal hInst As LongPtr, _
                                    ByVal lpszExeFileName As String, _
                                    ByVal nIconIndex As Long) As LongPtr
 
    Private Declare PtrSafe Function SendMessageA Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                    ByVal wMsg As Long, _
                                    ByVal wParam As LongPtr, _
                                    ByVal lParam As LongPtr) As LongPtr
 
    Declare PtrSafe Function GetActiveWindow32 Lib "user32" Alias "GetActiveWindow" () As Long
    
    
    Private Const ICON_SMALL    As LongPtr = 0&
    Private Const ICON_BIG      As LongPtr = 1&
    Dim hwndIcon                As LongPtr
 
#Else
 
    Declare Function GetActiveWindow32 Lib "user32" Alias "GetActiveWindow" () As Integer
    Declare Function SendMessage32 Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Declare Function ExtractIcon32 Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
 
    Private Const ICON_SMALL    As Long = 0&
    Private Const ICON_BIG      As Long = 1&
    Dim hwndIcon                As Long
 
#End If

Private Const WM_SETICON    As Long = &H80




Public Sub ChangeApplicationIcon()
    
    bigIcon_Path = ThisDocument.path & "\DataDontTouch\Icon\32X32B32.ico"
    smallIcon_Path = ThisDocument.path & "\DataDontTouch\Icon\16X16B32.ico"

    bigIcon = ExtractIconA(0, bigIcon_Path, 0)
    smallIcon = ExtractIconA(0, smallIcon_Path, 0)
 
    SendMessageA GetActiveWindow32(), &H80, 0&, smallIcon 
    SendMessageA GetActiveWindow32(), &H80, 1&, bigIcon 


    ActiveWindow.Caption = "Fast.exe"

End Sub

标签: excelvbams-wordiconsms-office

解决方案


推荐阅读