代码主要实现了在一个GUI窗口中显示多个带有超链接的文本,并允许修改这些超链接的颜色。

 

#SingleInstance Force

; 添加控件
Gui, Add, Button, w0 h0 ; 用于Focus
link_text := "测试效果0 <a href=""https://autohotkey.com"">AutoHotkey</a> 测试效果1  <a href=""https://www.autohotkey.com/boards/"">AutoHotkey Community</a> 测试效果2"
Gui, Add, Link, vMyLink xp yp cff0000, %link_text%

; 获取Link控件句柄
GuiControlGet, LinkHwnd, Hwnd, MyLink

; 设置链接颜色
; SetSysLinkColor(LinkHwnd, 1)  ; 设置第二个链接的颜色


; 使用正则表达式计算链接数量
RegExReplace(link_text, "O)<a\s+href[^>]*>[^<]*</a>",,linkCount)

; 设置所有链接的颜色
Loop, %linkCount%
  SetSysLinkColor(LinkHwnd, A_Index - 1)  ; 索引从0开始

; 显示GUI
Gui, Show, AutoSize

return

SetSysLinkColor(linkObj, index=0) {
  static LM_SETITEM := 0x702, LIF_ITEMINDEX := 0x1, LIF_STATE := 0x2, LIS_DEFAULTCOLORS := 0x10

  ; 创建LITEM结构
  VarSetCapacity(LITEM, 16, 0)
  mask := LIF_ITEMINDEX | LIF_STATE
  NumPut(mask, LITEM, 0, "UInt")  ; mask
  if (index > 0)
    NumPut(index, LITEM, 4, "Int")  ; iLink
  state := LIS_DEFAULTCOLORS
  NumPut(state, LITEM, 8, "UInt")  ; state
  NumPut(state, LITEM, 12, "UInt")  ; stateMask

  ; 发送消息
  SendMessage, LM_SETITEM, 0, &LITEM,, ahk_id %linkObj%
}

GuiClose:
ExitApp

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。