介绍
这是一个很简单的小工具。
程序是 cmd 界面,运行之后会一直保持顶置,左键 cmd 窗口可以将屏幕 (20, 20) 处的窗口最小化,右键则可以隐藏该窗口。
这个软件是专门为电脑课破解极域学生端而打造的:
保持顶置使得这个窗口可以在学生端控屏的状态下显示出来。
由于学生端控屏是全屏的,但是不会锁定鼠标。
因此,可以左右键 cmd 窗口,将屏幕 (20, 20) 处的窗口最小化或隐藏,这样就可以让学生端最小化到任务栏或者隐藏掉学生端的窗口。
但是这个时候其实没有真正关闭学生端,只是可以操作鼠标了,不过键盘还是被控制的。
所以可以打开任务管理器,把学生端杀了就行。点多几下就可以杀死它的。
实测可用~
(因为机房有 dev-c++,这个程序完全是在机房的空闲时间写的,没想到这个学生端这么简单就被干掉了,我还以为会很倔强呢,哈哈)
-------
2021.11.27 补充
后来我同桌告诉我,可以直接在控屏前就开任务管理器把学生端干了就行了……
因为我之前尝试过之前在二中机房用过的 bat 循环杀进程的办法(见此链接),这个办法使用了 TASKKILL 命令,
但是触发了学生端的保护机制,使我一度以为如果用任务管理器杀进程是没有用的(因为那样的话原理就和 TASKKILL 一样了),
因此我就从未尝试直接用任务管理器去杀学生端……所以我就撸了下面的代码来间接破解学生端。
但是现在既然已经知道了可以直接用任务管理器杀进程的办法,那其实这个方法的意义也不太大了。
-------
代码:
(该版本为 12.7 的修改版,新增了自动调整窗口大小的功能)
////////////////////////////////////////
//
// Hide window tool
// Used to hide the full top window
//
// Author : huidong
// Time : 2021.12.7
//
#include <windows.h>
#include <stdio.h>
int width = 200;
int height = 200;
POINT GetMousePoint()
{
POINT point;
GetCursorPos(&point);
ScreenToClient(GetConsoleWindow(), &point);
return point;
}
HWND GetHWnd()
{
POINT p = { 20,20 };
HWND wnd = NULL;
wnd = WindowFromPoint(p); // 获取此位置窗口的句柄
return wnd;
}
void min()
{
HWND wnd = GetHWnd();
// SetWindowPos(wnd,0, 0, 0, 0, 0, SWP_NOMOVE);
ShowWindow(wnd,SW_MINIMIZE);
}
void hide()
{
HWND wnd = GetHWnd();
// SetWindowPos(wnd,0, 0, 0, 0, 0, SWP_NOMOVE);
ShowWindow(wnd,SW_HIDE);
}
void top()
{
SetWindowPos(GetConsoleWindow(),HWND_TOPMOST, 0, 0, width, height, SWP_NOMOVE);
}
int main()
{
while(1)
{
top();
POINT p = GetMousePoint();
if (p.x > 0 && p.y > 0 && p.x < width-20 && p.y < height-20)
{
if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
{
min();
printf("\n\nMIN\n\n");
}
else if (GetAsyncKeyState(VK_RBUTTON) & 0x8000)
{
hide();
printf("\n\nHIDE\n\n");
}
}
}
return 0;
}