📄 simulateaction.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 + -