C#如何创建带自定义事件触发器的计划任务,连接指定WIFI时触发登录操作
解决方案:为IEventTrigger配置WLAN连接事件XML查询规则
你只需要在创建IEventTrigger实例后,将你准备好的XML查询内容赋值给它的Subscription属性即可。C#中可以用逐字字符串处理XML的双引号转义问题,记得将XML中的WIFINAME替换为你要监听的目标WIFI SSID。
修改后的对应代码片段如下:
IEventTrigger con1 = (IEventTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_EVENT); // 赋值事件查询XML,替换为你实际要监听的WIFI名称 con1.Subscription = @"<QueryList> <Query Id=""0"" Path=""Microsoft-Windows-WLAN-AutoConfig/Operational""> <Select Path=""Microsoft-Windows-WLAN-AutoConfig/Operational"">*[System[Provider[@Name='Microsoft-Windows-WLAN-AutoConfig'] and (EventID=8001)]][EventData[Data[@Name='SSID']='你要监听的WIFI_SSID']]</Select> </Query> </QueryList>";
可选优化:可以为触发器增加3秒延迟,避免WIFI刚连接时网络未初始化完成导致登录失败,代码如下:
con1.Delay = "PT3S";
注意事项
- 请提前确认Windows系统的
Microsoft-Windows-WLAN-AutoConfig/Operational日志处于开启状态,否则不会产生8001连接事件,导致触发器无法触发 - 你原有代码中配置的最高运行权限
TASK_RUNLEVEL_HIGHEST是必要配置,否则任务可能没有权限读取系统事件日志 - 若需要调试查询规则是否正确,可以先打开Windows事件查看器,在「自定义视图」中新建视图,粘贴上述XML查询验证是否能筛选到对应的WIFI连接事件,排除XML语法错误问题
内容的提问来源于stack exchange,提问作者IShirai_KurokoI
相关产品推荐
相关产品推荐

