用简单的办法在c++程序做一个老板键(万能老板键和隐藏固定程序的老板键)
我对这些并不值很了解但是我觉得这样做对于第一次做老板键的人来说比较简单,至少没有那么多麻烦的函数名和用法
首先,要在c++中获得句柄(handle).
可以这样写来获取最前端的窗口的句柄
HWND hwnd;//定义hwnd为HWND类型,也就是一个句柄hwnd=GetForegroundWindow();//获取最前端的窗口的句柄
然后可以用ShowWindow函数来隐藏
比如:
ShowWindow(hwnd,0);//将hwnd这个句柄指向的窗口隐藏ShowWindow(hwnd,0);//将hwnd这个句柄指向的窗口显示
然后,我们需要检测热键,比如F1等等,可以用GetAsyncKeyState函数来判断是否摁下热键。
用这个函数的原因是因为这个能判断函数调用时指定虚拟键的状态,也就是说可以后台检测,不想getch,cin,scanf,getchar之类的程序要在最前端才能输入
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)//在键盘上摁下不能直接输出的,比如F1,F2,方向键等等需要这样:if(KEY_DOWN(VK_F1))//检测F1是否被按下if(KEY_DOWN(VK_UP))//检测↑键是否被按下//在键盘上摁下能直接输出的,比如A,B,C,1,2,3等等直接这样(当然,用VK也可以):if(KEY_DOWN('A'))//检测A是否被按下if(KEY_DOWN('1'))//检测1是否被按下
常用的VK值表:(摘自百度百科)
VK_SHIFT:Shift键
VK_LSHIFT : 左Shift键
VK_RSHIFT : 右Shift键
VK_CONTROL : Ctrl键
VK_LCONTROL : 左Ctrl键
VK_RCONTROL : 右Ctril键
VK_MENU :Alt键
VK_LMENU: 左Alt键
VK_RMENU :右Alt键
VK_LBUTTON :鼠标左键
VK_RBUTTON: 鼠标右键
VK_ESCAPE: ESC键
VK_RETURN:回车键
VK_TAB:TAB键
VK_SPACE:空格键
VK_UP:↑键
VK_DOWN:↓键
VK_LEFT:←键
VK_RIGHT:→键
于是,一个简单(垃圾)的万能老板键就写好了
注: 慎用F4,可能让之前隐藏的显示不了
//这里用F4~F7的原因是我用dev写的,防止快捷键冲突#include<windows.h>#include<bits/stdc++.h>#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)using namespace std;int main(){bool f=false;HWND hwnd;hwnd=GetForegroundWindow();//获取最前端的窗口的句柄ShowWindow(hwnd,0);while(1){if(KEY_DOWN(VK_F4))//获取要隐藏窗口的句柄{while (KEY_DOWN(VK_F4));//加这句的原因是防止按了太多次,导致一直隐藏/显示hwnd=GetForegroundWindow();Sleep(100);}if(KEY_DOWN(VK_F5))//隐藏{while (KEY_DOWN(VK_F5));ShowWindow(hwnd,f);f=1-f;Sleep(100);}if(KEY_DOWN(VK_F6))//退出{while (KEY_DOWN(VK_F6));return 0;}if(KEY_DOWN(VK_F7)){while (KEY_DOWN(VK_F7));ShowWindow(hwnd1,f2);f2^=1;}Sleep(20);}}
针对的固定cpp程序隐藏,可以这样:
//编译为窗口隐藏.exe#include<windows.h>#include<bits/stdc++.h>#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)using namespace std;int main(){bool f=false;HWND hwnd;hwnd=GetForegroundWindow();ShowWindow(hwnd,0);//隐藏自身ifstream ifs_yincang("hwnd.txt");//在另一个程序中输出句柄到hwnd.txt中string s;getline(ifs_yincang,s);hwnd=(HWND)strtoul(s.c_str(),NULL,16);//这里很坑,HWND是十六进制的,c++强制转换转不了,要用strtoul转while(1){cout<<s<<" "<<hwnd<<endl;if(KEY_DOWN(VK_F8)){while (KEY_DOWN(VK_F8));ShowWindow(hwnd,f);f=1-f;Sleep(100);}Sleep(20);}}
//在要隐藏的程序中这样,要使用时直接调用该函数void yincang()//窗口隐藏{system("taskkill -f -im 窗口隐藏.exe");HWND hwnd=GetForegroundWindow();ofstream ofs_yincang("hwnd.txt");ofs_yincang<<hwnd;system("start 窗口隐藏.exe");}···//结尾最好加一句:system("taskkill -f -im 窗口隐藏.exe");
至于为什么不直接在程序中加,一是我不会多线程,二是比如这样的程序:
while (1){if(KEY_DOWN(VK_F8)){while (KEY_DOWN(VK_F8));ShowWindow(hwnd,f);f=1-f;Sleep(100);}cin>>x;Sleep(100);}
运行时发现热键经常无法检测,这应该是因为后面的cin>>x这句话,运行到这里是,就必须要输入否则会一直停在这里。
当然,你也可以全部用虚拟按键之类的输入,这样就无所谓了。
具体程序中的使用在这里
/qq_43900769/article/details/96165650