AHK_V2_自定义控制台日志显示脚本

环境

AutoHotkey v2

代码

/*
=============================================================================
打印日志工具 (print.ahk)
=============================================================================

【功能说明】
这是一个用于 AutoHotkey v2 的日志打印工具,可以在图形界面中显示调试信息和日志输出。

【使用方法】

1. 引入文件:
   #Include print.ahk
   或
   #Include <print>

2. 调用 print() 函数输出日志:
   print("Hello, World!")
   print("变量值:", variable)
   print("数组:", array)
   print("对象:", object)
   
   支持多个参数,会自动用逗号分隔:
   print("参数1", "参数2", 123, array)

3. 显示/隐藏日志窗口:
   按 Ctrl+F10 可以切换日志窗口的显示和隐藏状态
   窗口默认是隐藏的,需要按 Ctrl+F10 才会显示

【快捷键】
   Ctrl+F10  - 显示/隐藏日志窗口

【窗口特性】
   - 窗口可以调整大小
   - 日志内容自动滚动到底部
   - 显示行号格式:[行号]| 内容
   - 点击关闭按钮会隐藏窗口(不会退出程序)

【示例代码】
   #Requires AutoHotkey v2.0
   #Include print.ahk
   
   s1 := "100"
   s2 := 100
   s3 := "autohotkey"
   s4 := {key : "nice"}
   
   print("s1:", s1)
   print("s2:", s2)
   print("s3:", s3)
   print("s4:", s4)

=============================================================================
*/

; Global variables
global guiexist := ""
global printtext := ""
global hEdit := 0
global PrintGui := ""

; Ctrl+F10 切换日志窗口显示/隐藏
^F10::TogglePrintGui()

TogglePrintGui(*) {
	global PrintGui, guiexist
	
	if (!IsObject(PrintGui) || guiexist = "") {
		; 如果窗口不存在,创建并显示
		guiexist := 1
		guishow()
		PrintGui.Show()
	} else {
		; 如果窗口存在,切换显示/隐藏
		if (WinExist("ahk_id " PrintGui.Hwnd)) {
			PrintGui.Hide()
		} else {
			PrintGui.Show()
		}
	}
}

print(arr*) {
	global guiexist, printtext, hEdit, PrintGui
	
	printvalue := ""
	
	for i, v in arr {
		printvalue .= (i = 1 ? "" : ",") json(v)
	}
	
	if (arr.Length = 0)
		printvalue := ""
	
	ex := Error("", -1)
	
	if (guiexist = "") {
		guiexist := 1
		guishow()
	}
	
	printtext .= "[" Format("{:03}", ex.Line) "]| " json(printvalue) "`n"
	
	;printtext .= json(printvalue) "`n"
	
	if (IsObject(PrintGui)) {
		PrintGui["printt1"].Value := printtext
		
		SendMessage(0xB1, -2, -1, , hEdit) ; 将光标移动到末尾
		
		SendMessage(0xB7, 0, 0, , hEdit) ; 滚动到末端
	}
}

guishow(*) {
	global PrintGui, hEdit, printtext
	
	PrintGui := Gui("+Resize", "print")
	PrintGui.BackColor := "000000"
	PrintGui.SetFont("s10 c000000", "verdana")
	
	editCtrl := PrintGui.Add("Edit", "vprintt1 w480 h500 ReadOnly")
	hEdit := editCtrl.Hwnd
	PrintGui["printt1"].Value := printtext
	
	PrintGui.OnEvent("Close", printGuiClose)
	PrintGui.OnEvent("Size", printGuiSize)
	
	; 默认不显示窗口,需要按 Ctrl+F10 来显示
	PrintGui.Show("Hide w500 h515 y360")
}

printGuiClose(*) {
	global PrintGui
	; 关闭窗口时隐藏而不是退出程序
	PrintGui.Hide()
}

printGuiSize(thisGui, MinMax, Width, Height) {
	thisGui["printt1"].Move(, , Width - 15, Height - 15)
}

json(obj) {
	If IsObject(obj) {
		isarray := 0 ; an empty object could be an array... but it ain't, says I
		str := ""
		
		for key in obj {
			if (key != ++isarray) {
				isarray := 0
				Break
			}
		}
		
		for key, val in obj {
			str .= (A_Index = 1 ? "" : ",") (isarray ? "" : json(key) ":") json(val)
		}
		
		return isarray ? "[" str "]" : "{" str "}"
	}
	else {
		return obj
	}
}


点赞

本文标签: AHK

版权声明:本博客所有文章除特别声明外,本文皆为《shiver blog》原创,转载请保留文章出处。

本文链接:AHK_V2_自定义控制台日志显示脚本 - https://www.binary-monster.top/article/81

1

发表评论

电子邮件地址不会被公开。 必填项已用*标注