这段脚本实现了动态修改窗口图标的功能。它创建了一个记事本窗口,并调用自定义函数 ChangeWindowIcon
修改其标题栏图标。图标可以从 .ico
文件、.dll
或 .icl
图标库中加载。
#NoEnv
SetBatchLines -1
SetWorkingDir %A_ScriptDir%
Run Notepad
WinWait, ahk_class Notepad
ChangeWindowIcon("shell32.dll", WinExist("ahk_class Notepad"), 204)
Return
; 修改窗口标题图标的函数
ChangeWindowIcon(IconFile, hWnd:="", IconNumber:=1, IconSize:=128) {
; ico图标文件IconNumber和IconSize不用填,如果是icl图标库需要填
hWnd := hWnd ? hWnd : WinExist("A")
if (!hWnd)
Return "窗口不存在!"
if not IconFile~="\.ico$"
hIcon := LoadIcon(IconFile, IconNumber, IconSize)
else
hIcon := DllCall("LoadImage", "uint", 0, "str", IconFile, "uint", 1, "int", 0, "int", 0, "uint", LR_LOADFROMFILE:=0x10)
if (!hIcon)
Return "图标文件不存在!"
SendMessage, WM_SETICON:=0x80, ICON_SMALL2:=0, hIcon,, ahk_id %hWnd% ; 设置窗口的小图标
; SendMessage, STM_SETICON:=0x0170, hIcon, 0,, Ahk_ID %hWnd%
SendMessage, WM_SETICON:=0x80, ICON_BIG:=1, hIcon,, ahk_id %hWnd% ; 将窗口的大图标设置为同一个
}
; 获取exe/dll/icl文件中指定图标找返回
LoadIcon(Filename, IconNumber, IconSize) {
if DllCall("PrivateExtractIcons", "str", Filename, "int", IconNumber-1, "int", IconSize, "int", IconSize
, "ptr*", hIcon, "uint*", 0, "uint", 1, "uint", 0, "ptr")
Return hIcon
}
#NoEnv
SetBatchLines -1
SetWorkingDir %A_ScriptDir%
Run Notepad
WinWait, ahk_class Notepad
ChangeWindowIcon("shell32.dll", WinExist("ahk_class Notepad"), 204)
Return
; 修改窗口标题图标的函数
ChangeWindowIcon(IconFile, hWnd:="", IconNumber:=1, IconSize:=128) {
; ico图标文件IconNumber和IconSize不用填,如果是icl图标库需要填
hWnd := hWnd ? hWnd : WinExist("A")
if (!hWnd)
Return "窗口不存在!"
if not IconFile~="\.ico$"
hIcon := LoadIcon(IconFile, IconNumber, IconSize)
else
hIcon := DllCall("LoadImage", "uint", 0, "str", IconFile, "uint", 1, "int", 0, "int", 0, "uint", LR_LOADFROMFILE:=0x10)
if (!hIcon)
Return "图标文件不存在!"
SendMessage, WM_SETICON:=0x80, ICON_SMALL2:=0, hIcon,, ahk_id %hWnd% ; 设置窗口的小图标
; SendMessage, STM_SETICON:=0x0170, hIcon, 0,, Ahk_ID %hWnd%
SendMessage, WM_SETICON:=0x80, ICON_BIG:=1, hIcon,, ahk_id %hWnd% ; 将窗口的大图标设置为同一个
}
; 获取exe/dll/icl文件中指定图标找返回
LoadIcon(Filename, IconNumber, IconSize) {
if DllCall("PrivateExtractIcons", "str", Filename, "int", IconNumber-1, "int", IconSize, "int", IconSize
, "ptr*", hIcon, "uint*", 0, "uint", 1, "uint", 0, "ptr")
Return hIcon
}
#NoEnv
SetBatchLines -1
SetWorkingDir %A_ScriptDir%
Run Notepad
WinWait, ahk_class Notepad
ChangeWindowIcon("shell32.dll", WinExist("ahk_class Notepad"), 204)
Return
; 修改窗口标题图标的函数
ChangeWindowIcon(IconFile, hWnd:="", IconNumber:=1, IconSize:=128) {
; ico图标文件IconNumber和IconSize不用填,如果是icl图标库需要填
hWnd := hWnd ? hWnd : WinExist("A")
if (!hWnd)
Return "窗口不存在!"
if not IconFile~="\.ico$"
hIcon := LoadIcon(IconFile, IconNumber, IconSize)
else
hIcon := DllCall("LoadImage", "uint", 0, "str", IconFile, "uint", 1, "int", 0, "int", 0, "uint", LR_LOADFROMFILE:=0x10)
if (!hIcon)
Return "图标文件不存在!"
SendMessage, WM_SETICON:=0x80, ICON_SMALL2:=0, hIcon,, ahk_id %hWnd% ; 设置窗口的小图标
; SendMessage, STM_SETICON:=0x0170, hIcon, 0,, Ahk_ID %hWnd%
SendMessage, WM_SETICON:=0x80, ICON_BIG:=1, hIcon,, ahk_id %hWnd% ; 将窗口的大图标设置为同一个
}
; 获取exe/dll/icl文件中指定图标找返回
LoadIcon(Filename, IconNumber, IconSize) {
if DllCall("PrivateExtractIcons", "str", Filename, "int", IconNumber-1, "int", IconSize, "int", IconSize
, "ptr*", hIcon, "uint*", 0, "uint", 1, "uint", 0, "ptr")
Return hIcon
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)