首页 > 编程语言 >C#WPF开发电脑进入锁屏状态退出微信的程序

C#WPF开发电脑进入锁屏状态退出微信的程序

时间:2024-02-06 17:13:55浏览次数:37  
标签:case C# 微信 程序 锁屏 SessionSwitchReason break ExecSession

前因:当电脑登了微信,手机微信通知设置了”windows微信已登录,手机通知关闭“,这个时候手机的系统通知栏不会通知

直接原因:我下班回家,个人习惯是直接锁屏不关机,经常忘记退出微信,然后导致回到家接收不到微信通知,漏掉很多朋友的消息

结果:所以想开发一个程序,当我电脑锁屏后直接关掉微信,让我手机能够正常通知到,故开发了此程序,很简单,下列是主要的代码逻辑

public partial class App : Application
{
    private static System.Threading.Mutex IMutex;
    protected override void OnStartup(StartupEventArgs e)
    {
        SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
        string MyAppID = "OnlyRun_Client";//运行进程互斥标识名称 可自行修改
        IMutex = new System.Threading.Mutex(true, MyAppID);
        if (IMutex.WaitOne(0, false))
        {
            ///正常启动程序
            base.OnStartup(e);
        }
        else
        {
            MessageBox.Show("程序已经在运行!", "提示", MessageBoxButton.OK, MessageBoxImage.Asterisk);
            this.Shutdown();//已存在运行进程 执行关闭
        }
    }

    void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
    {
        var session = e.Reason;
        switch (session)
        {
            //用户登录
            case SessionSwitchReason.SessionLogon:
                ExecSession("用户登录");
                break;
            //解锁屏
            case SessionSwitchReason.SessionUnlock:
                ExecSession("解锁屏");
                break;
            //锁屏
            case SessionSwitchReason.SessionLock:
                BeginSessionLock();
                break;
            //注销
            case SessionSwitchReason.SessionLogoff:
                ExecSession("注销");
                break;
        }
    }

    private void ExecSession(string msg)
    {
        Console.WriteLine("===>" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "  " + msg + "\n");
        CommonLog.LogWrite(msg);
    }

    /// <summary>
    /// 锁屏后执行
    /// </summary>
    private void BeginSessionLock()
    {
        ExecSession("锁屏后执行\n");
        string isopen = Config.ReadIni("EnableOpen", "IsOpen", null);
        if(isopen == "1")
        {
            Common.RunCmd("taskkill  /F /IM wechat.exe");
            ExecSession("执行完成\n");
        }
        
    }
}

个人程序我上传到gitee,路径是 

https://gitee.com/wzhsun/start-tool

你可以修改成关闭其他程序,希望该程序能解决大家的困扰

程序可以去网盘下载

链接:https://pan.baidu.com/s/17JCH0MaO1UwKf6Biv5xL_w
提取码:x25t

标签:case,C#,微信,程序,锁屏,SessionSwitchReason,break,ExecSession
From: https://www.cnblogs.com/wzhsun/p/18010031

相关文章

  • [office] Excel怎么设置从指定部分分页打印
    excel表格中的指定一部分数据想分成两页打印,该怎么设置呢?下面就跟小编一起看看吧。Excel设置从指定部分分页打印的步骤1、现有如下字段:按班级进行打印。一班的同学打印在一张纸上。二班的同学打印在一张纸上!2、点击视图菜单下面的分页预览3、选择要分割的......
  • 全网最详细的CentOS安装教程
    1资料准备1.1VMware17.0虚拟机1.2Linux系统1.3Linux系统连接工具1.4数据库可视化工具dbeaver下载(免费):https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe备注:navicat界面操作更简单一些2软件安装2.1虚拟机目前VMwareWorkstation与VirtualBox两款虚拟机使用较为......
  • 如何通过主机cPanel面板进入通过Softaculous已安装的WordPress后台
    近期接到一位用户的反馈,表示自己有一台Hostease的Linux虚拟主机,并且在cPanel面板上面通过Softaculous中的WordPress软件进行了一键安装操作,但是由于有段时间没使用,不记得WordPress后台的用户名和密码。因此想要知道如何从Hostease的Linux虚拟主机cPanel面板后台直接登陆我他的word......
  • 解决VS Code中使用WSL开发Ruby程序每次打开控制台都需要输入/bin/bash --login的问题
    项目的开发环境是在VSCode上连接WSL开发,使用的语言是Ruby,每次打开控制台都需要先输入/bin/bash--login才能继续输入其他命令,为此,找遍了全网的资料,最终找到了解决的办法,特此记录一下,步骤如下:1.在终端输入vim~/.bashrc回车打开文件2.复制下面的代码粘贴至文件最后[[-s"$HOME/.......
  • 使用Almalinux 8 搭建NTP服务器chrony
    chrony官方网站https://chrony-project.org/1、更新系统sudodnfupdatesudodnfinstallepel-release2、在AlmaLinux上安装NTP服务器dnfinstallchronysystemctlenablechronydsystemctlstartchronyd3、配置服务器vim/etc/chrony.conf添加NTP服务器地址,如serverntp......
  • C++编程练习||1.排序函数模板2.函数模板3.重载printArray函数模板
    1.排序函数模板已知主函数如程序后缀代码所示,请为其编写适当的模板函数,使主函数的bubbleSort函数可以对一个整型数组和一个浮点数数组进行输入、排序、输出操作。#include<iostream>#include<iomanip>usingnamespacestd;template<typenameT>voidbubbleSort(T*arr,......
  • 解决terraform部署storage account management policy问题
    承接上文TerraformAzurediagnosticsetting升级,之前说到azurerm_monitor_diagnostic_setting里的retentionpolicy已经deprecated了,需要用azurerm_storage_management_policy替换以recoveryservicevault的诊断设置为例,对应的azurerm_storage_management_policy可以参考下边的代......
  • 在K8S中,RC的机制是什么?
    在Kubernetes(K8s)中,ReplicationController(RC)是一种工作负载资源对象,它负责确保指定的Pod副本集始终保持预期的数量。其机制如下:定义期望状态:用户通过创建一个ReplicationController资源定义文件来声明他们希望运行的Pod副本数量,同时提供Pod模板,该模板描述了每个副本Pod应有的......
  • 在K8S中,Replica Set和Replication Controller之间有什么区别?
    在Kubernetes(K8s)中,ReplicaSet和ReplicationController(RC)都是用于确保集群中特定数量的Pod副本始终运行的服务。尽管它们有相似的功能,但在功能演变过程中,ReplicaSet是对ReplicationController的改进和升级。ReplicationController(RC):在早期版本的Kubernetes......
  • ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排
    作者:庄宇什么是 Fan-outFan-in在工作流编排过程中,为了加快大任务处理的效率,可以使用Fan-outFan-in任务编排,将大任务分解成小任务,然后并行运行小任务,最后聚合结果。由上图,可以使用DAG(有向无环图)编排Fan-outFan-in任务,子任务的拆分方式分为静态和动态,分别对应静态DAG......