大家好!我是指针空旅者,一名普普通通的小学生。暑假,终于有时间写博客了。大家请不要取关,没关注的点个关注,谢谢。我会持续给大家更新的。
1.什么是老板键
百度资料:老板键是一种热键或热键组合,用于快速隐藏游戏或其他无关工作的程式,并让显示器呈现正常工作时的画面,藉以欺瞒老板和同事等,达到保护您隐私的目的,使之以为上班时间进行娱乐的员工在做自己份内的工作。
这期博客,我们就一起来用 c++探究老板键的奥秘。
2.实现功能
2.1.基础
实现这个功能,首先,我们需要获得对窗口的控制。而Windows的api就派上用场了,这个api就是ShowWindow()函数。具体看这:ShowWindow 函数 (winuser.h)
整个函数语法:
BOOL ShowWindow([in] HWND hWnd,[in] int nCmdShow);
ShowWindow参数里的第一个代表要关闭的窗体,一个代表是关闭还是打开(0:false,不打开;1:true,打开)
不要问我 [in]什么意思,问了就是秘密(其实我也不知道)。
其次,要实现按下快捷键就隐藏,我们需要 GetAsyncKeyState()函数。具体看这:GetAsyncKeyState 函数
整个函数语法:
SHORT GetAsyncKeyState([in] int vKey);
好了,弄懂之后,下一步就是写代码测试
代码在下:
#include <windows.h>
#include <conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main(){
whlle(1){
if(KEY_DOWN(VK_CONTROL)&&KEY_DOWN('Q')){
ShowWindow(GetForegroundWindow(),0);
}
}
return 0;
}
代码中我用了一个宏来封装 GetAsyncKeyState(),也算一个小技巧吧。
这个程序利用循环包裹了一个判断,判断是否按下老板键(Ctrl+Q,不喜欢的可以自己改)。如果按下,则关闭该窗体(ShowWindow第一个参数代表获取这个窗口)。
好,这下就实现了老板键的主要功能:关闭该窗体但保留进程
2.2.改进
2.2.1.打开与关闭
很显然,仅仅关闭可不行,要能关闭并打开才可以。所以,我们要稍稍改进一下……
聪明的你一定想到了,既然窗口状态只有1或0的话,可不可以用布尔变量呢?
可以,还真可以。布尔变量其实是int类型typedef出来的,代替01变量确实可行。
2.2.2.频闪问题
现在程序的响应速度太快了,假设你想隐藏窗口时,绝对不想看到这个场面:
2024.07.18_21:15:10
这录屏软件帧率不太高,不过也可以看出来,如果按 Ctrl+Q键慢了一点,软件是会出现频闪现象的。我们要解决这个问题(虽然一些软件到现在也没解决这个问题),就要用到 Sleep()函数了。
Sleep函数在windows.h头文件里,语法为:
void Sleep([in] DWORD dwMilliseconds);
另请参阅:睡眠函数 (synchapi.h)(windows.h头文件包含了它,所以不用导入这个头文件)
我们要让程序每隔一次检测就停顿0.1秒,可以这样写(不要问我为啥是100,Sleep传的参数是毫秒,1000ms=1s):
Sleep(100);
插入程序后,只要我们按键时控制在0.1s以下,就不会频闪(手速慢的自己改参数)。
但是,如果一直按着Ctrl+Q,还是会发生频闪。我们不能改Sleep函数,让程序每隔10多秒才检测。给三秒时间想一下:3——2——1!想到了吗?这里程序检测完就开始了下一次检测,如果让程序检测完,等待放开Ctrl+Q后,再下一次检测,就不会频闪了,是吧!
代码如下:
while((KEY_DOWN(VK_CONTROL)&&KEY_DOWN('Q'))) Sleep(100);
3.完整代码
#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main(){
bool Boss_key=false;
whil1(1){
if(KEY_DOWN(VK_CONTROL)&&KEY_DOWN('Q')){
ShowWindow(GetForegroundWindow(),Boss_key);
Boss_key=!Boss_key;
while((KEY_DOWN(VK_CONTROL)&&KEY_DOWN('Q'))) Sleep(50);
}
Sleep(100);
}
return 0;
}
代码不长,很容易理解。好了,如果你们喜欢这篇文章,请点个关注,求求了。