AutoHotkey 语言 监控系统内存占用峰值示例

AutoHotkey阿木 发布于 2025-06-12 10 次阅读


文章阿木博主一句话概括:AutoHotkey 语言实现监控系统内存占用峰值示例

AutoHotkey(简称AHK)是一款开源自动化脚本语言,它允许用户通过编写脚本来自动化日常任务,如键盘快捷键、鼠标操作、窗口管理等。在系统监控方面,AutoHotkey 也可以发挥其强大的功能。本文将围绕监控系统内存占用峰值这一主题,通过AutoHotkey脚本实现实时监控内存使用情况,并记录内存占用峰值。

AutoHotkey 简介

AutoHotkey 是一种轻量级的脚本语言,它具有以下特点:

- 简单易学:AutoHotkey 的语法类似于C语言,易于上手。
- 功能强大:AutoHotkey 支持多种功能,如键盘、鼠标操作、窗口管理、文件操作等。
- 跨平台:AutoHotkey 支持Windows操作系统。
- 开源免费:AutoHotkey 是一款开源软件,用户可以免费使用。

监控系统内存占用峰值

1. 获取内存占用信息

在AutoHotkey中,我们可以使用Windows API函数来获取内存占用信息。以下是一个示例代码,用于获取当前进程的内存占用:

ahk
Persistent
SingleInstance, Force

Process, Exist, notepad.exe
PID := ErrorLevel

if (PID)
{
VarSetCapacity(PROCESS_MEMORY_COUNTERS, 148, 0)
NumPut(148, PROCESS_MEMORY_COUNTERS, 0, "UInt")
DllCall("Psapi.dllProcessMemoryCounters", "Ptr", PID, "Ptr", &PROCESS_MEMORY_COUNTERS, "Ptr", 0)

; 获取内存占用信息
PagefileUsage := NumGet(PROCESS_MEMORY_COUNTERS, 40, "UInt")
WorkingSetSize := NumGet(PROCESS_MEMORY_COUNTERS, 56, "UInt")

MsgBox, 当前进程内存占用:`nPagefileUsage: %PagefileUsage% 字节`nWorkingSetSize: %WorkingSetSize% 字节
}
else
{
MsgBox, 找不到进程
}

2. 实时监控内存占用峰值

为了实时监控内存占用峰值,我们可以将上述代码封装成一个函数,并在循环中调用该函数。以下是一个示例代码:

ahk
Persistent
SingleInstance, Force

; 初始化内存占用峰值变量
MaxPagefileUsage := 0
MaxWorkingSetSize := 0

Loop
{
Process, Exist, notepad.exe
PID := ErrorLevel

if (PID)
{
VarSetCapacity(PROCESS_MEMORY_COUNTERS, 148, 0)
NumPut(148, PROCESS_MEMORY_COUNTERS, 0, "UInt")
DllCall("Psapi.dllProcessMemoryCounters", "Ptr", PID, "Ptr", &PROCESS_MEMORY_COUNTERS, "Ptr", 0)

; 获取内存占用信息
PagefileUsage := NumGet(PROCESS_MEMORY_COUNTERS, 40, "UInt")
WorkingSetSize := NumGet(PROCESS_MEMORY_COUNTERS, 56, "UInt")

; 更新内存占用峰值
if (PagefileUsage > MaxPagefileUsage)
{
MaxPagefileUsage := PagefileUsage
}
if (WorkingSetSize > MaxWorkingSetSize)
{
MaxWorkingSetSize := WorkingSetSize
}
}

; 显示内存占用峰值
MsgBox, 当前进程内存占用峰值:`nPagefileUsage: %MaxPagefileUsage% 字节`nWorkingSetSize: %MaxWorkingSetSize% 字节

; 等待一段时间后再次检查
Sleep, 1000
}

3. 保存内存占用峰值信息

为了方便后续查看和分析,我们可以将内存占用峰值信息保存到文件中。以下是一个示例代码:

ahk
Persistent
SingleInstance, Force

; 初始化内存占用峰值变量
MaxPagefileUsage := 0
MaxWorkingSetSize := 0

Loop
{
Process, Exist, notepad.exe
PID := ErrorLevel

if (PID)
{
VarSetCapacity(PROCESS_MEMORY_COUNTERS, 148, 0)
NumPut(148, PROCESS_MEMORY_COUNTERS, 0, "UInt")
DllCall("Psapi.dllProcessMemoryCounters", "Ptr", PID, "Ptr", &PROCESS_MEMORY_COUNTERS, "Ptr", 0)

; 获取内存占用信息
PagefileUsage := NumGet(PROCESS_MEMORY_COUNTERS, 40, "UInt")
WorkingSetSize := NumGet(PROCESS_MEMORY_COUNTERS, 56, "UInt")

; 更新内存占用峰值
if (PagefileUsage > MaxPagefileUsage)
{
MaxPagefileUsage := PagefileUsage
}
if (WorkingSetSize > MaxWorkingSetSize)
{
MaxWorkingSetSize := WorkingSetSize
}
}

; 保存内存占用峰值信息
FileAppend, %A_Now% - PagefileUsage: %MaxPagefileUsage% 字节`nWorkingSetSize: %MaxWorkingSetSize% 字节`n`n, MemoryUsage.txt

; 等待一段时间后再次检查
Sleep, 1000
}

总结

本文通过AutoHotkey脚本实现了监控系统内存占用峰值的功能。在实际应用中,我们可以根据需要修改代码,以适应不同的监控需求。AutoHotkey 作为一款轻量级的脚本语言,在系统监控方面具有很大的潜力。希望本文能对您有所帮助。