ClassIn 退出专注学习模式 关闭专注学习模式「建议收藏」

ClassIn 退出专注学习模式 关闭专注学习模式「建议收藏」ClassIn是一个常用的在线上课软件,从3.0.2.130开始推出了“专注学习模式”,窗口会全屏且不能切换窗口。可有时我们有其他需要,要退出专注学习模式,这时就要使用其它的方法了。这里提供一个我自己做的小程序。

大家好,又见面了,我是你们的朋友全栈君。

由于暂时不用ClassIn,新版程序无法测试
若有人使用ClassIn并且会出现专注学习模式,请私信我

ClassIn是一个常用的在线上课软件,从3.0.2.130开始推出了“专注学习模式”,窗口会全屏且不能切换窗口。这个功能是在机构后台设置的,连老师也改不了。可有时我们有其他需要,要退出专注学习模式,这时就要使用其它的方法了。这里提供一个我自己做的小程序。

2020/6/30首次发布v1.0.0

首先打开ClassIn-Mover中国用户可以选择这里),下载一个最新的ClassIn_Mover.exe。网页上有使用说明,不过是英文的,这里我翻译一下。

ClassIn_Mover支持3.0.2.1303.0.5.1以及3.0.7.x 4.x版本的ClassIn。在3.0.2.130之前并没有推出这一模式。在未来的版本中可能会失效。

使用说明

在进入教室之前运行此程序,然后照常进入教室。

之后,该程序将自动检测教室窗口,使其无法进入全屏。

如果程序正常运行,会每秒输出一行日志,显示当前的工作状态。

未解决的问题

  • 该程序调用Windows的本地API,因此只能在Windows上运行。

  • 运行程序后教室窗口仍将最大化,但可以在其上方放置其他窗口,也可以直接切换到另一个窗口。

  • 有时,教室窗口不会正常退出全屏,请尝试退出教室重新进入。

  • 如果您同时打开两个或多个教室程序,则该程序只会处理一个教室窗口(大多数情况是最后进入的教室)。这个问题并不大,因为很少有人需要一次登录多个帐户。


程序的源代码已经在GitHub中上传,这里不再显示。欢迎提出改进意见。

原理讲解(没有编程基础可不看)

首先通过EnumWindow函数对每一个窗口的Hwnd进行处理。

窗口的标题通过GetWindowText函数获得,观察发现ClassIn的教室窗口都是以Classroom_开头的,因此通过strstr函数判断窗口标题中是否包含关键词。如果当前窗口就是ClassIn的窗口,就将FoundWindow变量改成true,将此窗口的窗口句柄记住,并停止查找。

此时回到主函数,主函数中继续进行判断。如果FoundWindowfalse,就输出错误信息,并等待一秒;如果FoundWindowtrue,就继续处理。

这里的处理首先通过GetWindowRect获取窗口位置,因为用到的SetWindowPos函数不仅会修改窗口优先级,还会修改窗口大小,只有先获取到窗口大小才能够下一步修改窗口优先级时不修改大小。

获取到窗口大小之后还要获取窗口状态(最大化/全屏等)。因为除了修改优先级,还要修改窗口的状态,否则无法露出任务栏进行任意操作。使用GetWindowPlacement函数获取窗口状态。之后用SetWindowPos将窗口优先级调低。之后还要进行一步判断,确保窗口不宰最大化也不再最小化时才调整为最大化,否则窗口会一直在最大化和最小化之间切换,也占用CPU。

由于程序目前的实现原理,导致其余标题中包含Classroom_的窗口会一直保持最大化状态。后续版本已解决这个Bug。


后续更新

已于2020/7/2更新至v1.0.1,修复Bug:
  1. 修改窗口查找机制,在找到窗口后会进一步判断创建窗口的进程名,如果包含classin才会取消全屏
  2. 调整等待时间,根据时间自动判断,避免有时漏掉某一秒
已于2020/7/3更新至v1.0.2:
  1. 优化等待机制,每次输出后等待直到经过总时长是整数秒
已于2020/7/6升级至v1.0.3:
  1. 增加日志级别,输出窗口状态和处理次数
  2. 更改每次处理之间的等待时间
已于2021/1/15升级至v1.0.4:
  1. 为避免有时无法退出全屏,启动程序时会要求管理员权限,未能获取到时会输出警告
  2. 输出警告时会使用黄色,输出错误时会使用红色

未来更新

  • 控制台程序改为GUI程序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141905.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm代码规范工具flake8

    pycharm代码规范工具flake8文章目录代码规范一、flake8是什么?二、使用步骤1.引入库2.读入数据总结代码规范随着计算机语言的发展,代码规范是我们写代码时更应该注意的东西,在我们使用pycharm进行代码编写时,我们可以借用pycharm工具flake8进行代码规范检查,从而使代码规范符合标准要求。代码规范可以减少bug,有助于代码审查,降低维护成本,更重要的是在大型项目中,大家使用一套共同的代码标准,这更能够提升团队间的合作效率。一、flake8是什么?Flake8是一款辅助检测Python代码是否规范的工具

    2022年9月4日
    4
  • 数据库函数的用法「建议收藏」

    数据库函数的用法「建议收藏」dgkhjbxx–客户表   列(khmc)客户名称     列(khbh)客户编号apply_main_crdt–申请表  列(cust_no)客户编号 createorreplacefunctioncmis_getkhmc(idvarchar2)returnvarchar2iskhmc_mingchengdgkhjbxx.khmc%type;be…

    2022年6月16日
    28
  • 需求分析之数据流图学习

    很实在的文章,原文转自http://blog.csdn.net/gashero/article/details/1230185以前眼里的软件工程,虽然重要,但是却一直不太了解其用处到底有多大。现在开始渐渐接触大工程了,才开始真正体验到软件工程的威力。没有好的需求分析,软件等于白做;没有好的系统设计,做了也要重做。在大型软件中,人的因素越来越大,远远超过技术的因素。比如,一些ERP系统的

    2022年4月15日
    55
  • mysql解锁_mysql锁表如何解锁

    mysql解锁_mysql锁表如何解锁什么是MySQL锁表?为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-levellocking);BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-levellockin…

    2022年6月3日
    27
  • 美军打掉德国炮兵阵地的电影_英雄连2怎么找炮兵阵地

    美军打掉德国炮兵阵地的电影_英雄连2怎么找炮兵阵地司令部的将军们打算在 N×M 的网格地图上部署他们的炮兵部队。一个 N×M 的地图由 N 行 M 列组成,地图的每一格可能是山地(用 H 表示),也可能是平原(用 P 表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响

    2022年8月9日
    1
  • Stack overflow at line  错误原因

    Stack overflow at line  错误原因场景:点击页面上一个超链接,弹出模态窗口。

    2022年7月15日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号