You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中实现日志文件大小变化后自动执行鼠标点击

解决日志文件变化触发鼠标点击的PowerShell脚本

问题分析

原代码存在几个关键问题:

  • 鼠标点击逻辑错误嵌入FileSystemWatcher的属性初始化代码块,未关联到文件变化事件
  • 未正确定义文件变化事件的处理脚本块$changeAction
  • 缺少必要的.NET程序集加载,导致鼠标操作相关类无法正常工作
  • 未正确声明鼠标点击所需的Win32 API调用

修正后的完整脚本

# 加载必要的.NET程序集
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 声明鼠标点击所需的Win32 API
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class MouseClick {
    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
}
"@

Function Register-LogWatcher {
    param (
        [Parameter(Mandatory=$true)]
        [string]$FolderPath,
        [int]$ClickX = 515,
        [int]$ClickY = 625
    )

    $filter = "Process.log"
    # 创建文件系统监视器
    $watcher = New-Object IO.FileSystemWatcher -ArgumentList $FolderPath, $filter -Property @{
        IncludeSubdirectories = $false
        EnableRaisingEvents = $false
        NotifyFilter = [IO.NotifyFilters]::Size  # 仅监测文件大小变化
    }

    # 定义文件变化时的执行动作
    $changeAction = {
        param($sender, $e)
        # 等待文件写入完成,避免多次触发
        Start-Sleep -Milliseconds 500
        # 移动鼠标到指定位置
        [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($Event.MessageData.X, $Event.MessageData.Y)
        # 模拟鼠标左键按下和释放
        [MouseClick]::mouse_event(0x0002, 0, 0, 0, 0)  # 左键按下
        Start-Sleep -Milliseconds 100
        [MouseClick]::mouse_event(0x0004, 0, 0, 0, 0)  # 左键释放
        Write-Host "检测到Process.log大小变化,已执行鼠标点击操作"
    }

    # 注册文件变化事件,传递点击坐标作为消息数据
    Register-ObjectEvent -InputObject $watcher -EventName "Changed" -Action $changeAction -MessageData @{X=$ClickX; Y=$ClickY} | Out-Null

    # 启用事件监听
    $watcher.EnableRaisingEvents = $true
    Write-Host "日志监视器已启动,正在监测$FolderPath\$filter的大小变化..."
}

# 启动监视器,指定日志文件所在目录
Register-LogWatcher -FolderPath "C:\Users\User\AppData\Temp\3.0\Logs" -ClickX 515 -ClickY 625

关键修正点说明

  • 加载程序集:通过Add-Type加载System.Windows.Forms和System.Drawing,确保鼠标位置控制和点类可用
  • Win32 API声明:正确引入user32.dll的mouse_event方法,实现鼠标点击模拟
  • 事件动作分离:将鼠标点击逻辑放在Changed事件的Action脚本块中,确保仅在文件大小变化时执行
  • 消息数据传递:通过-MessageData将点击坐标传递给事件处理块,避免硬编码,提升灵活性
  • 触发防抖:添加短时间延迟,避免文件写入过程中多次触发事件

内容的提问来源于stack exchange,提问作者Artem Starley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:07:21