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

如何捕获Notepad会话关闭事件?基于Windows Embedded Standard 7与TwinCAT3环境

捕获Notepad关闭事件并触发指定程序的可行方案(Windows Embedded Standard 7 + TwinCAT3环境)

针对你的场景,我整理了几个实用的方案,你可以根据自己的开发习惯和需求来选择:

方案1:编写进程监控程序(可集成到TwinCAT3项目)

因为你在Visual Studio里用TwinCAT3开发,最直接的方式是写一个轻量的监控程序,跟踪notepad.exe的退出事件。这里给你一个C#的示例(可以直接放到TwinCAT的C#项目中,或者单独编译成EXE):

using System;
using System.Diagnostics;
using System.Threading.Tasks;

class NotepadExitMonitor
{
    static async Task Main(string[] args)
    {
        // 目标进程名(不带.exe后缀)
        string targetProcess = "notepad";
        // 替换成你要自动运行的程序路径
        string programToLaunch = @"C:\Your\Target\Program.exe";

        while (true)
        {
            // 查找当前运行的所有记事本进程
            Process[] activeNotepads = Process.GetProcessesByName(targetProcess);
            
            foreach (var proc in activeNotepads)
            {
                // 等待该记事本进程退出
                await Task.Run(() => proc.WaitForExit());
                // 进程退出后启动指定程序
                Process.Start(programToLaunch);
            }

            // 每秒检查一次,避免占用过多CPU资源
            await Task.Delay(1000);
        }
    }
}

注意事项:

  • 如果需要监控多个Notepad实例,这个代码会在每个实例退出时都触发程序;如果只需要全局触发一次,可以调整逻辑(比如记录已监控的进程ID,避免重复处理)
  • 可以把这个程序设置为Windows开机自启:放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup文件夹,或者添加到注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run项中
  • Windows Embedded Standard 7需要确保已安装.NET Framework(对应你编译代码的版本)

方案2:利用Windows任务计划程序(无代码方案)

如果你不想写代码,可以用Windows自带的任务计划程序,通过监控系统事件日志来触发程序:

  1. 打开任务计划程序,点击「创建任务」
  2. 在「触发器」选项卡,点击「新建」,选择「当特定事件被记录时」:
    • 日志选择「系统」,来源选择「EventLog」,事件ID填写「109」(这个ID对应进程终止事件)
    • 点击「编辑事件筛选器」,切换到「XML」标签,粘贴以下筛选规则(过滤出Notepad的退出事件):
      <QueryList>
        <Query Id="0" Path="System">
          <Select Path="System">*[System[Provider[@Name='EventLog'] and EventID=109]] and *[EventData[Data='notepad.exe']]</Select>
        </Query>
      </QueryList>
      
  3. 在「操作」选项卡,点击「新建」,选择「启动程序」,填写你要运行的程序路径和参数
  4. 在「设置」选项卡,勾选「不管用户是否登录都要运行」(如果需要后台执行),并确保「如果任务失败,重新启动」的选项符合你的需求

注意事项:

  • 确保Windows Embedded Standard 7的「事件日志」服务和「任务计划程序」服务已启用
  • 部分Embedded系统可能精简了事件日志功能,需要先确认系统能记录进程终止事件

方案3:结合TwinCAT3自动化接口(联动PLC逻辑)

如果需要把Notepad关闭事件和TwinCAT3的PLC程序联动(比如触发PLC内部逻辑),可以用TwinCAT的.NET ADS接口来实现:

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using TwinCAT.Ads;

class TcNotepadMonitor
{
    static async Task Main(string[] args)
    {
        string targetProcess = "notepad";
        string programToLaunch = @"C:\Your\Target\Program.exe";
        
        // 连接本地TwinCAT ADS服务器(默认端口851)
        using (TcAdsClient adsClient = new TcAdsClient())
        {
            adsClient.Connect(851);

            while (true)
            {
                Process[] activeNotepads = Process.GetProcessesByName(targetProcess);
                
                foreach (var proc in activeNotepads)
                {
                    await Task.Run(() => proc.WaitForExit());
                    // 启动指定程序
                    Process.Start(programToLaunch);
                    // 可选:给PLC变量写入值,通知事件发生(比如MAIN块的bNotepadClosed变量)
                    adsClient.WriteAny("MAIN.bNotepadClosed", true);
                }

                await Task.Delay(1000);
            }
        }
    }
}

注意事项:

  • 需要在TwinCAT项目中引用TwinCAT.Ads.dll(通常在TwinCAT安装目录下)
  • 确保TwinCAT运行时已在Windows Embedded Standard 7中正确安装并启动
  • PLC变量需要提前在TwinCAT工程中定义,并且权限设置允许外部写入

内容的提问来源于stack exchange,提问作者Mike Kohlberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:30