AutoHotkey 语言 利用 WinAPI 进行系统资源监控

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


AutoHotkey Language: System Resource Monitoring with WinAPI

Introduction

AutoHotkey is a powerful scripting language for automating Windows applications and user actions. It allows users to create scripts that can automate repetitive tasks, simulate keyboard and mouse inputs, and interact with the operating system at a low level. One of the advanced features of AutoHotkey is the ability to use Windows API (Application Programming Interface) functions to interact with system resources and perform complex operations.

In this article, we will explore how to use AutoHotkey in conjunction with WinAPI to monitor system resources such as CPU usage, memory usage, disk usage, and network activity. By leveraging the power of WinAPI, we can create scripts that provide detailed insights into the system's performance and can be used for debugging, performance tuning, or system monitoring.

Prerequisites

Before we dive into the code, ensure that you have the following prerequisites:

1. AutoHotkey installed on your system.
2. Basic knowledge of AutoHotkey scripting.
3. Understanding of Windows API functions.

CPU Usage Monitoring

To monitor CPU usage in AutoHotkey, we can use the `GetSystemTimes` function from the WinAPI. This function retrieves the time that the system has been in use, the time that the user has been active, and the time that the CPU has been in use.

Here's an example script that monitors CPU usage:

ahk
Persistent
SingleInstance, Force

SetTimer, MonitorCPU, 1000 ; Monitor every 1000 milliseconds (1 second)

MonitorCPU:
DllCall("GetSystemTimes", "ptr", &SystemTime)
CPUUsage := (SystemTime.CPUTime - LastCPUTime) / (SystemTime.dwTimeDelta / 1000)
LastCPUTime := SystemTime.CPUTime
MsgBox, CPU Usage: %CPUUsage% %
return

In this script, we use `SetTimer` to run the `MonitorCPU` subroutine every second. The `GetSystemTimes` function fills the `SystemTime` structure with the current system times, and we calculate the CPU usage by comparing the CPU time before and after the interval.

Memory Usage Monitoring

Monitoring memory usage can be done using the `GlobalMemoryStatusEx` function from the WinAPI. This function provides detailed information about the memory usage of the system.

Here's an example script that monitors memory usage:

ahk
Persistent
SingleInstance, Force

SetTimer, MonitorMemory, 1000 ; Monitor every 1000 milliseconds (1 second)

MonitorMemory:
DllCall("GlobalMemoryStatusEx", "ptr", &MemoryStatus)
MsgBox, Memory Usage: %MemoryStatus.dwTotalPhys / 1024 / 1024% MB
return

In this script, we use `SetTimer` to run the `MonitorMemory` subroutine every second. The `GlobalMemoryStatusEx` function fills the `MemoryStatus` structure with memory information, and we calculate the total physical memory in megabytes.

Disk Usage Monitoring

To monitor disk usage, we can use the `GetDiskFreeSpaceEx` function from the WinAPI. This function retrieves the amount of free space on a specified disk volume.

Here's an example script that monitors disk usage on the C: drive:

ahk
Persistent
SingleInstance, Force

SetTimer, MonitorDisk, 1000 ; Monitor every 1000 milliseconds (1 second)

MonitorDisk:
DllCall("GetDiskFreeSpaceEx", "str", "C:", "ptr", &FreeSpace)
MsgBox, Disk Usage: %FreeSpace / 1024 / 1024 / 1024% GB
return

In this script, we use `SetTimer` to run the `MonitorDisk` subroutine every second. The `GetDiskFreeSpaceEx` function fills the `FreeSpace` variable with the free space on the C: drive in bytes, and we convert it to gigabytes.

Network Activity Monitoring

Monitoring network activity can be done using the `GetNetworkInterfaceEx` function from the WinAPI. This function retrieves the network statistics for a specified network interface.

Here's an example script that monitors network activity on the first network interface:

ahk
Persistent
SingleInstance, Force

SetTimer, MonitorNetwork, 1000 ; Monitor every 1000 milliseconds (1 second)

MonitorNetwork:
DllCall("GetNetworkInterfaceEx", "ptr", &NetworkInterface, "uint", 36)
MsgBox, Network Activity: %NetworkInterface.BytesSent / 1024 / 1024% MB/s
return

In this script, we use `SetTimer` to run the `MonitorNetwork` subroutine every second. The `GetNetworkInterfaceEx` function fills the `NetworkInterface` structure with network statistics, and we calculate the bytes sent per second.

Conclusion

In this article, we explored how to use AutoHotkey in conjunction with WinAPI to monitor system resources such as CPU usage, memory usage, disk usage, and network activity. By leveraging the power of WinAPI, we can create scripts that provide detailed insights into the system's performance and can be used for debugging, performance tuning, or system monitoring.

Remember that these scripts are just examples, and you can customize them to suit your specific needs. Happy scripting!