123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- /*
- 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、
- 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议
- */
- #include "stdafx.h"
- #include "MyMouseNamespace.h"
- /*===================================================================
- //构造函数
- ====================================================================*/
- MyMouseNamespace::MyMouseNamespace()
- {
- delaytimes = 30;
- }
- /*===================================================================
- //析构函数
- ====================================================================*/
- MyMouseNamespace::~MyMouseNamespace()
- {
- }
- //鼠标移动到相对坐标
- /*===================================================================
- 函数名称 : mouseMvrelative
- 功能描述 : 鼠标移动的相对位置
- ====================================================================*/
- bool MyMouseNamespace::mouseMvrelative(DWORD x_pos, DWORD y_pos)
- {
- //移动鼠标的坐标
- POINT pt;
- ::GetCursorPos(&pt);
- ::SetCursorPos(pt.x + x_pos, pt.y + y_pos);
- return true;
- }
- //鼠标移动到绝对坐标
- /*===================================================================
- 函数名称 : mouseMove
- 功能描述 : 鼠标移动的绝对位置
- ====================================================================*/
- //鼠标移动到绝对位置
- bool MyMouseNamespace::mouseMove(DWORD x_pos, DWORD y_pos)
- {
- //移动鼠标的坐标
- ::SetCursorPos(x_pos, y_pos);
- return true;
- }
- //// 鼠标操作
- //// LEFTCLICK =0 //左键单击
- ////,RIGHTCLICK //右键单击
- ////,MIDDLECLICK //中键单击
- ////,LEFTDOWN //左键按下
- ////,LEFTUP //左键弹起
- ////,RIGHTDOWN //右键按下
- ////,RIGHTUP //右键弹起
- ////,MIDDLEDOWN //中键按下
- ////,MIDDLEUP //中键弹起
- ////,LEFTDOUBLECLICK //左键双击
- ////,RIGHTDOUBLECLICK //右键双击
- //鼠标移动到绝对坐标
- /*===================================================================
- 函数名称 : mouseAction
- 功能描述 : 鼠标单击或双击模式以及具体的执行次数
- 返回值: void类型
- 参数:
- 名称 类型 描述
- --------- -------------------------------------------
- mousemode MouseMode * 传进来鼠标单击或双击模式
- nEcute int 执行单击或者双击几次
- 修改历史 :
- 修改者 日期 描述
- 邓媛元 2010-07-17
- 邓媛元 2010-07-20 修改注释
- ====================================================================*/
- void MyMouseNamespace::mouseAction(MouseMode mousemode, int nEcute)
- {
- //Sleep(1000);
- //鼠标状态选取
- switch (mousemode)
- {
- //鼠标左键单击
- case LEFTCLICK:
- for (int i = 0; i < nEcute; i++)
- { //鼠标按下
- //mouse_event(MOUSEEVENTF_LEFTDOWN , 0, 0, 0, 0);
- //::Sleep(100);
- //mouse_event(MOUSEEVENTF_LEFTUP , 0, 0, 0, 0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标右键单击
- case RIGHTCLICK:
- for (int i = 0; i < nEcute; i++)
- { //鼠标按下
- //mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
- //::Sleep(100);
- //mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标中键单击
- case MIDDLECLICK:
- for (int i = 0; i < nEcute; i++)
- { //鼠标按下
- //mouse_event(MOUSEEVENTF_MIDDLEDOWN|MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_MIDDLEDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_MIDDLEUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标左键按下
- case LEFTDOWN:
- {
- //左键按下一次
- //mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标左键弹起
- case LEFTUP:
- {
- //mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- INPUT MyMouseClick[1];
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标右键按下
- case RIGHTDOWN:
- {
- //mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0,0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标右键盘弹起
- case RIGHTUP:
- {
- //mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0,0);
- INPUT MyMouseClick[1];
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标中键按下
- case MIDDLEDOWN:
- {
- //mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0,0);
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_MIDDLEDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标中键盘弹起
- case MIDDLEUP:
- {
- //mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0,0);
- INPUT MyMouseClick[1];
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_MIDDLEUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标左键双击
- case LEFTDOUBLECLICK:
- for (int i = 0; i < nEcute; i++)
- {
- INPUT MyMouseClick[1];
- //第二个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- Sleep(delaytimes);
- SendInput(1, MyMouseClick, sizeof(INPUT));
- //第三个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- //发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- //第二个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- //第三个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- //发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- //鼠标右键双击
- case RIGHTDOUBLECLICK:
- for (int i = 0; i < nEcute; i++)
- {
- INPUT MyMouseClick[1];
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第一个动作:模拟鼠标左键按下
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL;
- SendInput(1, MyMouseClick, sizeof(INPUT));
- Sleep(delaytimes);
- ////第二个动作:模拟鼠标左键释放
- MyMouseClick[0].type = INPUT_MOUSE;
- MyMouseClick[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP;
- MyMouseClick[0].mi.mouseData = NULL;
- MyMouseClick[0].mi.dwExtraInfo = NULL;
- MyMouseClick[0].mi.time = NULL; ;
- ////发送鼠标动作到消息序列。
- SendInput(1, MyMouseClick, sizeof(INPUT));
- }
- break;
- default:
- return;
- }
- }
- /*===================================================================
- 函数名称 : GetmousePoint
- 功能描述 : 获取当前鼠标的位置坐标
- ====================================================================*/
- bool MyMouseNamespace::GetmousePoint(DWORD& x_pos, DWORD& y_pos)
- {
- POINT pt;
- GetCursorPos(&pt);
- x_pos = pt.x;
- y_pos = pt.y;
- return true;
- }
- /*返回值: void类型
- 参数:
- 名称 类型 描述
- --------- -------------------------------------------
- direction MouseWheel 接收返回值传出去
- nMove int 控制滚轮移动多少
- ====================================================================*/
- void MyMouseNamespace::mouseMidleWheel(MouseWheel direction, int nMove)
- {
- if (direction == MouseWheel::WHEEL_DOWN) //滚轮向下
- {
- mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -nMove, 0);
- }
- else if (direction == MouseWheel::WHEEL_UP) //滚轮向上
- {
- mouse_event(MOUSEEVENTF_WHEEL, 0, 0, nMove, 0);
- }
- }
- HBITMAP BitmapFromIcon(HICON hIcon)
- {
- HDC dDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
- HDC hDC = CreateCompatibleDC(dDC);
- HBITMAP hBitmap = CreateCompatibleBitmap(hDC, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
- HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap);
- DrawIcon(hDC, 0, 0, hIcon);
- hBitmap = (HBITMAP)SelectObject(hDC, hOldBitmap);
- DeleteDC(hDC);
- ::DeleteDC(dDC);
- return hBitmap;
- }
- ////////////////////////获取鼠标形状特征码 ///////////////
- bool MyMouseNamespace::getmouseshape(DWORD& dwshape)
- {
- dwshape = 0;
- CURSORINFO pci;
- pci.cbSize = sizeof(CURSORINFO);
- pci.flags = 0;
- pci.hCursor = 0;
- if (!::GetCursorInfo(&pci))
- return false;
- HDC dDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
- HDC hDC = CreateCompatibleDC(dDC);
- HBITMAP hBitmap = CreateCompatibleBitmap(dDC, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
- HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap);
- DrawIcon(hDC, 0, 0, pci.hCursor);
- hBitmap = (HBITMAP)SelectObject(hDC, hOldBitmap);
- DWORD dwPaletteSize = 0, dwBmBitsSize;
- BITMAP Bitmap;
- BITMAPINFOHEADER bi;
- //位图信息头结构
- LPBITMAPINFOHEADER lpbi;
- HANDLE hDib;
- HPALETTE hOldPal = NULL;
- //设置位图信息头结构
- GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
- WORD wBitCount = Bitmap.bmBitsPixel;
- dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) & ~31) / 8 * Bitmap.bmHeight;
- BYTE* bmpDate = new BYTE[dwBmBitsSize];
- bi.biSize = sizeof(BITMAPINFOHEADER);
- bi.biWidth = Bitmap.bmWidth;
- bi.biHeight = Bitmap.bmHeight;
- bi.biPlanes = 1;
- bi.biBitCount = wBitCount;
- bi.biCompression = BI_RGB;
- bi.biSizeImage = dwBmBitsSize;
- bi.biXPelsPerMeter = 0;
- bi.biYPelsPerMeter = 0;
- bi.biClrUsed = 0;
- bi.biClrImportant = 0;
- hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));
- lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
- *lpbi = bi;
- GetDIBits(hDC, hBitmap, 0, (UINT)Bitmap.bmHeight, bmpDate, (BITMAPINFO*)lpbi, DIB_RGB_COLORS);
- DWORD num = 0;
- int height = Bitmap.bmHeight;
- int width = Bitmap.bmWidth;
- BYTE b0 = bmpDate[0];
- BYTE g0 = bmpDate[1];
- BYTE r0 = bmpDate[2];
- // 32位图进行解析
- if (Bitmap.bmBitsPixel == 32)
- {
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < width; j++)
- {
- UCHAR b = bmpDate[(i * width + j) * 4];
- UCHAR g = bmpDate[(i * width + j) * 4 + 1];
- UCHAR r = bmpDate[(i * width + j) * 4 + 2];
- if (b == b0 && g == g0 && r == r0)
- {
- continue;
- }
- else
- {
- num++;
- }
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////
- DWORD helpnum = num * RGB(255, 255, 0);
- delete[] bmpDate;
- ::GlobalFree(hDib);
- ::DeleteDC(hDC);
- ::DeleteDC(dDC);
- ::DeleteObject(hBitmap);
- dwshape = helpnum;
- return true;
- }
- #define MOUSE_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
- #define MOUSE_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
- bool MyMouseNamespace::leftClick()
- {
- mouseAction(LEFTCLICK);
- return true;
- }
- bool MyMouseNamespace::leftDoubleClick()
- {
- mouseAction(LEFTDOUBLECLICK);
- return true;
- }
- bool MyMouseNamespace::leftDown()
- {
- mouseAction(LEFTDOWN);
- return true;
- }
- bool MyMouseNamespace::leftUp()
- {
- mouseAction(LEFTUP);
- return true;
- }
- bool MyMouseNamespace::rightClick()
- {
- mouseAction(RIGHTCLICK);
- return true;
- }
- bool MyMouseNamespace::rightDoubleClick()
- {
- mouseAction(RIGHTDOUBLECLICK);
- return true;
- }
- bool MyMouseNamespace::rightDown()
- {
- mouseAction(RIGHTDOWN);
- return true;
- }
- bool MyMouseNamespace::rightUp()
- {
- mouseAction(RIGHTUP);
- return true;
- }
- bool MyMouseNamespace::middleClick()
- {
- mouseAction(MIDDLECLICK);
- return true;
- }
- bool MyMouseNamespace::middleDown()
- {
- mouseAction(MIDDLEDOWN);
- return true;
- }
- bool MyMouseNamespace::middleUp()
- {
- mouseAction(MIDDLEUP);
- return true;
- }
- // 向下滚动
- bool MyMouseNamespace::mouseSheetDown()
- {
- mouseMidleWheel(WHEEL_DOWN);
- return true;
- }
- // 向上滚动
- bool MyMouseNamespace::mouseSheetUp()
- {
- mouseMidleWheel(WHEEL_UP);
- return true;
- }
|