⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simulateaction.cpp

📁 传感器读取程序
💻 CPP
字号:
#include <windows.h>
#include <stdio.h>
#include "simulateaction.h"

/***************************************
函数功能: 判断鼠标是否在客户区
***************************************/
bool IsClientArea(HWND hwnd, POINT CurrentPos)
{
	if(HTCLIENT == SendMessage(hwnd, WM_NCHITTEST, NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y)))
	{
		return true;
	}
	else
	{
		return false;
	}
}

/***************************************
函数功能: 模拟鼠标单击右键动作
***************************************/
void SimulateRightSingleClick(int xPos, int yPos)
{
	HWND hwnd;

	POINT CurrentPos;
	CurrentPos.x = xPos;
	CurrentPos.y = yPos;

	hwnd = WindowFromPoint(CurrentPos);

	HWND h = GetDesktopWindow();

	if (IsClientArea(hwnd, CurrentPos))
	{
		ClientAreaSingleClickRButton(hwnd, CurrentPos);
	}
	else
	{
		NoneClientAreaSingleClickRButton(hwnd, CurrentPos);
	}
}

/***************************************
函数功能: 模拟鼠标单击右键动作(在客户区)
***************************************/
void ClientAreaSingleClickRButton(HWND hwnd,POINT CurrentPos)
{
	//屏幕坐标转换为窗口坐标
	ScreenToClient(hwnd, &CurrentPos);
	PostMessage(hwnd,WM_RBUTTONDOWN,MK_RBUTTON,MAKELPARAM(CurrentPos.x, CurrentPos.y));
	PostMessage(hwnd,WM_RBUTTONUP,NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y));
}

/***************************************
函数功能: 模拟鼠标单击右键动作(在非客户区)
***************************************/
void  NoneClientAreaSingleClickRButton(HWND hwnd,POINT CurrentPos)
{
	switch(SendMessage(hwnd, WM_NCHITTEST, NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y)))
	{
	case HTCAPTION:
		PostMessage(hwnd,WM_SYSCOMMAND,SC_MOUSEMENU,false);
		break;
	}
}

/***************************************
函数功能: 模拟鼠标单击左键动作
***************************************/
void SimulateLeftSingleClick(int xPos,int yPos)
{
	HWND hwnd;

	POINT CurrentPos;
	CurrentPos.x = xPos;
	CurrentPos.y = yPos;

	hwnd = WindowFromPoint(CurrentPos);

	if (IsClientArea(hwnd, CurrentPos))
	{
		ClientAreaSingleClickLButton(hwnd, CurrentPos);
	}
	else
	{
		NoneClientAreaSingleClickLButton(hwnd, CurrentPos);
	}
}

/***************************************
函数功能: 模拟鼠标单击左键动作(在客户区)
***************************************/
void ClientAreaSingleClickLButton(HWND hwnd,POINT CurrentPos)
{
	char szClassName[50];
	GetClassName(hwnd, szClassName, 50);
	//判断是否为系统菜单
	if (strcmp(szClassName, "#32768") != 0)
	{
		//屏幕坐标转换为窗口坐标
		ScreenToClient(hwnd, &CurrentPos);
	}

	PostMessage(hwnd,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(CurrentPos.x, CurrentPos.y));

	PostMessage(hwnd,WM_LBUTTONUP,NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y));
}

/***************************************
函数功能: 模拟鼠标单击左键动作(在非客户区)
***************************************/
void  NoneClientAreaSingleClickLButton(HWND hwnd,POINT CurrentPos)
{
	switch(SendMessage(hwnd, WM_NCHITTEST, NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y)))
	{
	case HTMENU:
		
		SendMessage(hwnd,WM_NCLBUTTONDOWN,HTMENU,MAKELPARAM(CurrentPos.x, CurrentPos.y));

		SendMessage(hwnd,WM_NCLBUTTONUP,HTMENU,MAKELPARAM(CurrentPos.x, CurrentPos.y));

		break;

	case HTCLOSE:

		PostMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,false);

		break;

	case HTMINBUTTON:

		PostMessage(hwnd, WM_SYSCOMMAND,SC_MINIMIZE,false);

		break;

	case HTMAXBUTTON:

		if(IsZoomed(hwnd))
		{
			PostMessage(hwnd,WM_SYSCOMMAND,SC_RESTORE,false);
		}
		else
		{
			PostMessage(hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,false);
		}

		break;

	case HTCAPTION:

		RECT rect;
		GetWindowRect(hwnd, &rect);
		SetWindowPos(hwnd,HWND_TOP,rect.left,rect.top,rect.right - rect.left,rect.bottom - rect.top,SWP_SHOWWINDOW);
		SetForegroundWindow(hwnd);

		break;

	case HTVSCROLL:

		PostMessage(hwnd,WM_VSCROLL,SB_THUMBTRACK,NULL);

		break;

	}
}

/***************************************
函数功能: 模拟鼠标双击左键动作
***************************************/
void SimulateLeftDoubleClick(int xPos,int yPos)
{
	HWND hwnd;

	POINT CurrentPos;
	CurrentPos.x = xPos;
	CurrentPos.y = yPos;

	hwnd = WindowFromPoint(CurrentPos);

	if (IsClientArea(hwnd, CurrentPos))
	{
		ClientAreaDoubleClickLButton(hwnd, CurrentPos);
	}
	else
	{
		NoneClientAreaDoubleClickButton(hwnd, CurrentPos);
	}
}

/***************************************
函数功能: 模拟鼠标双击左键动作(在客户区)
***************************************/
void ClientAreaDoubleClickLButton(HWND hwnd,POINT CurrentPos)
{
	//屏幕坐标转换为窗口坐标
	ScreenToClient(hwnd, &CurrentPos);
	PostMessage(hwnd,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(CurrentPos.x, CurrentPos.y));
	PostMessage(hwnd,WM_LBUTTONUP,NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y));
	PostMessage(hwnd,WM_LBUTTONDBLCLK,MK_LBUTTON,MAKELPARAM(CurrentPos.x, CurrentPos.y));
}


/***************************************
函数功能: 模拟鼠标双击左键动作(在非客户区)
***************************************/
void  NoneClientAreaDoubleClickButton(HWND hwnd,POINT CurrentPos)
{
	switch(SendMessage(hwnd, WM_NCHITTEST, NULL,MAKELPARAM(CurrentPos.x, CurrentPos.y)))
	{
	case HTCAPTION:

		if(IsZoomed(hwnd))
		{
			PostMessage(hwnd,WM_SYSCOMMAND,SC_RESTORE,false);
		}
		else
		{
			PostMessage(hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,false);
		}

		break;

	case HTSYSMENU:

		PostMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,false);

		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -