// TSPlugInterFace.cpp : CTSPlugInterFace 的实现 /* 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议 */ #include "stdafx.h" #include "TSPlugInterFace.h" #include "TSRuntime.h" #include "DXBind.h" #include "TsMessage.h" #include "D3dx9tex.h" #include #pragma comment(lib, "comsuppw.lib") #include "dllmain.h" #include "TSMyKernel32DllFuntion.h" #include "Wininet.h" #pragma comment(lib,"Wininet.lib") //绑定互斥 TsMutex gDXbindMutex(TS_BINDEVEN); //解绑定互斥 TsMutex gDXUnbindMutex(TS_UNBINDEVEN); //按键按下互斥 TsMutex gDXKeyDownMutex(TS_KEYDOWNEVEN); //按键弹起互斥 TsMutex gDXKeyUpMutex(TS_KEYUPEVEN); //按键互斥 TsMutex gDXKeyPressMutex(TS_KEYPRESSEVEN); //KeyPressStr互斥 TsMutex gDXKeyPressStrMutex(TS_KEYPRESSSTREVEN); //KeyPressChar互斥 TsMutex gDXKeyPressCharMutex(TS_KEYPRESSCHAREVEN); //SendString互斥 TsMutex gDXSendStringMutex(TS_SENDSTRINGEVEN); //SendString互斥 TsMutex gDXSendString2Mutex(TS_SENDSTRING2EVEN); //SendStringIme互斥 TsMutex gDXSendStringImeMutex(TS_SENDSTRINGIMEEVEN); //LeftDown互斥 TsMutex gDXLeftDownMutex(TS_LEFTDOWNEVEN); //LeftUp互斥 TsMutex gDXLeftUpMutex(TS_LEFTUPEVEN); //LeftClick互斥 TsMutex gDXLeftClickMutex(TS_MOVETOEVEN); //MoveTo互斥 TsMutex gDXMoveToMutex(TS_LEFTCLICKEVEN); //FindPic互斥 TsMutex gDXFindPicMutex(TS_FINDPICEVEN); ////RightClick互斥 TsMutex gDXRightClickMutex(TS_RIGHTCLICKEVEN); //RightDown互斥 TsMutex gDXRightDownMutex(TS_RIGHTDOWNEVEN); //RightUp互斥 TsMutex gDXRightUpMutex(TS_RIGHTUPEVEN); //FindColor互斥 TsMutex gDXFindColorMutex(TS_FINDCOLOREVEN); //GetColor互斥 TsMutex gDXGetColorMutex(TS_GETCOLOREVEN); //GetCursorShape互斥 TsMutex gDXGetCursorShapeMutex(TS_GETCURSORSHAPEEVEN); //SetPath互斥 TsMutex gDXSetPathMutex(TS_SETPATHEVEN); //GetCursorPos互斥 TsMutex gDXGetCursorPosMutex(TS_GETCURSORPOSEVEN); //MoveR互斥 TsMutex gDXMoveRMutex(TS_MOVEREVEN); //MiddleClick互斥 TsMutex gDXMiddleClickMutex(TS_MIDDLECLICKEVEN); //WheelDown互斥 TsMutex gDXWheelDownMutex(TS_WHEELDOWNEVEN); //WheelUp互斥 TsMutex gDXWheelUpMutex(TS_WHEELUPEVEN); //Capture互斥 TsMutex gDXCaptureMutex(TS_CAPTUREEVEN); //LockInput互斥 TsMutex gDXLockInputMutex(TS_LOCKINPUTEVEN); //Ocr互斥 TsMutex gDXOcrMutex(TS_OCREVEN); //SetDict互斥 TsMutex gDXSetDictMutex(TS_SETDICTEVEN); //UseDict互斥 TsMutex gDXUseDictMutex(TS_USEDICTEVEN); //ClearDict互斥 TsMutex gDXClearDictMutex(TS_CLEARDICTEVEN); //FindStr互斥 TsMutex gDXFindStrMutex(TS_FINDSTREVEN); //GetNowDict互斥 TsMutex gDXGetNowDictMutex(TS_GETNOWDICTEVEN); //CaptureGif互斥 TsMutex gDXCaptureGifMutex(TS_CAPTUREGIFEVEN); //EnumWindow互斥 TsMutex gDXEnumWindowMutex(TS_ENUMWINDOWEVEN); //EnumWindowByProcess互斥 TsMutex gDXEnumWindowByProcessMutex(TS_ENUMWINDOWBYPROCESSEVEN); //EnumProcess互斥 TsMutex gDXEnumProcessMutex(TS_ENUMPROCESSEVEN); //FindData TsMutex gDXFindDataMutex(TS_FINDDATAEVEN); //FindDouble TsMutex gDXFindDoubleMutex(TS_FINDDOUBLEEVEN); //FindFloat TsMutex gDXFindFloatMutex(TS_FINDFLOATEVEN); //FindInt TsMutex gDXFindIntMutex(TS_FINDINTEVEN); //FindString TsMutex gDXFindStringMutex(TS_FINDSTRINGEVEN); TsMutex gDXMySleepMutex(TS_MYSLEEPEVEN); //GetScreenData TsMutex gDXMyGetScreenDataMutex(TS_MYGETSCREENDATAEVEN); //MoveToEx TsMutex gDXMoveToExMutex(TS_MOVETOEXEVEN); extern myGetTickCount my_myGetTickCount; extern mySleep my_sleep; //DLL所在的位置 extern TCHAR gDLLFolder[MAX_PATH + 1]; int Loginlog(wchar_t * macode) //统计使用人数 { { { HINTERNET internetopen = InternetOpen(L"TC",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if (internetopen==NULL) { return 0; } wchar_t url[MAX_PATH]={0}; swprintf(url,L"http://www.tyuyan.com/tongjiversion.aspx?version=2.5&maccode=%s",macode); HINTERNET internetopenurl = InternetOpenUrl(internetopen,url,NULL,0,INTERNET_FLAG_RELOAD,0); if (internetopenurl==NULL) { InternetCloseHandle(internetopen); return 0; } InternetCloseHandle(internetopenurl); InternetCloseHandle(internetopen); } } } // CTSPlugInterFace STDMETHODIMP CTSPlugInterFace::BindWindow(LONG hwnd, BSTR display, BSTR mouse, BSTR keypad, LONG mode, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXbindMutex); gDxObj.m_mousekeyhwnd=(HWND)hwnd; gDxObj.m_hwnd=(HWND)hwnd; *nret=false; VMPBEGIN //VMP保护 //if(!TSRuntime::IsVipLogin) // { // //::GetTickCount(); // int bret=TSRuntime::VipLogin(L"",0,false); //试用验证 // if(bret<=0) // { // INT64 t=0; // if(my_myGetTickCount) // t=my_myGetTickCount(); // else // t=::GetTickCount(); // if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 // { // gDxObj.SendMsg(TS_UNBIND); // Sleep(200); // gDxObj.UnBind(); // Sleep(200); // gDxObj.SendMsg(TS_UNBIND); // Sleep(200); // gDxObj.UnBind(); // if(TSRuntime::IsStartProtect) // TSRuntime::StartProtect(0,L""); // *nret=0; // TSRuntime::h_checkthread=NULL; // return S_OK; // } // // } // } DWORD displayMode=NULL,keyMode=NULL,mouseMode=NULL; //TSRuntime::add_log( "获得模式 外部 :%s",display); gDxObj.BindMode=0; gDxObj.m_keyMode=0; gDxObj.m_mouseMode=0; TSRuntime::getMode(mouse,keypad,display,mouseMode,keyMode,displayMode); if(displayMode==-1||keyMode==-1||mouseMode==-1) return false; gDxObj.m_displayMode=displayMode; gDxObj.m_keyMode=keyMode; gDxObj.m_mouseMode=mouseMode; gDxObj.BindMode=mode; gDxObj.m_mousekeyhwnd=(HWND)hwnd; bool sucee=false; if((gDxObj.m_displayMode&DISPLAY_DX_3D)==DISPLAY_DX_3D||(gDxObj.m_mouseMode&MOUSE_API)==MOUSE_API||(gDxObj.m_keyMode&KEY_API)==KEY_API) { sucee = gDxObj.bind(gDxObj.m_hwnd,0,0,gDxObj.m_displayMode,(BIND_MODE)gDxObj.BindMode); if(sucee==false&&::IsWindow(gDxObj.m_hwnd))//如果绑定失败,这里调用一次解绑动作 gDxObj.UnBind(); *nret=sucee; } else *nret=true; if((gDxObj.m_displayMode&DISPLAY_GDI) == DISPLAY_GDI||(gDxObj.m_displayMode&DISPLAY_DX2) == DISPLAY_DX2) { //TSRuntime::add_log( "DISPLAY_GDI"); //TSRuntime::add_log( "gdi模式找图初始化"); //GDI模式需要修改WINDOW样式 //遍历获取父窗口句柄 HWND parenthwnd=0; HWND hparent=0; bool findparent=false; do{ if(parenthwnd==0) parenthwnd=GetParent(gDxObj.m_hwnd); else { hparent=GetParent(parenthwnd); if(hparent!=0&&hparent!=parenthwnd) { //gDxObj.m_parenthwnd=hparent; //TSRuntime::add_log( "gDxObj.m_parenthwnd:%d",gDxObj.m_parenthwnd); hwnd=(LONG)hparent; findparent=true; } parenthwnd=hparent; } }while(parenthwnd!=NULL); char pszBinWindow_GDIWINDOW[MAX_PATH]={0}; sprintf( pszBinWindow_GDIWINDOW,"%s%d",TS_BINDWINDOW_GDIWINDOW,gDxObj.nPid); SetPropA((HWND)hwnd,pszBinWindow_GDIWINDOW,(HANDLE)1); //设置绑定标识符 typedef bool (__stdcall * myGetLayeredWindowAttributes)( HWND hwnd, COLORREF *pcrKey, BYTE *pbAlpha, DWORD *pdwFlags); myGetLayeredWindowAttributes obj_GetLayeredWindowAttributes= NULL; typedef bool (__stdcall * mySetLayeredWindowAttributes)( HWND hwnd, COLORREF pcrKey, BYTE pbAlpha, DWORD pdwFlags); mySetLayeredWindowAttributes obj_SetLayeredWindowAttributes= NULL; HINSTANCE hlibrary; hlibrary = LoadLibrary(_T("user32.dll")); obj_GetLayeredWindowAttributes=(myGetLayeredWindowAttributes)GetProcAddress(hlibrary,"GetLayeredWindowAttributes"); obj_SetLayeredWindowAttributes=(mySetLayeredWindowAttributes)GetProcAddress(hlibrary,"SetLayeredWindowAttributes"); DWORD dwExStyle = GetWindowLong((HWND)hwnd,GWL_EXSTYLE); gDxObj.GDI_dwExStyle=dwExStyle; COLORREF crKey=0; BYTE bAlpha=0; DWORD dwFlags=0; bool ret=obj_GetLayeredWindowAttributes((HWND)hwnd, &crKey, &bAlpha, &dwFlags); //GDI:crKey=0xff00ff,bAlpha=0,dwFlags=1;//DX2:crKey=0;bAlpha=0XFF;dwFlags=2; if(gDxObj.m_displayMode&DISPLAY_GDI) { crKey=0xff00ff; bAlpha=0; dwFlags=LWA_COLORKEY; ::SetWindowLong((HWND)hwnd, GWL_EXSTYLE, 0x80100); } else if(gDxObj.m_displayMode&DISPLAY_DX2) { crKey=0; bAlpha=0XFF; dwFlags=LWA_ALPHA; ::SetWindowLong((HWND)hwnd, GWL_EXSTYLE, 0x80100); } obj_SetLayeredWindowAttributes((HWND)hwnd, crKey, bAlpha, dwFlags); ::UpdateWindow((HWND)hwnd); Sleep(100); //疑问 这里等1秒是等待窗口刷新 gDxObj.m_dwExStyle=dwExStyle; //GDI模式需要修改WINDOW样式 } else if(gDxObj.m_displayMode&DISPLAY_NORMAL) { gDxObj.m_hwnd=GetDesktopWindow(); if(::IsWindow((HWND)hwnd)) gDxObj.m_parenthwnd=(HWND)hwnd; else gDxObj.m_parenthwnd=gDxObj.m_hwnd;//桌面句柄; } gDxObj.InitGdiNormal(); if(sucee||*nret==true) gDxObj.m_isBind=true; VMPEND //TSRuntime::add_log( "TS_BIND-end"); return S_OK; } STDMETHODIMP CTSPlugInterFace::BindWindowEx(LONG hwnd, BSTR display, BSTR mouse, BSTR keypad, BSTR publics, LONG mode, LONG* nret) { // TODO: 在此添加实现代码 return S_OK; } STDMETHODIMP CTSPlugInterFace::UnBindWindow(LONG* nret) { TsMutexlock ts_mutexlock(&gDXUnbindMutex); //TSRuntime::g_DxObj.SendMsg(TS_UNBIND); if(gDxObj.m_isBind) { gDxObj.SendMsg(TS_UNBIND); Sleep(200); gDxObj.UnBind(); gDxObj.m_isBind=false; if(!TSRuntime::IsLoginlog) { Loginlog(TSRuntime::MachineCode); TSRuntime::IsLoginlog=true; } } * nret=1; // TODO: 在此添加实现代码 return S_OK; } STDMETHODIMP CTSPlugInterFace::KeyDown(LONG vk_code, LONG* nret) { TsMutexlock ts_mutexlock(&gDXKeyDownMutex); // TODO: 在此添加实现代码 if(vk_code==VK_MENU) { //TSRuntime::g_IsSYSKEY=true; gDxObj.g_IsSYSKEY=true; } if((gDxObj.m_keyMode&KEY_NORMAL)==KEY_NORMAL)//判断是否是前台模式 { if(TSRuntime::SetSimModeType==0) TSRuntime::g_KeyBoard.keyDown(vk_code); } else { if(gDxObj.g_IsSYSKEY&&vk_code!=VK_MENU) *nret=PostMessage(gDxObj.m_mousekeyhwnd,WM_SYSKEYDOWN,vk_code,1<<29); gDxObj.SendMsg(TS_KEYDOWN,vk_code); //*nret=PostMessage(TSRuntime::g_DxObj.m_hwnd,WM_SYSKEYDOWN,vk_code,1<<29); if(gDxObj.m_keyMode&KEY_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_KEYDOWN,vk_code,TSRuntime::retrunLparamDown(vk_code)); //TSRuntime::g_DxObj.SendMsg(WM_KEYDOWN,vk_code); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::KeyUp(LONG vk_code, LONG* nret) { TsMutexlock ts_mutexlock(&gDXKeyUpMutex); // TODO: 在此添加实现代码 if(vk_code==VK_MENU) { //TSRuntime::g_IsSYSKEY=false; gDxObj.g_IsSYSKEY=false; } if((gDxObj.m_keyMode&KEY_NORMAL)==KEY_NORMAL)//判断是否是前台模式 { if(TSRuntime::SetSimModeType==0) TSRuntime::g_KeyBoard.keyUp(vk_code); } else { if(TSRuntime::g_IsSYSKEY) *nret=::PostMessage(gDxObj.m_mousekeyhwnd,WM_SYSKEYUP,vk_code,0); *nret=gDxObj.SendMsg(TS_KEYUP,vk_code); // *nret=::PostMessage(TSRuntime::g_DxObj.m_hwnd,WM_SYSKEYUP,vk_code,0); //*nret=TSRuntime::g_DxObj.SendMsg(TS_KEYUP,vk_code); if(gDxObj.m_keyMode&KEY_WINDOW) //TSRuntime::g_DxObj.SendMsg(WM_KEYUP,vk_code); PostMessage(gDxObj.m_mousekeyhwnd,WM_KEYUP,vk_code,(0xC0000000|TSRuntime::retrunLparamDown(vk_code))); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::KeyPress(LONG vk_code, LONG* nret) { TsMutexlock ts_mutexlock(&gDXKeyPressMutex); // TODO: 在此添加实现代码 if((gDxObj.m_keyMode&KEY_NORMAL)==KEY_NORMAL)//判断是否是前台模式 { if(TSRuntime::SetSimModeType==0) { TSRuntime::g_KeyBoard.delaytime=gDxObj.NormalKeysleep; TSRuntime::g_KeyBoard.keyPress(vk_code); } } else { if(gDxObj.g_IsSYSKEY&&vk_code!=VK_MENU) *nret=PostMessage(gDxObj.m_mousekeyhwnd,WM_SYSKEYDOWN,vk_code,1<<29); else *nret=gDxObj.SendMsg(TS_KEYDOWN,vk_code); if(gDxObj.m_keyMode&KEY_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_KEYDOWN,vk_code,TSRuntime::retrunLparamDown(vk_code)); if(gDxObj.m_keyMode&KEY_WINDOW) //window模式默认延时)) { if(gDxObj.IsTSEnableRealKeypad) Sleep(gDxObj.TSRealKeyMousSleepTime(1)); else Sleep(gDxObj.WindowsKeyMouseClicksleep); } else { if(gDxObj.IsTSEnableRealKeypad) Sleep(gDxObj.TSRealKeyMousSleepTime(1)); else Sleep(gDxObj.KeyDownsleep); } *nret=gDxObj.SendMsg(TS_KEYUP,vk_code); if(gDxObj.m_keyMode&KEY_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_KEYUP,vk_code,(0xC0000000|TSRuntime::retrunLparamDown(vk_code))); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::LeftDown(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXLeftDownMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { // if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.leftDown(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { SendMessage(gDxObj.m_mousekeyhwnd,WM_SETFOCUS,(WPARAM)gDxObj.m_mousekeyhwnd,0); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,(WPARAM)gDxObj.m_mousekeyhwnd,0); PostMessage(gDxObj.m_mousekeyhwnd,WM_LBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } else *nret=gDxObj.SendMsg(TS_LBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::LeftUp(LONG* nret) { // TODO: 在此添加实现代 TsMutexlock ts_mutexlock(&gDXLeftUpMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { //TSRuntime::g_Mouse.leftUp(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.leftUp(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_LBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,0,0); } else *nret=gDxObj.SendMsg(TS_LBUTTOUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::LeftClick(LONG* nret) { TsMutexlock ts_mutexlock(&gDXLeftClickMutex); // TODO: 在此添加实现代码 if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.delaytimes=gDxObj.NormalClicksleep; if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.leftClick(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { SendMessage(gDxObj.m_mousekeyhwnd,WM_SETFOCUS,(WPARAM)gDxObj.m_mousekeyhwnd,0); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,(WPARAM)gDxObj.m_mousekeyhwnd,0); PostMessage(gDxObj.m_mousekeyhwnd,WM_LBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } else *nret=gDxObj.SendMsg(TS_LBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); if(gDxObj.m_mouseMode&MOUSE_WINDOW) //window模式默认延时 { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.WindowsKeyMouseClicksleep); } else { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.MouseClicksleep); //dx模式默认延时 } if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_LBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,0,0); } else *nret=gDxObj.SendMsg(TS_LBUTTOUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::MoveTo(LONG x, LONG y, LONG* nret) { TsMutexlock ts_mutexlock(&gDXMoveToMutex); // TODO: 在此添加实现代码 POINT pos; pos.x=x; pos.y=y; if(gDxObj.IsTSEnableRealMouse) { if(IsWindow(gDxObj.m_hwnd)) { ::ClientToScreen(gDxObj.m_mousekeyhwnd,&pos); gDxObj.TSEnableRealMouse(pos.x,pos.y); gDxObj.LastMouseMoveX=pos.x; gDxObj.LastMouseMoveY=pos.y; } else { gDxObj.TSEnableRealMouse(x,y); gDxObj.LastMouseMoveX=x; gDxObj.LastMouseMoveY=y; } } else { if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { if(IsWindow(gDxObj.m_hwnd)) { ::ClientToScreen(gDxObj.m_mousekeyhwnd,&pos); if(TSRuntime::SetSimModeType==0)//普通模式 ::SetCursorPos(pos.x,pos.y); gDxObj.LastMouseMoveX=pos.x; gDxObj.LastMouseMoveY=pos.y; } else { //::SetCursorPos(x,y); if(TSRuntime::SetSimModeType==0)//普通模式 ::SetCursorPos(x,y); gDxObj.LastMouseMoveX=x; gDxObj.LastMouseMoveY=y; } } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_MOUSEMOVE,0,MAKELPARAM(x,y)); else { *nret=gDxObj.SendMsg(TS_MOUSEMOVE,0,MAKELPARAM(x,y)); //*nret=gDxObj.SendMsg(TS_MOUSEMOVEOVER); } gDxObj.LastMouseMoveX=x; gDxObj.LastMouseMoveY=y; } } *nret=1; return S_OK; } //int addr=0; STDMETHODIMP CTSPlugInterFace::FindPic(LONG x1, LONG y1, LONG x2, LONG y2, BSTR pic_name, BSTR delta_color, DOUBLE sim, LONG dir, VARIANT* intX, VARIANT* intY, LONG* nret) { // TsMutexlock ts_mutexlock(&gDXFindPicMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } //ret=TSRuntime::g_DxObj.findPic(x1,y1,x2,y2,pic_name,delta_color,sim,dir,x,y); ret=gDxObj.findPic(x1,y1,x2,y2,pic_name,delta_color,sim,dir,x,y); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; if(x==-1||y==-1) ret=-1; *nret=ret; //TSRuntime::add_log( "findPicture,X:%d,Y:%d",x,y); //TSRuntime::add_log( "findPicture,X:%d,Y:%d,add:%d",x,y,++addr); return S_OK; } STDMETHODIMP CTSPlugInterFace::RightClick(LONG* nret) { TsMutexlock ts_mutexlock(&gDXRightClickMutex); // TODO: 在此添加实现代码 if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.delaytimes=gDxObj.NormalClicksleep; //TSRuntime::g_Mouse.rightClick(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.rightClick(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_RBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_SETFOCUS,(WPARAM)gDxObj.m_hwnd,0); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,(WPARAM)gDxObj.m_mousekeyhwnd,0); } else *nret=gDxObj.SendMsg(TS_RBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); if(gDxObj.m_mouseMode&MOUSE_WINDOW) //window模式默认延时 { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.WindowsKeyMouseClicksleep); } else { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.MouseClicksleep); //dx模式默认延时 } if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_RBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,0,0); } else *nret=gDxObj.SendMsg(TS_RBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::RightDown(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXRightDownMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { //TSRuntime::g_Mouse.rightDown(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.rightDown(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_RBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_SETFOCUS,(WPARAM)gDxObj.m_hwnd,0); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,(WPARAM)gDxObj.m_mousekeyhwnd,0); } else *nret=gDxObj.SendMsg(TS_RBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindColor(LONG x1, LONG y1, LONG x2, LONG y2, BSTR color, DOUBLE sim, LONG dir, VARIANT* intX, VARIANT* intY, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindColorMutex); if(x1>=x2||y1>=y2) { MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } //wchar_t* p=0; DWORD ncolor=0x100; //ncolor=::wcstol(color,&p,16); //int r=0,g=0,b=0; //r=GetRValue(ncolor); //g=GetGValue(ncolor); //b=GetBValue(ncolor); //swprintf(color,L"%x%x%x",r,g,b);//将传入的RGB颜色值转换为BGR进行找色 //ncolor=::wcstol(color,&p,16); LONG x=-1,y=-1,ret; //TSRuntime::add_log("FindColor:_wtoi:%x",ncolor); //ret=TSRuntime::g_DxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y); ret=gDxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y,color); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; *nret=ret; return S_OK; } STDMETHODIMP CTSPlugInterFace::RightUp(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXRightUpMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { //TSRuntime::g_Mouse.rightUp(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.rightUp(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_RBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,0,0); } else *nret=gDxObj.SendMsg(TS_RBUTTONUP,0,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::GetColor(LONG x, LONG y, BSTR* RetStrColor) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXGetColorMutex); //TSRuntime::g_DxObj.GetColor(x,y,*RetStrColor); //memset(TSRuntime::RetStr,0,MAX_PATH); gDxObj.GetColor(x,y,TSRuntime::RetStr); CComBSTR newbstr; newbstr.Append(TSRuntime::RetStr); newbstr.CopyTo(RetStrColor); //_variant_t strVar(); //*RetStrColor=strVar.bstrVal;//_bstr_t(TSRuntime::RetStr) return S_OK; } STDMETHODIMP CTSPlugInterFace::GetCursorShape(BSTR* RetCursorShape) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXGetCursorShapeMutex); DWORD mouseshape=0; if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.getmouseshape(mouseshape); } else mouseshape=gDxObj.SendMsg(TS_GETMOUSESHARE,0,0); if(mouseshape) { memset(TSRuntime::RetStr,0,MAX_PATH); swprintf(TSRuntime::RetStr,L"%x",mouseshape); _variant_t strVar(TSRuntime::RetStr); *RetCursorShape=strVar.bstrVal; } return S_OK; } STDMETHODIMP CTSPlugInterFace::SetPath(BSTR path, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXSetPathMutex); //*nret=TSRuntime::g_DxObj.TSSetpath(path); *nret=gDxObj.TSSetpath(path); *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::TSGuardProtect(LONG enable, BSTR type,LONG* nret) { // TODO: 在此添加实现代码 // TsMutexlock ts_mutexlock(&gDXbindMutex); VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1);//Pid *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } TSRuntime::IsProid=wcstol(type,0,10); *nret=TSRuntime::StartProtect(enable,0); VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::KeyPressStr(BSTR key_str, LONG delay, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXKeyPressStrMutex); if((gDxObj.m_keyMode&KEY_NORMAL)==KEY_NORMAL)//判断是否是前台模式 { if(TSRuntime::SetSimModeType==0) TSRuntime::g_KeyBoard.sendkeyString(key_str,delay); } else { int len=wcslen(key_str); for(int i=0;itt; *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::SendString(LONG hwnd, BSTR str, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXSendStringMutex); int len=wcslen(str); //MessageBoxA(NULL,tts,tts,NULL); for(int i=0;ivt=VT_I4; y->vt=VT_I4; x->lVal=gDxObj.LastMouseMoveX; y->lVal=gDxObj.LastMouseMoveY; * nret=1; ////if(lParam) //{ // x->lVal=(short)LOWORD(lParam); // y->lVal=(short)HIWORD(lParam); // * nret=1; //} //else //* nret=0; return S_OK; } STDMETHODIMP CTSPlugInterFace::MoveR(LONG rx, LONG ry, LONG* rnet) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXMoveRMutex); POINT pos; pos.x=rx+gDxObj.LastMouseMoveX; pos.y=ry+gDxObj.LastMouseMoveY; if(gDxObj.IsTSEnableRealMouse) { if(IsWindow(gDxObj.m_hwnd)) { ::ScreenToClient(gDxObj.m_mousekeyhwnd,&pos); gDxObj.TSEnableRealMouse(pos.x,pos.y); gDxObj.LastMouseMoveX=pos.x; gDxObj.LastMouseMoveY=pos.y; } else { gDxObj.TSEnableRealMouse(rx+gDxObj.LastMouseMoveX,ry+gDxObj.LastMouseMoveY); gDxObj.LastMouseMoveX=rx+gDxObj.LastMouseMoveX; gDxObj.LastMouseMoveY=ry+gDxObj.LastMouseMoveY; } } else { if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { if(IsWindow(gDxObj.m_hwnd)) { ::ClientToScreen(gDxObj.m_mousekeyhwnd,&pos); if(TSRuntime::SetSimModeType==0)//普通模式 ::SetCursorPos(pos.x,pos.y); gDxObj.LastMouseMoveX=pos.x; gDxObj.LastMouseMoveY=pos.y; } else { if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.mouseMvrelative(rx,ry); gDxObj.LastMouseMoveX=rx+gDxObj.LastMouseMoveX; gDxObj.LastMouseMoveY=ry+gDxObj.LastMouseMoveY; } } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { PostMessage(gDxObj.m_mousekeyhwnd,WM_MOUSEMOVE,0,MAKELPARAM(rx+gDxObj.LastMouseMoveX,ry+gDxObj.LastMouseMoveY)); } else { *rnet=gDxObj.SendMsg(TS_MOUSER,0,MAKELPARAM(rx,ry)); } gDxObj.LastMouseMoveX=rx+gDxObj.LastMouseMoveX; gDxObj.LastMouseMoveY=ry+gDxObj.LastMouseMoveY; } } //*rnet=gDxObj.SendMsg(TS_MOUSEMOVEOVER); //*rnet=TSRuntime::g_DxObj.SendMsg(TS_MOUSER,0,MAKELPARAM(rx,ry)); //*rnet=TSRuntime::g_DxObj.SendMsg(TS_MOUSEMOVEOVER); *rnet=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::Ver(BSTR* retver) { // TODO: 在此添加实现代码 //_variant_t strVar(TS_VERSION); //*retver=strVar.bstrVal; CComBSTR newbstr; newbstr.Append(TS_VERSION); newbstr.CopyTo(retver); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetPath(BSTR* retpath) { // TODO: 在此添加实现代码 //_variant_t strVar(TSRuntime::SetPath); //strVar.bstrVal; // TsMutexlock ts_mutexlock(&gDXbindMutex); CComBSTR newbstr; newbstr.Append(gDxObj.m_SetPath); newbstr.CopyTo(retpath); return S_OK; } STDMETHODIMP CTSPlugInterFace::MiddleClick(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXMiddleClickMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.delaytimes=gDxObj.NormalClicksleep; //TSRuntime::g_Mouse.middleClick(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.middleClick(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_MBUTTONUP,1,0); * nret=gDxObj.SendMsg(TS_MBUTTONDOWN,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); if(gDxObj.m_mouseMode&MOUSE_WINDOW) //window模式默认延时 { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.WindowsKeyMouseClicksleep); } else { if(gDxObj.IsTSEnableRealMouse) Sleep(gDxObj.TSRealKeyMousSleepTime(0)); else Sleep(gDxObj.MouseClicksleep); //dx模式默认延时 } PostMessage(gDxObj.m_mousekeyhwnd,WM_MBUTTONUP,0,0); * nret=gDxObj.SendMsg(TS_MBUTTONUP); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::WheelDown(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXWheelDownMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.mouseSheetDown(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_MOUSEWHEEL,0xff880000,0); * nret=gDxObj.SendMsg(TS_MOUSEWHEEL,0xff880000,0); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::WheelUp(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXWheelUpMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.mouseSheetUp(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) PostMessage(gDxObj.m_mousekeyhwnd,WM_MOUSEWHEEL,0x780000,0); * nret=gDxObj.SendMsg(TS_MOUSEWHEEL,0x780000,0); } *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::Capture(LONG x1, LONG y1, LONG x2, LONG y2, BSTR file, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXCaptureMutex); //VMPBEGIN //VMP保护 //if(!TSRuntime::IsVipLogin) // { // int bret=TSRuntime::VipLogin(L"",0,false); //试用验证 // if(bret<=0) // { // INT64 t=0; // if(my_myGetTickCount) // t=my_myGetTickCount(); // else // t=::GetTickCount(); // if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 // { // gDxObj.SendMsg(TS_UNBIND); // Sleep(200); // gDxObj.UnBind(); // Sleep(200); // gDxObj.SendMsg(TS_UNBIND); // Sleep(200); // gDxObj.UnBind(); // if(TSRuntime::IsStartProtect) // TSRuntime::StartProtect(0,L""); // *nret=0; // TSRuntime::h_checkthread=NULL; // return S_OK; // } // } // } // VMPEND if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } * nret=gDxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_BMP); //* nret=TSRuntime::g_DxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_BMP); return S_OK; } STDMETHODIMP CTSPlugInterFace::CaptureJpg(LONG x1, LONG y1, LONG x2, LONG y2,BSTR file, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXCaptureMutex); if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } * nret=gDxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_JPG); //* nret=TSRuntime::g_DxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_JPG); return S_OK; } STDMETHODIMP CTSPlugInterFace::CapturePng(LONG x1, LONG y1, LONG x2, LONG y2, BSTR file, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXCaptureMutex); if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } * nret=gDxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_PNG); //* nret=TSRuntime::g_DxObj.Capture(x1,y1,x2,y2,file,D3DXIFF_PNG); return S_OK; } STDMETHODIMP CTSPlugInterFace::LockInput(LONG lock, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXLockInputMutex); //* nret=TSRuntime::g_DxObj.SendMsg(TS_LOCKINPUT,lock); * nret=gDxObj.SendMsg(TS_LOCKINPUT,lock); *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::Ocr(LONG x1, LONG y1, LONG x2, LONG y2, BSTR color_format, FLOAT sim, BSTR* retstr) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXOcrMutex); if(wcslen(color_format)==0) return S_OK; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } //TSRuntime::g_DxObj.Ocr(x1,y1,x2,y2,color_format,sim); gDxObj.Ocr(x1,y1,x2,y2,color_format,sim); //TSRuntime::add_log( "TSRuntime::pData->RetString:%s",TSRuntime::pData->RetString); CComBSTR newbstr; if(gDxObj.pData) //*retstr=_bstr_t(); newbstr.Append(gDxObj.pData->RetString); else //*retstr=_bstr_t(); newbstr.Append(gDxObj.m_Retstr); newbstr.CopyTo(retstr); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetDict(LONG index, BSTR file, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXSetDictMutex); //*nret=TSRuntime::g_DxObj.TSSetDict(index,file); *nret=gDxObj.TSSetDict(index,file); return S_OK; } STDMETHODIMP CTSPlugInterFace::UseDict(LONG index, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXUseDictMutex); //*nret=TSRuntime::g_DxObj.TSUseDict(index); *nret=gDxObj.TSUseDict(index); return S_OK; } STDMETHODIMP CTSPlugInterFace::ClearDict(LONG index, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXClearDictMutex); if(index>=0&&index<20&&index!=gDxObj.NowUsingDictIndex) { if(gDxObj.MyDictCount[index]!=NULL) { gDxObj.nMyDictCountsize[index]=0; gDxObj.nMaxStrHight[index]=0; delete [] gDxObj.MyDictCount[index]; gDxObj.MyDictCount[index]=NULL; *nret=1; } } *nret=0; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStr(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, FLOAT sim, VARIANT* intX, VARIANT* intY, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,0); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; if(x==-1||y==-1) ret=-1; *nret=ret; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrFast(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, FLOAT sim, VARIANT* intX, VARIANT* intY, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); //TSRuntime::add_log("FindStrFast-start:操作窗口句柄:%d",gDxObj.m_hwnd); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,1); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; if(x==-1||y==-1) ret=-1; *nret=ret; //TSRuntime::add_log("FindStrFast-end:操作窗口句柄:%d",gDxObj.m_hwnd); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetNowDict(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXGetNowDictMutex); *nret=gDxObj.NowUsingDictIndex; return S_OK; } STDMETHODIMP CTSPlugInterFace::GetBasePath(BSTR* retpath) { //TsMutexlock ts_mutexlock(&gDXbindMutex); // TODO: 在此添加实现代码 //*retpath=_bstr_t(gDLLFolder); CComBSTR newbstr; newbstr.Append(gDLLFolder); newbstr.CopyTo(retpath); return S_OK; } STDMETHODIMP CTSPlugInterFace::IsDisplayDead(LONG x1, LONG y1, LONG x2, LONG y2, LONG t, LONG* bret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindPicMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } ret=gDxObj.IsDisplayDead(x1,y1,x2,y2,t); *bret=ret; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindPicEx(LONG x1, LONG y1, LONG x2, LONG y2, BSTR pic_name, BSTR delta_color, DOUBLE sim, LONG dir, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindPicMutex); LONG x=-1,y=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; gDxObj.findPic(x1,y1,x2,y2,pic_name,delta_color,sim,dir,x,y,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrEx(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,0,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrFastEx(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,1,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::CaptureGif(LONG x1, LONG y1, LONG x2, LONG y2, BSTR file, LONG delay, LONG time, LONG* nret) { TsMutexlock ts_mutexlock(&gDXCaptureGifMutex); // TODO: 在此添加实现代码 *nret=gDxObj.CaptureGif(x1,y1,x2,y2,file,delay,time); return S_OK; } STDMETHODIMP CTSPlugInterFace::DownCpu(LONG rate, LONG* nret) { // TODO: 在此添加实现代码 *nret=gDxObj.DownCpu(rate); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetKeypadDelay(BSTR type, LONG delay, LONG* nret) { // TODO: 在此添加实现代码 if((gDxObj.m_keyMode&KEY_NORMAL)==KEY_NORMAL) gDxObj.NormalKeysleep=delay; else if(gDxObj.m_keyMode&KEY_WINDOW) //window模式默认延时) gDxObj.WindowsKeyMouseClicksleep=delay; else gDxObj.KeyDownsleep=delay; *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::SetMouseDelay(BSTR type, LONG delay, LONG* nret) { // TODO: 在此添加实现代码 if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) gDxObj.NormalClicksleep=delay; else if(gDxObj.m_mouseMode&MOUSE_WINDOW) //window模式默认延时 gDxObj.WindowsKeyMouseClicksleep=delay; else gDxObj.MouseClicksleep=delay; *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::CmpColor(LONG x, LONG y, BSTR color, DOUBLE sim, LONG* nret) { // TODO: 在此添加实现代码 TsMutex gDXGetColorMutex(TS_GETCOLOREVEN); *nret=gDxObj.CmpColor(x,y,color,sim); return S_OK; } STDMETHODIMP CTSPlugInterFace::SendStringIme(BSTR str, LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXSendStringImeMutex); if(wcslen(str)>1024) { *nret=0; return S_OK; } memset(gDxObj.pData->pmsg,0,2048); USES_CONVERSION; strcpy(gDxObj.pData->pmsg,W2A(str)); gDxObj.SendMsg(TS_SENDSTRINGIME); *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindColorEx(LONG x1, LONG y1, LONG x2, LONG y2, BSTR color, DOUBLE sim, LONG dir, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindColorMutex); if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } DWORD ncolor=0x100; LONG x=-1,y=-1; wchar_t retstr[MAX_PATH*4]={0}; gDxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y,color,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::EnumWindow(LONG parent, BSTR title, BSTR class_name, LONG filter, BSTR* retstr) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXEnumWindowMutex); wchar_t retstring[MAX_PATH*200]={0}; gWindowObj.TSEnumWindow((HWND)parent,title,class_name,filter,retstring); //*retstr=_bstr_t(retstring); CComBSTR newbstr; newbstr.Append(retstring); newbstr.CopyTo(retstr); return S_OK; } STDMETHODIMP CTSPlugInterFace::EnumWindowByProcess(BSTR process_name, BSTR title, BSTR class_name, LONG filter, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXEnumWindowByProcessMutex); wchar_t retstr[MAX_PATH*200]={0}; gWindowObj.TSEnumWindow((HWND)0,title,class_name,filter,retstr,process_name); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::EnumProcess(BSTR name, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXEnumProcessMutex); wchar_t retstr[MAX_PATH*100]={0}; gWindowObj.TSEnumProcess(name,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::ClientToScreen(LONG ClientToScreen, VARIANT* x, VARIANT* y, LONG* bret) { // TODO: 在此添加实现代码 x->vt=VT_I4; y->vt=VT_I4; *bret=gWindowObj.TSClientToScreen(ClientToScreen,x->lVal,y->lVal); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindWindow(BSTR class_name,BSTR title,LONG* rethwnd) { // TODO: 在此添加实现代码 gWindowObj.TSFindWindow(class_name,title,*rethwnd); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindWindowByProcess(BSTR process_name, BSTR class_name, BSTR title, LONG* rethwnd) { // TODO: 在此添加实现代码 gWindowObj.TSFindWindowByProcess(class_name,title,*rethwnd,process_name); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindWindowByProcessId(LONG process_id, BSTR class_name, BSTR title, LONG* rethwnd) { // TODO: 在此添加实现代码 gWindowObj.TSFindWindowByProcess(class_name,title,*rethwnd,NULL,process_id); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindWindowEx(LONG parent,BSTR class_name,BSTR title,LONG* rethwnd) { // TODO: 在此添加实现代码 gWindowObj.TSFindWindow(class_name,title,*rethwnd,parent); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetClientRect(LONG hwnd, VARIANT* x1, VARIANT* y1, VARIANT* x2, VARIANT* y2, LONG* nret) { // TODO: 在此添加实现代码 x1->vt=VT_I4; y1->vt=VT_I4; x2->vt=VT_I4; y2->vt=VT_I4; * nret=gWindowObj.TSGetClientRect(hwnd,x1->lVal,y1->lVal,x2->lVal,y2->lVal); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetClientSize(LONG hwnd, VARIANT* width, VARIANT* height, LONG* nret) { // TODO: 在此添加实现代码 width->vt=VT_I4; height->vt=VT_I4; * nret=gWindowObj.TSGetClientSize(hwnd,width->lVal,height->lVal); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetForegroundFocus(LONG* rethwnd) { // TODO: 在此添加实现代码 * rethwnd=(LONG)::GetFocus(); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetForegroundWindow(LONG* rethwnd) { // TODO: 在此添加实现代码 * rethwnd=(LONG)::GetForegroundWindow(); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetMousePointWindow(LONG* rethwnd) { // TODO: 在此添加实现代码 //::Sleep(2000); gWindowObj.TSGetMousePointWindow(* rethwnd); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetPointWindow(LONG x, LONG y, LONG* rethwnd) { // TODO: 在此添加实现代码 gWindowObj.TSGetMousePointWindow(* rethwnd,x,y); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetProcessInfo(LONG pid, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gWindowObj.TSGetProcessInfo(pid,retstr); //* retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetSpecialWindow(LONG flag, LONG* rethwnd) { // TODO: 在此添加实现代码 *rethwnd=0; if(flag==0) *rethwnd =(LONG)GetDesktopWindow(); else if(flag==1) { *rethwnd=(LONG)::FindWindow(L"Shell_TrayWnd",NULL); } return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindow(LONG hwnd, LONG flag, LONG* nret) { // TODO: 在此添加实现代码 gWindowObj.TSGetWindow(hwnd,flag,* nret); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowClass(LONG hwnd, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t classname[MAX_PATH]={0}; ::GetClassName((HWND)hwnd,classname,MAX_PATH); //* retstring=_bstr_t(classname); CComBSTR newbstr; newbstr.Append(classname); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowProcessId(LONG hwnd, LONG* nretpid) { // TODO: 在此添加实现代码 DWORD pid=0; ::GetWindowThreadProcessId((HWND)hwnd,&pid); *nretpid=pid; return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowProcessPath(LONG hwnd, BSTR* retstring) { // TODO: 在此添加实现代码 DWORD pid=0; ::GetWindowThreadProcessId((HWND)hwnd,&pid); wchar_t process_path[MAX_PATH]={0}; gWindowObj.GetProcesspath(pid,process_path); //* retstring=_bstr_t(process_path); CComBSTR newbstr; newbstr.Append(process_path); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowRect(LONG hwnd, VARIANT* x1, VARIANT* y1, VARIANT* x2, VARIANT* y2, LONG* nret) { // TODO: 在此添加实现代码 x1->vt=VT_I4; x2->vt=VT_I4; y1->vt=VT_I4; y2->vt=VT_I4; RECT winrect; * nret=::GetWindowRect((HWND)hwnd,&winrect); x1->intVal=winrect.left; y1->intVal=winrect.top; x2->intVal=winrect.right; y2->intVal=winrect.bottom; return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowState(LONG hwnd, LONG flag, LONG* rethwnd) { // TODO: 在此添加实现代码 * rethwnd=gWindowObj.TSGetWindowState(hwnd,flag); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetWindowTitle(LONG hwnd, BSTR* rettitle) { // TODO: 在此添加实现代码 wchar_t title[MAX_PATH]={0}; ::GetWindowText((HWND)hwnd,title,MAX_PATH); //* rettitle=_bstr_t(title); CComBSTR newbstr; newbstr.Append(title); newbstr.CopyTo(rettitle); return S_OK; } STDMETHODIMP CTSPlugInterFace::MoveWindow(LONG hwnd, LONG x, LONG y, LONG* nret) { // TODO: 在此添加实现代码 RECT winrect; ::GetWindowRect((HWND)hwnd,&winrect); int width=winrect.right-winrect.left; int hight=winrect.bottom-winrect.top; *nret=::MoveWindow((HWND)hwnd,x,y,width,hight,false); return S_OK; } STDMETHODIMP CTSPlugInterFace::ScreenToClient(LONG hwnd, VARIANT* x, VARIANT* y,LONG* nret) { // TODO: 在此添加实现代码 x->vt=VT_I4; y->vt=VT_I4; POINT point; * nret=::ScreenToClient((HWND)hwnd,&point); x->intVal=point.x; y->intVal=point.y; return S_OK; } STDMETHODIMP CTSPlugInterFace::SendPaste(LONG hwnd, LONG* nret) { // TODO: 在此添加实现代码 * nret=gWindowObj.TSSendPaste(hwnd); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetClientSize(LONG hwnd, LONG width, LONG hight, LONG* nret) { // TODO: 在此添加实现代码 *nret=gWindowObj.TSSetWindowSize(hwnd,width,hight); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetWindowState(LONG hwnd, LONG flag, LONG* nret) { // TODO: 在此添加实现代码 *nret=gWindowObj.TSSetWindowState(hwnd,flag); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetWindowSize(LONG hwnd, LONG width, LONG height, LONG* nret) { // TODO: 在此添加实现代码 *nret=gWindowObj.TSSetWindowSize(hwnd,width,height,1); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetWindowText(LONG hwnd,BSTR title, LONG* nret) { // TODO: 在此添加实现代码 //*nret=gWindowObj.TSSetWindowState(hwnd,flag); * nret=::SetWindowText((HWND)hwnd,title); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetWindowTransparent(LONG hwnd, LONG trans, LONG* nret) { // TODO: 在此添加实现代码 * nret=gWindowObj.TSSetWindowTransparent(hwnd,trans); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetClipboard(BSTR value, LONG* nret) { // TODO: 在此添加实现代码 * nret=gWindowObj.TSSetClipboard(value); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetClipboard(BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH*4]={0}; gWindowObj.TSGetClipboard(retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::DoubleToData(DOUBLE value, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSValueTypeToData(0,retstr,value); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FloatToData(FLOAT value, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSValueTypeToData(1,retstr,NULL,value); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::IntToData(LONG value, LONG type, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSValueTypeToData(2,retstr,NULL,NULL,value,NULL,type); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::StringToData(BSTR value, LONG type, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSValueTypeToData(3,retstr,NULL,NULL,NULL,value,type); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindData(LONG hwnd, BSTR addr_range, BSTR data, BSTR* retstring) { TsMutexlock ts_mutexlock(&gDXFindDataMutex); // TODO: 在此添加实现代码 //wchar_t retstr[MAX_PATH*200]={0}; //gMemoryObj.TSFindData(hwnd,addr_range,data,retstr); //*retstring=_bstr_t(retstr); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindData(hwnd,addr_range,data,retstr); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindDouble(LONG hwnd, BSTR addr_range, DOUBLE double_value_min, DOUBLE double_value_max, BSTR* retstring) { TsMutexlock ts_mutexlock(&gDXFindDoubleMutex); // TODO: 在此添加实现代码 //wchar_t retstr[MAX_PATH*200]={0}; //gMemoryObj.TSFindDouble(hwnd,addr_range,retstr,double_value_min,double_value_max); //*retstring=_bstr_t(retstr); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindDouble(hwnd,addr_range,retstr,double_value_min,double_value_max); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindFloat(LONG hwnd, BSTR addr_range, FLOAT float_value_min, FLOAT float_value_max, BSTR* retstring) { TsMutexlock ts_mutexlock(&gDXFindFloatMutex); // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindFloat(hwnd,addr_range,retstr,float_value_min,float_value_max); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindInt(LONG hwnd, BSTR addr_range, LONG int_value_min, LONG int_value_max, LONG type, BSTR* retstring) { TsMutexlock ts_mutexlock(&gDXFindIntMutex); // TODO: 在此添加实现代码 //wchar_t retstr[MAX_PATH*200]={0}; //gMemoryObj.TSFindInt(hwnd,addr_range,retstr,int_value_min,int_value_max,type); //*retstring=_bstr_t(retstr); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindInt(hwnd,addr_range,retstr,int_value_min,int_value_max,type); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindString(LONG hwnd, BSTR addr_range, BSTR string_value, LONG type, BSTR* retstring) { TsMutexlock ts_mutexlock(&gDXFindStringMutex); // TODO: 在此添加实现代码 //wchar_t retstr[MAX_PATH*200]={0}; //gMemoryObj.TSFindString(hwnd,addr_range,retstr,string_value,type); //*retstring=_bstr_t(retstr); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindString(hwnd,addr_range,retstr,string_value,type); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::ReadData(LONG hwnd, BSTR addr, LONG len, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSReadData(hwnd,addr,retstr,len); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::OcrEx(LONG x1, LONG y1, LONG x2, LONG y2, BSTR color_format, DOUBLE sim, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXOcrMutex); if(wcslen(color_format)==0) return S_OK; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } //TSRuntime::g_DxObj.Ocr(x1,y1,x2,y2,color_format,sim); gDxObj.Ocr(x1,y1,x2,y2,color_format,sim,1); //TSRuntime::add_log( "TSRuntime::pData->RetString:%s",TSRuntime::pData->RetString); CComBSTR newbstr; if(gDxObj.pData) //*retstring=_bstr_t(gDxObj.pData->RetString); newbstr.Append(gDxObj.pData->RetString); else //*retstring=_bstr_t(TSRuntime::RetStr); newbstr.Append(gDxObj.m_Retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::ReadDouble(LONG hwnd, BSTR addr, DOUBLE* retdouble) { // TODO: 在此添加实现代码 float fvalue=0; gMemoryObj.TSReadDouble(hwnd,addr,* retdouble,fvalue); return S_OK; } STDMETHODIMP CTSPlugInterFace::ReadFloat(LONG hwnd, BSTR addr, FLOAT* retfloat) { // TODO: 在此添加实现代码 DOUBLE dvalue=0; gMemoryObj.TSReadDouble(hwnd,addr,dvalue,* retfloat,1); return S_OK; } STDMETHODIMP CTSPlugInterFace::ReadInt(LONG hwnd, BSTR addr, LONG type, LONG* retint) { // TODO: 在此添加实现代码 int ivalue=0; short svalue=0; BYTE bvalue=0; gMemoryObj.TSReadInt(hwnd,addr,ivalue,svalue,bvalue,type); if(type==0) *retint=ivalue; else if(type==1) *retint=svalue; else if(type==2) *retint=bvalue; return S_OK; } STDMETHODIMP CTSPlugInterFace::ReadString(LONG hwnd, BSTR addr, LONG type, LONG len, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH]={0}; gMemoryObj.TSReadString(hwnd,addr,retstr,len,type); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::TerminateProcess(LONG pid, LONG* bret) { // TODO: 在此添加实现代码 * bret=gMemoryObj.TSTerminateProcess(pid); return S_OK; } STDMETHODIMP CTSPlugInterFace::VirtualAllocEx(LONG hwnd, LONG addr, LONG size, LONG type, LONG* bret) { // TODO: 在此添加实现代码 LONG retaddr=addr; gMemoryObj.TSVirtualAllocEx(hwnd,retaddr,size,type); * bret=retaddr; return S_OK; } STDMETHODIMP CTSPlugInterFace::VirtualFreeEx(LONG hwnd, LONG addr, LONG* bret) { // TODO: 在此添加实现代码 * bret=gMemoryObj.TSVirtualFreeEx(hwnd,addr); return S_OK; } STDMETHODIMP CTSPlugInterFace::WriteDouble(LONG hwnd, BSTR addr, DOUBLE v, LONG* bret) { // TODO: 在此添加实现代码 * bret=gMemoryObj.TSWriteDouble(hwnd,addr,v); return S_OK; } STDMETHODIMP CTSPlugInterFace::WriteFloat(LONG hwnd, BSTR addr, FLOAT v, LONG* bret) { // TODO: 在此添加实现代码 * bret=gMemoryObj.TSWriteDouble(hwnd,addr,0,v); return S_OK; } STDMETHODIMP CTSPlugInterFace::WriteInt(LONG hwnd, BSTR addr, LONG type, LONG v, LONG* bret) { // TODO: 在此添加实现代码 int ivalue=0; short svalue=0; BYTE bvalue=0; if(type==0) //0 : 32位 ivalue=v; else if(type==1)//1 : 16 位 svalue=v; else if(type==2) //2 : 8位 bvalue=v; * bret=gMemoryObj.TSWriteInt(hwnd,addr,ivalue,svalue,bvalue); return S_OK; } STDMETHODIMP CTSPlugInterFace::WriteString(LONG hwnd, BSTR addr, LONG type, BSTR v, LONG* bret) { // TODO: 在此添加实现代码 * bret=gMemoryObj.TSWriteString(hwnd,addr,v,type); return S_OK; } STDMETHODIMP CTSPlugInterFace::WriteData(LONG hwnd, BSTR addr, BSTR data, LONG* nret) { // TODO: 在此添加实现代码 * nret=gMemoryObj.TSWriteData(hwnd,addr,data); return S_OK; } STDMETHODIMP CTSPlugInterFace::IsBind(LONG hwnd, LONG* nret) { // TODO: 在此添加实现代码 if(::IsWindow((HWND)hwnd)==false) { * nret=0; return S_OK; } if(gDxObj.m_isBind==true) { * nret=1; return S_OK; } //DWORD nPid=0; //::GetWindowThreadProcessId((HWND)hwnd,&nPid); char pszBinWindow_SetWindowHook[MAX_PATH]={0}; sprintf( pszBinWindow_SetWindowHook,"%s%d",TS_BINDWINDOW_SETWINDOWHOOK,gDxObj.nPid); HANDLE hbindprop=GetPropA((HWND)hwnd,pszBinWindow_SetWindowHook); char pszBinWindow_IME[MAX_PATH]={0}; sprintf( pszBinWindow_IME,"%s%d",TS_BINDWINDOW_IME,gDxObj.nPid); HANDLE hbindIMEprop=GetPropA((HWND)hwnd,pszBinWindow_IME); char pszBinWindow_IME101[MAX_PATH]={0}; sprintf( pszBinWindow_IME101,"%s%d",TS_BINDWINDOW_IME101,gDxObj.nPid); HANDLE hbindIMEprop101=GetPropA((HWND)hwnd,pszBinWindow_IME101); char pszBinWindow_GDIWINDOW[MAX_PATH]={0}; sprintf( pszBinWindow_GDIWINDOW,"%s%d",TS_BINDWINDOW_GDIWINDOW,gDxObj.nPid); HANDLE hbindGdiWindow=GetPropA((HWND)hwnd,pszBinWindow_GDIWINDOW); if(hbindGdiWindow==NULL) { //遍历获取父窗口句柄 HWND parenthwnd=0; HWND hparent=0; do{ if(parenthwnd==0) parenthwnd=GetParent((HWND)hwnd); else { hparent=GetParent(parenthwnd); if(hparent!=0&&hparent!=parenthwnd) { hwnd=(LONG)hparent; } parenthwnd=hparent; } }while(parenthwnd!=NULL); //::GetWindowThreadProcessId((HWND)hwnd,&nPid); char pszBinWindow_GDIWINDOW[MAX_PATH]={0}; sprintf( pszBinWindow_GDIWINDOW,"%s%d",TS_BINDWINDOW_GDIWINDOW,gDxObj.nPid); hbindGdiWindow=GetPropA((HWND)hwnd,pszBinWindow_GDIWINDOW); } if(hbindprop==NULL&&hbindIMEprop==NULL&&hbindIMEprop101==NULL&&hbindGdiWindow==NULL) * nret=0; else * nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindFloatEx(LONG hwnd, BSTR addr_range, FLOAT float_value_min, FLOAT float_value_max, LONG step, LONG multi_thread, LONG mode, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindFloatMutex); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindFloat(hwnd,addr_range,retstr,float_value_min,float_value_max,multi_thread); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindDoubleEx(LONG hwnd, BSTR addr_range, DOUBLE double_value_min, DOUBLE double_value_max, LONG step, LONG multi_thread, LONG mode, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindDoubleMutex); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindDouble(hwnd,addr_range,retstr,double_value_min,double_value_max,multi_thread); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindIntEx(LONG hwnd, BSTR addr_range, LONG int_value_min, LONG int_value_max, LONG type, LONG step, LONG multi_thread, LONG mode, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindIntMutex); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindInt(hwnd,addr_range,retstr,int_value_min,int_value_max,type,multi_thread); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindDataEx(LONG hwnd, BSTR addr_range, BSTR data, LONG step, LONG multi_thread, LONG mode, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindDataMutex); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindData(hwnd,addr_range,data,retstr,multi_thread); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStringEx(LONG hwnd, BSTR addr_range, BSTR string_value, LONG type, LONG step, LONG multi_thread, LONG mode, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStringMutex); wchar_t retstr[MAX_PATH*1024]={0}; CComBSTR newbstr; gMemoryObj.TSFindString(hwnd,addr_range,retstr,string_value,type,multi_thread); newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetModuleBaseAddr(LONG hwnd, BSTR modulename, LONG* nret) { // TODO: 在此添加实现代码 DWORD pid=0; ::GetWindowThreadProcessId((HWND)hwnd,&pid); * nret=TSRuntime::GetRemoteModuleBaseAddr(modulename,pid); return S_OK; } STDMETHODIMP CTSPlugInterFace::GetCommandLine(LONG hwnd, BSTR* retstring) { // TODO: 在此添加实现代码; wchar_t argv[MAX_PATH]={0}; gMemoryObj.TSGetCmdLine(hwnd,argv); //*retstring=_bstr_t(argv); CComBSTR newbstr; newbstr.Append(argv); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::AsmAdd(BSTR asm_ins, LONG* nret) { // TODO: 在此添加实现代码 * nret=gMemoryObj.TSAsmAdd(asm_ins); return S_OK; } STDMETHODIMP CTSPlugInterFace::AsmCall(LONG hwnd, LONG mode, LONG* nret) { // TODO: 在此添加实现代码 * nret=gMemoryObj.TSAsmCall(hwnd,mode); return S_OK; } STDMETHODIMP CTSPlugInterFace::AsmClear(LONG* nret) { // TODO: 在此添加实现代码 gMemoryObj.TSAsmClear(); * nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::AsmCode(LONG base_addr, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH*10]={0}; //std::string retstr; gMemoryObj.TSAsmCode(base_addr,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::Assemble(BSTR asm_code, LONG base_addr, LONG is_upper, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH*10]={0}; gMemoryObj.TSAssemble(asm_code,base_addr,is_upper,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::MatchPicName(BSTR pic_name, BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t retstr[MAX_PATH*10]={0}; gDxObj.TSMatchPicName(pic_name,retstr); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetShowErrorMsg(LONG show, LONG* nret) { // TODO: 在此添加实现代码 TSRuntime::IsShowErrorMsg=show; * nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::Reg(BSTR reg_code, LONG type, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //::GetModuleHandle(L"TSPlug.dll"); int ret=TSRuntime::VipLogin(reg_code,type); if(ret>0&&type==0)//特权验证 { TSRuntime::IsVipLogin=true; ret=1; } else if(ret>0&&type==1)//注册验证 { TSRuntime::IsRegLogin=true; ret=1; } * nret=ret; VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::GetMachineCode(BSTR* retstring) { // TODO: 在此添加实现代码 wchar_t machinecode[MAX_PATH]={0}; gDxObj.TSGetMachineCode(machinecode); //* retstring=_bstr_t(machinecode); CComBSTR newbstr; newbstr.Append(machinecode); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::TSGuardProtectToHide(LONG enble, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1); *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } *nret=TSRuntime::StartProtect(enble,1); //TSRuntime::add_log( "TSRuntime::IsVipLogin:%d,*nret:%d",TSRuntime::IsVipLogin,*nret); VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::TSGuardProtectToHide2(LONG enable, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1); *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } *nret=TSRuntime::StartProtect(enable,2); //TSRuntime::add_log( "TSRuntime::IsVipLogin:%d,*nret:%d",TSRuntime::IsVipLogin,*nret); VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::TSGuardProtectToNP(LONG enable, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1); *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } TSRuntime::InitialWindowsVersion(); if(TSRuntime::IsWin7X64==false) TSRuntime::StartProtect(enable,0); if(TSRuntime::IsStartProtect==true||TSRuntime::IsWin7X64==true) { TSRuntime::IsNpProtect=true; *nret=true; } //TSRuntime::add_log( "TSRuntime::IsVipLogin:%d,*nret:%d",TSRuntime::IsVipLogin,*nret); VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::Delay(LONG mis, LONG* nret) { // TODO: 在此添加实现代码 //TsMutexlock ts_mutexlock(&gDXMySleepMutex); gDxObj.mysleep(mis); *nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, VARIANT* intX, VARIANT* intY, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,0,retstr,2); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; if(x==-1||y==-1) ret=-1; CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrFastS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, VARIANT* intX, VARIANT* intY, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,1,retstr,2); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; if(x==-1||y==-1) ret=-1; CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrExS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,0,retstr,1); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindStrFastExS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR string, BSTR color_format, DOUBLE sim, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindStrMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; ret=gDxObj.Findstr(x1,y1,x2,y2,string,color_format,sim,x,y,1,retstr,1); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindPicS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR pic_name, BSTR delta_color, DOUBLE sim, LONG dir, VARIANT* intX, VARIANT* intY, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindPicMutex); LONG x=-1,y=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; gDxObj.findPic(x1,y1,x2,y2,pic_name,delta_color,sim,dir,x,y,retstr,2); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindPicExS(LONG x1, LONG y1, LONG x2, LONG y2, BSTR pic_name, BSTR delta_color, DOUBLE sim, LONG dir, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindPicMutex); LONG x=-1,y=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } wchar_t retstr[MAX_PATH*100]={0}; gDxObj.findPic(x1,y1,x2,y2,pic_name,delta_color,sim,dir,x,y,retstr,1); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetDictPwd(BSTR pwd, LONG* nret) { // TODO: 在此添加实现代码 int len=wcslen(pwd); if(len>0&&len0&&lenSetPicPwdString,pwd); gDxObj.SendMsg(TS_SETPICPWD); } * nret=1; } return S_OK; } STDMETHODIMP CTSPlugInterFace::LeftDoubleClick(LONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXLeftDownMutex); if((gDxObj.m_mouseMode&MOUSE_NORMAL)==MOUSE_NORMAL) { TSRuntime::g_Mouse.delaytimes=gDxObj.NormalClicksleep; //TSRuntime::g_Mouse.leftDoubleClick(); if(TSRuntime::SetSimModeType==0)//普通模式 TSRuntime::g_Mouse.leftDoubleClick(); } else { if(gDxObj.m_mouseMode&MOUSE_WINDOW) { SendMessage(gDxObj.m_mousekeyhwnd,WM_SETFOCUS,(WPARAM)gDxObj.m_mousekeyhwnd,0); SendMessage(gDxObj.m_mousekeyhwnd,WM_CAPTURECHANGED,(WPARAM)gDxObj.m_mousekeyhwnd,0); PostMessage(gDxObj.m_mousekeyhwnd,WM_LBUTTONDBLCLK,1,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } else *nret=gDxObj.SendMsg(TS_LBUTTONDOWN,WM_LBUTTONDBLCLK,MAKELPARAM(gDxObj.LastMouseMoveX,gDxObj.LastMouseMoveY)); } return S_OK; } STDMETHODIMP CTSPlugInterFace::FreeProcessMemory(LONG hwnd, LONG* nret) { // TODO: 在此添加实现代码 * nret=gMemoryObj.TSFreeProcessMemory(hwnd); return S_OK; } STDMETHODIMP CTSPlugInterFace::TSDXGraphicProtect(LONG enable, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1); *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } gDxObj.Isgraphicprotect=enable; if(gDxObj.pData) { if(enable==1) { gDxObj.pData->isgraphicprotect=true; gDxObj.Isgraphicprotect=true; Sleep(100);//等待游戏内部图色数据刷新 } *nret=gDxObj.SendMsg(TS_ISGRAPHICPROTECT,enable); gDxObj.pData->ispichook=enable; } *nret=1; VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::TSDXKmProtect(LONG enable, BSTR type, LONG* nret) { // TODO: 在此添加实现代码 VMPBEGIN //VMP保护 if(!TSRuntime::IsVipLogin) { if(TSRuntime::IsRegLogin==false&&TSRuntime::IsVipLogin==false)//TS盾不允许试用 { *nret=0; return S_OK; } INT64 t=0; if(my_myGetTickCount) t=my_myGetTickCount(); else t=::GetTickCount(); if(t==TSRuntime::checkthreadtime||abs((int)(t-TSRuntime::checkthreadtime))>=60*1000*10||TSRuntime::checkthreadtime==0) //校验线程是否被挂起或者GetTickCount被人下钩子 { if(TSRuntime::IsStartProtect) TSRuntime::StartProtect(0,0,-1); *nret=0; TSRuntime::h_checkthread=NULL; return S_OK; } } gDxObj.Isdxkmprotect=enable; if(wcsicmp(type,L"dx.anti.api")==0) gDxObj.Isdxantiapi=true; else gDxObj.Isdxantiapi=false; *nret=1; VMPEND return S_OK; } STDMETHODIMP CTSPlugInterFace::CheckFontSmooth(LONG* nret) { // TODO: 在此添加实现代码 HKEY Reg_type=HKEY_LOCAL_MACHINE; HKEY hKey = NULL; wchar_t tempstr[MAX_PATH*2]={0}; DWORD size=MAX_PATH*sizeof(wchar_t),dwType=0; LONG bret=0; if(RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_WRITE|KEY_READ,&hKey)==ERROR_SUCCESS) { if(RegQueryValueEx(hKey,L"FontSmoothing",NULL,&dwType,(LPBYTE)tempstr,&size)==ERROR_SUCCESS) { if(_wtoi(tempstr)==2) bret=1; } } * nret=bret; return S_OK; } STDMETHODIMP CTSPlugInterFace::DisableFontSmooth(LONG* nret) { // TODO: 在此添加实现代码 HKEY Reg_type=HKEY_LOCAL_MACHINE; HKEY hKey = NULL; LONG bret=0; if(RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop", 0, KEY_WRITE|KEY_READ,&hKey)==ERROR_SUCCESS) { if(RegSetValueEx(hKey,L"FontSmoothing",NULL,REG_SZ,(LPBYTE)L"0",sizeof(wchar_t)*2)==ERROR_SUCCESS) bret=1; } * nret=bret; return S_OK; } STDMETHODIMP CTSPlugInterFace::GetScreenData(LONG x1, LONG y1, LONG x2, LONG y2, LONG* RetAddr) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXMyGetScreenDataMutex); LONG x=-1,y=-1,ret=-1; if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } gDxObj.TSGetScreenData(x1,y1,x2,y2); *RetAddr=(ULONG)gDxObj.ColorDataInfo; return S_OK; } STDMETHODIMP CTSPlugInterFace::EnableRealMouse(ULONG enable, ULONG mousedelay, ULONG mousestep, ULONG* nret) { // TODO: 在此添加实现代码 if(enable) { gDxObj.IsTSEnableRealMouse=true; gDxObj.mousedelay=mousedelay; gDxObj.mousestep=mousestep; } else { gDxObj.IsTSEnableRealMouse=false; gDxObj.mousedelay=0; gDxObj.mousestep=0; } * nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::EnableRealKeypad(ULONG enable, ULONG* nret) { // TODO: 在此添加实现代码 if(enable) gDxObj.IsTSEnableRealKeypad=true; else gDxObj.IsTSEnableRealKeypad=false; * nret=1; return S_OK; } STDMETHODIMP CTSPlugInterFace::MoveToEx(ULONG x, ULONG y, ULONG w, ULONG h, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXMoveToExMutex); wchar_t retstr[16]={0}; gDxObj.TSMoveToEx(x,y,w,h,retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::CheckUAC(ULONG* nret) { // TODO: 在此添加实现代码 HKEY Reg_type=HKEY_LOCAL_MACHINE; HKEY hKey = NULL; DWORD size=sizeof(DWORD),dwType=0,retvalue=0; LONG bret=0; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_WRITE|KEY_READ,&hKey)==ERROR_SUCCESS) { if(RegQueryValueEx(hKey,L"ConsentPromptBehaviorAdmin",NULL,&dwType,(LPBYTE)&retvalue,&size)==ERROR_SUCCESS) { if(retvalue!=0) bret=1; } } * nret=bret; return S_OK; } STDMETHODIMP CTSPlugInterFace::SetUAC(ULONG enable,ULONG* nret) { // TODO: 在此添加实现代码 HKEY Reg_type=HKEY_LOCAL_MACHINE; HKEY hKey = NULL; LONG bret=0; DWORD vlaue=0; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_WRITE|KEY_READ,&hKey)==ERROR_SUCCESS) { if(enable==0)//关闭 { if(RegSetValueEx(hKey,L"ConsentPromptBehaviorAdmin",NULL,REG_DWORD,(LPBYTE)&vlaue,sizeof(DWORD))==ERROR_SUCCESS) bret=1; } else//打开 { vlaue=2; if(RegSetValueEx(hKey,L"ConsentPromptBehaviorAdmin",NULL,REG_DWORD,(LPBYTE)&vlaue,sizeof(DWORD))==ERROR_SUCCESS) bret=1; } } * nret=bret; return S_OK; } STDMETHODIMP CTSPlugInterFace::WaitKey(ULONG vk_code, ULONG time_out, ULONG* nret) { // TODO: 在此添加实现代码 * nret=TSRuntime::g_KeyBoard.waitkeypress(vk_code,time_out); return S_OK; } STDMETHODIMP CTSPlugInterFace::FindMultiColor(ULONG x1, ULONG y1, ULONG x2, ULONG y2, BSTR first_color, BSTR offset_color, DOUBLE sim, ULONG dir, VARIANT* intX, VARIANT* intY, ULONG* nret) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindColorMutex); if(x1>=x2||y1>=y2) { MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } //wchar_t* p=0; DWORD ncolor=0x100; LONG x=-1,y=-1,ret; //TSRuntime::add_log("FindColor:_wtoi:%x",ncolor); //ret=TSRuntime::g_DxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y); ret=gDxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y,first_color,NULL,offset_color); intX->vt=VT_I4; intY->vt=VT_I4; intX->lVal=x; intY->lVal=y; *nret=ret; return S_OK; } STDMETHODIMP CTSPlugInterFace::FindMultiColorEx(ULONG x1, ULONG y1, ULONG x2, ULONG y2, BSTR first_color, BSTR offset_color, DOUBLE sim, ULONG dir, BSTR* retstring) { // TODO: 在此添加实现代码 TsMutexlock ts_mutexlock(&gDXFindColorMutex); if(x1>=x2||y1>=y2) { if(TSRuntime::IsShowErrorMsg) MessageBox(NULL,L"传入坐标已越界!",L"TS",NULL); return S_OK; } DWORD ncolor=0x100; LONG x=-1,y=-1; wchar_t retstr[MAX_PATH*5]={0}; gDxObj.findColor(x1,y1,x2,y2,ncolor,sim,dir,x,y,first_color,retstr,offset_color); //*retstring=_bstr_t(retstr); CComBSTR newbstr; newbstr.Append(retstr); newbstr.CopyTo(retstring); return S_OK; } STDMETHODIMP CTSPlugInterFace::SetSimMode(ULONG mode, ULONG* nret) { // TODO: 在此添加实现代码 return S_OK; }