1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087 |
- /*
- 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、
- 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议
- */
- #include "StdAfx.h"
- #include <time.h>
- #include "TSRuntime.h"
- #include "DXBind.h"
- //#include "TSHookFuntion.h"
- #include <winioctl.h>
- #include <TLHELP32.H>
- #include "TSMyKernel32DllFuntion.h"
- #include "TSPlugInterFace.h"
- #include <dinput.h>
- MyMouseNamespace TSRuntime::g_Mouse;
- MyKeyboardNamespace TSRuntime::g_KeyBoard;
- DXBind TSRuntime::g_DxObj;
- CMessageData *TSRuntime::pData=NULL;
- HANDLE TSRuntime::MapViewThread=NULL;
- DWORD TSRuntime::m_displayMode=0;
- DWORD TSRuntime::m_dwExStyle=0;
- wchar_t TSRuntime::RetStr[MAX_PATH*4]={0};
- wchar_t TSRuntime::SetPath[MAX_PATH]={0};
- LPOLESTR TSRuntime::KeyPressCharMap[0x100]={0}; //256个键位
- BYTE TSRuntime::VirtualToASCIIMap[0x100]={0}; //256个键位
- BYTE TSRuntime::keyMap[0x100]={0};
- bool TSRuntime::IsVipLogin=false;
- bool TSRuntime::IsRegLogin=false;
- bool TSRuntime::IsStartProtect=false;
- bool TSRuntime::g_IsSYSKEY=false; //按下系统键例如:ATL
- pMyDictInfo TSRuntime::MyDictCount[20]={0}; //存储当前所有字库,默认最大字库个数为20个
- int TSRuntime::nMaxStrHight[20]={0}; //记录每个字库中,最高的字高.
- int TSRuntime::nMyDictCountsize[20]={0}; //记录每个字库的数量
- int TSRuntime::NowUsingDictIndex=-1;//记录当前正在使用字库的下标
- char TSRuntime::bytestr[1024*3]={0};//存储点阵二进制信息最大存储为250*11
- bool TSRuntime::IsVirtualProtectEx=false;//是否驱动模式远程修改注入进程的页面保护属性
- HWND TSRuntime::hookHwnd=0;//记录要注入的窗口句柄
- HMEMORYLOADER TSRuntime::myUser32module=NULL;
- HMEMORYLOADER TSRuntime::mykernel32module=NULL;
- bool TSRuntime::IsInitialmyUser32module=false;
- bool TSRuntime::IsInitialmykernel32module=false;
- wchar_t TSRuntime::membstr[MAX_PATH*400]={0};
- bool TSRuntime::IsShowErrorMsg=TRUE;
- bool TSRuntime::IsNpProtect=false;
- BYTE TSRuntime::KeyPressMap[0x100]={0};
- BYTE TSRuntime::KeyPressMap_Mouse[0x100]={0};
- BYTE TSRuntime::RawInputKeyPressMap[0x100]={0};
- wchar_t TSRuntime::Regcode[MAX_PATH]={0};//记录注册码信息
- wchar_t TSRuntime::VipCountCode[MAX_PATH]={0};//记录VIP用户账户信息
- DWORD TSRuntime::g_nChecktime=0;
- HANDLE TSRuntime::h_checkthread=NULL; //验证线程句柄
- INT64 TSRuntime::checkthreadtime=0;//校验线程时间
- //CComBSTR TSRuntime::newbstr;
- COLORREF TSRuntime::pLoadstrBuffer[11][MAX_PATH]={0};//存储字库点阵还原图片颜色矩阵COLORREF
- DWORD TSRuntime::ZwProtectVirtualMemoryRet=0;
- bool TSRuntime::IsWin7X64=false;
- bool TSRuntime::IsWin8X64=false;
- DWORD TSRuntime::ProtectPid[20]={0};
- DWORD TSRuntime::IsProid=0;
- wchar_t TSRuntime::SetDictPwdString[MAX_PATH]={0};
- wchar_t TSRuntime::SetPicPwdString[MAX_PATH]={0};
- wchar_t TSRuntime::MachineCode[MAX_PATH]={0};
- bool TSRuntime::IsLoginlog=false;
- BYTE TSRuntime::SetSimModeType=0;
- bool TSRuntime::g_IsLoadDrive=false;
- extern mySleep my_sleep;
- extern myGetTickCount my_myGetTickCount;
- extern TCHAR gDLLFolder[MAX_PATH + 1];
- void CheckThread(void *para)//验证线程
- {
- VMPBEGIN //VMP保护
- INT64 lasttime=(DWORD)para;//获取注册码剩余时间
- INT64 threadtime=0;
- while(TRUE)
- {
- if(my_myGetTickCount)
- {
- TSRuntime::checkthreadtime=my_myGetTickCount();
- if(threadtime==0)
- threadtime=my_myGetTickCount();
- }
- else
- {
- TSRuntime::checkthreadtime=::GetTickCount();
- if(threadtime==0)
- threadtime=::GetTickCount();
- }
- if(TSRuntime::IsVipLogin==false&&lasttime==0) //试用验证
- {
- if((TSRuntime::checkthreadtime-threadtime)>=60*1000*30)//试用30分钟后停止服务
- //if((TSRuntime::checkthreadtime-threadtime)>=60*1000)//试用1分钟后停止服务
- {
- threadtime=0;//重置时间
- TSRuntime::checkthreadtime=0;
- if(TSRuntime::IsStartProtect)
- TSRuntime::StartProtect(0,0,-1);
- //TSRuntime::h_checkthread=NULL;
- return;
- }
- }
- else //注册码验证
- {
- INT64 time1=(lasttime*60*60*1000+threadtime)-TSRuntime::checkthreadtime;
- if(time1<=0)//注册码返回的是小时,然后换算为毫秒
- {
- threadtime=0;//重置时间
- TSRuntime::checkthreadtime=0;
- if(TSRuntime::IsStartProtect)
- TSRuntime::StartProtect(0,0,-1);
- //TSRuntime::h_checkthread=NULL;
- return;
- }
- }
- //if(my_sleep)
- // my_sleep(60*1000); //1分钟校验一次
- //else
- // ::Sleep(60*1000); //1分钟校验一次
- if(my_sleep)
- my_sleep(60*1000*5); //5分钟校验一次
- else
- ::Sleep(60*1000*5); //5分钟校验一次
- }
- VMPEND
- }
- BOOL CALLBACK MyEnumProc(HWND hWnd,LPARAM lParam)
- {
- DWORD dwProcessId;
- GetWindowThreadProcessId(hWnd,&dwProcessId);
- LPWNDINFO pInfo=(LPWNDINFO)lParam;
- if(dwProcessId==pInfo->dwProcessId)
- {
- pInfo->hWnd=hWnd;
- return FALSE;
- }
- return TRUE;
- }
- HWND TSRuntime::GetProcessMainWnd(DWORD dwProcessId) //获取自身窗口句柄
- {
- WNDINFO wi;
- wi.dwProcessId=dwProcessId;
- wi.hWnd=NULL;
- EnumWindows(MyEnumProc,(LPARAM)&wi);
- return wi.hWnd;
- }
- bool TSRuntime::GetRemoteModulePath(const wchar_t *module, short nPID,wchar_t *modulepath)
- {
- HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
- MODULEENTRY32 modEntry;
- modEntry.dwSize = sizeof(MODULEENTRY32);
- Module32First(tlh, &modEntry);
- do
- {
- if(!wcsicmp(module, modEntry.szModule))
- {
- CloseHandle(tlh);
- wcscpy(modulepath,modEntry.szExePath);
- return TRUE;
- }
- }
- while(Module32Next(tlh, &modEntry));
- CloseHandle(tlh);
- return FALSE;
- }
- DWORD TSRuntime::GetRemoteModuleBaseAddr(const wchar_t *module, short nPID)
- {
- HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
- MODULEENTRY32 modEntry;
- modEntry.dwSize = sizeof(MODULEENTRY32);
- Module32First(tlh, &modEntry);
- do
- {
- if(!wcsicmp(module, modEntry.szModule))
- {
- CloseHandle(tlh);
- return (DWORD)modEntry.modBaseAddr;
- }
- }
- while(Module32Next(tlh, &modEntry));
- CloseHandle(tlh);
- return NULL;
- }
- //获取指定进程ID的DLL模块地址
- HMODULE TSRuntime::GetRemoteModuleHandle(const wchar_t *module, short nPID)
- {
- HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
- MODULEENTRY32 modEntry;
- modEntry.dwSize = sizeof(MODULEENTRY32);
- Module32First(tlh, &modEntry);
- do
- {
- if(!wcsicmp(module, modEntry.szModule))
- {
- CloseHandle(tlh);
- return modEntry.hModule;
- }
- }
- while(Module32Next(tlh, &modEntry));
- CloseHandle(tlh);
- return NULL;
- }
- //获取指定进程ID的DLL模块地址
- HMODULE TSRuntime::GetRemoteModuleBase(const wchar_t *module, short nPID)
- {
- HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
- MODULEENTRY32 modEntry;
- modEntry.dwSize = sizeof(MODULEENTRY32);
- Module32First(tlh, &modEntry);
- do
- {
- if(!wcsicmp(module, modEntry.szModule))
- {
- CloseHandle(tlh);
- return (HMODULE)modEntry.modBaseAddr;
- }
- }
- while(Module32Next(tlh, &modEntry));
- CloseHandle(tlh);
- return NULL;
- }
- //获取指定进程ID的DLL模块函数的地址
- FARPROC TSRuntime::GetRemoteProcAddress( wchar_t *module, const char *func, short nPID)
- {
- HMODULE remoteMod = GetRemoteModuleHandle(module, nPID);
- HMODULE localMod = GetModuleHandle(module);
- // If the module isn't already loaded, we load it, but since many of the
- // modules we'll probably be loading will do nasty things like modify
- // memory and hook functions, we use the DONT_RESOLVE_DLL_REFERENCES flag,
- // so that LoadLibraryEx only loads the dll, but doesn't execute it.
- if(!localMod) localMod = LoadLibraryEx(module, NULL, DONT_RESOLVE_DLL_REFERENCES);
- // Account for potential differences in base address
- // of modules in different processes.
- int delta = MakeDelta(int, remoteMod, localMod);
- FARPROC LocalFunctionAddress = GetProcAddress(localMod, func);
- return MakePtr(FARPROC, LocalFunctionAddress, delta);
- }
- BOOL TSRuntime::MByteToWChar(LPCSTR lpcszStr,LPWSTR lpwszStr,DWORD dwSize)
- {
- DWORD dwMinSize;
- dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0);
- if(dwSize < dwMinSize)
- {
- return FALSE;
- }
- MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
- return TRUE;
- }
- BOOL TSRuntime::WCharToMByte(LPCWSTR lpcwszStr,LPSTR lpszStr,DWORD dwSize)
- {
- DWORD dwMinSize;
- dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
- if(dwSize < dwMinSize)
- {
- return FALSE;
- }
- WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
- return TRUE;
- }
- bool TSRuntime::MyLoadLibrary()
- {
- return true;
- }
- ////重载系统模块DLL进入系统,重新定位模块DLL的函数地址,然后返回新的函数地址达到防HOOK的步骤
- DWORD TSRuntime::GetPassR3HookFuntionAddr(char *modename,char*funname)
- {
- return true;
- }
- //驱动层写内存
- bool TSRuntime::MyWriteMemory(IN PWriteMemoryInfo WriteInfo)
- {
- return 1;
- }
- bool TSRuntime::StartProtect(long enable,long type,int Pid)
- {
- return 0;
-
- }
- bool TSRuntime::GetComPath(TCHAR * Path)
- {
- // TODO: 在此添加控件通知处理程序代码
- CLSID clsid;
- IDispatch *pDisp;
- HRESULT hr=NULL;
- hr=CLSIDFromProgID(L"TS.TSsoft",&clsid);
- wchar_t compath[MAX_PATH]={0};
- if(hr==S_OK)
- {
- LPCTSTR data_Set=L"CLSID\\";
- TCHAR clsidstr[MAX_PATH]={0};
- TCHAR clsidreg[MAX_PATH]={0};
- HKEY hKey;
- DWORD size=MAX_PATH*sizeof(TCHAR),dwType=0;;
- ::swprintf(clsidstr,L"{%X-%X-%X-%X-%X%X}", clsid.Data1, clsid.Data2, clsid.Data3,
- clsid.Data4[0]<<8|clsid.Data4[1],
- clsid.Data4[2]<<8|clsid.Data4[3],
- clsid.Data4[4]<<24|clsid.Data4[5]<<16|
- clsid.Data4[6]<<8|clsid.Data4[7]);
- swprintf(clsidreg,L"%s%s\\InprocServer32",data_Set,clsidstr);
- if(RegOpenKey(HKEY_CLASSES_ROOT,clsidreg,&hKey)!=ERROR_SUCCESS)
- //if(RegOpenKeyEx(HKEY_CLASSES_ROOT, clsidreg, 0, KEY_WRITE|KEY_READ,&hKey)!=ERROR_SUCCESS);
- return 0;
- if(RegQueryValue(hKey,L"",Path,(PLONG)&size)!=ERROR_SUCCESS)
- //if(RegQueryValueA(hKey,"",compath,(PLONG)&size)!=ERROR_SUCCESS)
- //if(RegQueryValueEx(hKey,_T(""),NULL,&dwType,(LPBYTE)compath,&size)!=ERROR_SUCCESS);
- return 0;
- RegCloseKey(hKey);
- }
- return compath;
- }
- int TSRuntime::VipLogin(wchar_t *regcode,int type,bool isvip)
- {
- if(regcode==NULL||type<0||type>1)
- {
- return false;
- }
- VMPBEGIN //VMP保护
- int ret=0;
- if(TSRuntime::h_checkthread==NULL||isvip==true)//第一次试用或者验证注册验证码的时候连接服务器
-
- if(TSRuntime::h_checkthread==NULL||isvip==true) //试用或者验证注册码的时候 启用验证线程
- {
- if(TSRuntime::h_checkthread==NULL&&isvip==false&&ret>0)//第一次试用
- TSRuntime::h_checkthread=(HANDLE)_beginthread(CheckThread, 0 ,0 );
- else if(true==isvip&&ret>0)
- {
- if(TSRuntime::h_checkthread!=NULL)//如果启用了验证线程
- {
- ::TerminateThread(TSRuntime::h_checkthread,0);//结束试用验证线程
- TSRuntime::h_checkthread=NULL;
- }
- if(type==1) //注册码验证线程
- TSRuntime::h_checkthread=(HANDLE)_beginthread(CheckThread, 0 ,(void*)ret);
- }
- Sleep(50);//等待线程函数启动后在返回
- }
- VMPEND
- return ret;
-
- }
- void TSRuntime::my_split(TCHAR* sourcestr, TCHAR *oldstr, TCHAR (*temp)[28], int &rlen)
- {
- TCHAR sourcebak[1024]={0};//不改变源串拷贝一份
- wcscpy(sourcebak,sourcestr);
- TCHAR *pch=wcstok(sourcebak,oldstr);
- rlen=0;
- while(pch!=NULL)
- {
- wcscpy(temp[rlen],pch);
- pch=wcstok(NULL,oldstr);
- rlen++;
- }
- }
- bool TSRuntime::EnablePrivilege(LPCTSTR pszPrivName, bool fEnable )
- {
- bool fOk = false;
- // Assume function fails
- HANDLE hToken;
- // Try to open this process's access token
- if (OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES, &hToken))
- {
- TOKEN_PRIVILEGES tp = { 1 };
- //如果成功查找到特权值
- if( LookupPrivilegeValue(NULL, pszPrivName, &tp.Privileges[0].Luid) )
- {
- tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
- AdjustTokenPrivileges(hToken, false, &tp,
- sizeof(tp), NULL, NULL);
- fOk = (GetLastError() == ERROR_SUCCESS);
- }
- CloseHandle(hToken);
- }
- return(fOk);
- }
- int TSRuntime::InitialWindowsVersion()
- {
- OSVERSIONINFO Version;
- ZeroMemory(&Version,sizeof(OSVERSIONINFO));
- Version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx(&Version);
- if (Version.dwPlatformId==VER_PLATFORM_WIN32_NT)
- {
- if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==0))
- {
- return 0;//Win2000;
- }else if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==1))
- {
- return 1; //WinXP;
- }else if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==2))
- {
- return 2; //Win2003;
- }else if((Version.dwMajorVersion==6)&&(Version.dwMinorVersion==0))
- {
- return 3; //VISTA;
- }
- else if((Version.dwMajorVersion>=6))
- {
- BOOL bIsWow64 = FALSE;
- typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
- LPFN_ISWOW64PROCESS pfnIsWow64 = NULL;
- pfnIsWow64 = (LPFN_ISWOW64PROCESS)GetProcAddress(
- GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
- if (pfnIsWow64)
- {
- pfnIsWow64(GetCurrentProcess(), &bIsWow64);
- }
- if(Version.dwMinorVersion==2&&bIsWow64==false) //WIN8
- return 5;
- else if(Version.dwMinorVersion==2&&bIsWow64==true)
- {
- TSRuntime::IsWin8X64=true;
- return 5;
- }
- //如果是win7_64系统ret返回true
- if(bIsWow64)
- TSRuntime::IsWin7X64=true;//win7x64
- return 4; //win7x64
- }
- }
- return -1;
- }
- void TSRuntime::add_log( const char * fmt, ... )
- {
- va_list va_alist;
- char buf[256];
- char logbuf[1024];
- char cDirectory[600];
- FILE* file;
- struct tm* current_tm;
- time_t current_time;
- time( ¤t_time );
- current_tm = localtime( ¤t_time );
- sprintf( logbuf, "//%02d:%02d:%02d: ", current_tm->tm_hour, current_tm->tm_min, current_tm->tm_sec );
- va_start( va_alist, fmt );
- vsprintf( buf, fmt, va_alist );
- va_end( va_alist );
- strcat( logbuf, buf );
- strcat( logbuf, "\n" );
- strcpy( cDirectory, "d:\\" );
- strcat( cDirectory, "Tha Log.txt" );
- if( ( file = fopen( cDirectory, "a+" ) ) != NULL )
- {
- fputs( logbuf, file );
- fclose( file );
- }
- }
- int TSRuntime::retrunLparamDown(int key)
- {
- int lparamdown=0X00000000;
- switch(key)
- {
- case VK_RETURN:lparamdown=0X001C0001;break;
- case VK_ESCAPE:lparamdown=0X00010001;break;
- //按下大写键
- case VK_CAPITAL:lparamdown=0X003A0001;break;
- case VK_BACK:lparamdown=0X000E0001;break;
- case VK_TAB:lparamdown=0X000F0001;break;
- case VK_SPACE:lparamdown=0X00390001;break;
- case VK_CONTROL:lparamdown=0X001D0001;break;
- case 'A':lparamdown=0X001E0001;break;
- case 'D':lparamdown=0X00200001;break;
- case 'S':lparamdown=0X001F0001;break;
- case 'Q':lparamdown=0X00100001;break;
- case 'W':lparamdown=0X00110001;break;
- case 'E':lparamdown=0X00120001;break;
- case 'V':lparamdown=0X002F0001;break;
- case 'R':lparamdown=0X00130001;break;
- case 'Y':lparamdown=0X00150001;break;
- case 'U':lparamdown=0X00160001;break;
- case 'I':lparamdown=0X00170001;break;
- case 'O':lparamdown=0X00180001;break;
- case 'P':lparamdown=0X00190001;break;
- case 'T':lparamdown=0X00140001;break;
- case 'F':lparamdown=0X00210001;break;
- case 'H':lparamdown=0X00230001;break;
- case 'J':lparamdown=0X00240001;break;
- case 'C':lparamdown=0X002E0001;break;
- case 'K':lparamdown=0X00250001;break;
- case 'B':lparamdown=0X00300001;break;
- case 'L':lparamdown=0X00260001;break;
- case 'M':lparamdown=0X00320001;break;
- case 'Z':lparamdown=0X002C0001;break;
- case 'X':lparamdown=0X002D0001;break;
- case '1':lparamdown=0X00020001;break;
- case '2':lparamdown=0X00030001;break;
- case '3':lparamdown=0X00040001;break;
- case '4':lparamdown=0X00050001;break;
- case '5':lparamdown=0X00060001;break;
- case '6':lparamdown=0X00070001;break;
- case '7':lparamdown=0X00080001;break;
- case '8':lparamdown=0X00090001;break;
- case '9':lparamdown=0X000A0001;break;
- case '0':lparamdown=0X000B0001;break;
- case VK_F1:lparamdown=0X003B0001;break;
- case VK_F2:lparamdown=0X003C0001;break;
- case VK_F3:lparamdown=0X003D0001;break;
- case VK_F4:lparamdown=0X003E0001;break;
- case VK_F5:lparamdown=0X003F0001;break;
- case VK_F6:lparamdown=0X00400001;break;
- case VK_F7:lparamdown=0X00410001;break;
- case VK_F8:lparamdown=0X00420001;break;
- case VK_F9:lparamdown=0X00430001;break;
- case VK_F10:lparamdown=0X00440001;break;
- case VK_F11:lparamdown=0X00570001;break;
- case VK_F12:lparamdown=0X00580001;break;
- case VK_NUMPAD1:lparamdown=0X004F0001;break;
- case VK_NUMPAD2:lparamdown=0X00500001;break;
- case VK_NUMPAD3:lparamdown=0X00510001;break;
- case VK_NUMPAD4:lparamdown=0X004B0001;break;
- case VK_NUMPAD5:lparamdown=0X004C0001;break;
- case VK_NUMPAD6:lparamdown=0X004D0001;break;
- case VK_NUMPAD7:lparamdown=0X00470001;break;
- case VK_NUMPAD8:lparamdown=0X00480001;break;
- case VK_NUMPAD9:lparamdown=0X00490001;break;
- case VK_NUMPAD0:lparamdown=0X00520001;break;
- case VK_UP:lparamdown=0X01480001;break;
- case VK_DOWN:lparamdown=0X01500001;break;
- case VK_LEFT:lparamdown=0X014B0001;break;
- case VK_RIGHT:lparamdown=0X014D0001;break;
- case VK_SHIFT:lparamdown=0X002A0001;break;
- case VK_MENU:lparamdown=0X20380001;break;
- case VK_NUMLOCK:lparamdown=0X01450001;break;
- case VK_DIVIDE:lparamdown=0X01350001;break;
- case VK_MULTIPLY:lparamdown=0X00370001;break;
- case VK_SUBTRACT:lparamdown=0X004A0001;break;
- case VK_ADD:lparamdown=0X004E0001;break;
- case VK_DECIMAL:lparamdown=0X00110001;break;
- case VK_OEM_MINUS:lparamdown=0X000C0001;break;
- case VK_OEM_PLUS:lparamdown=0X000D0001;break;
- case VK_OEM_3:lparamdown=0X00290001;break;
- case VK_OEM_5:lparamdown=0X002B0001;break;
- }
- return lparamdown;
- }
- void TSRuntime::InitKeyPressMap()
- {
- ZeroMemory(KeyPressMap,0x100);
- ZeroMemory(KeyPressMap_Mouse,0x100);
- }
- void TSRuntime::InitKeyMap()
- {
- ZeroMemory(keyMap,0x100);
- keyMap[0x2] ='1';
- keyMap[0x3] ='2';
- keyMap[0x4] ='3';
- keyMap[0x5] ='4';
- keyMap[0x6] ='5';
- keyMap[0x7] ='6';
- keyMap[0x8] ='7';
- keyMap[0x9] ='8';
- keyMap[0xa] ='9';
- keyMap[0xb] ='0';
- keyMap[0xc] ='-';
- keyMap[0xd] ='=';
- keyMap[0x1e] ='A';
- keyMap[0x30] ='B';
- keyMap[0x2e] ='C';
- keyMap[0x20] ='D';
- keyMap[0x12] ='E';
- keyMap[0x21] ='F';
- keyMap[0x22] ='G';
- keyMap[0x23] ='H';
- keyMap[0x17] ='I';
- keyMap[0x24] ='J';
- keyMap[0x25] ='K';
- keyMap[0x26] ='L';
- keyMap[0x32] ='M';
- keyMap[0x31] ='N';
- keyMap[0x18] ='O';
- keyMap[0x19] ='P';
- keyMap[0x10] ='Q';
- keyMap[0x13] ='R';
- keyMap[0x1f] ='S';
- keyMap[0x14] ='T';
- keyMap[0x16] ='U';
- keyMap[0x2f] ='V';
- keyMap[0x11] ='W';
- keyMap[0x2d] ='X';
- keyMap[0x15] ='Y';
- keyMap[0x2c] ='Z';
- keyMap[0x1e] ='a';
- keyMap[0x30] ='b';
- keyMap[0x2e] ='c';
- keyMap[0x20] ='d';
- keyMap[0x12] ='e';
- keyMap[0x21] ='f';
- keyMap[0x22] ='g';
- keyMap[0x23] ='h';
- keyMap[0x17] ='i';
- keyMap[0x24] ='j';
- keyMap[0x25] ='k';
- keyMap[0x26] ='l';
- keyMap[0x32] ='m';
- keyMap[0x31] ='n';
- keyMap[0x18] ='o';
- keyMap[0x19] ='p';
- keyMap[0x10] ='q';
- keyMap[0x13] ='r';
- keyMap[0x1f] ='s';
- keyMap[0x14] ='t';
- keyMap[0x16] ='u';
- keyMap[0x2f] ='v';
- keyMap[0x11] ='w';
- keyMap[0x2d] ='x';
- keyMap[0x15] ='y';
- keyMap[0x2c] ='z';
- //keyMap[DIK_NUMLOCK] =VK_NUMLOCK;//小键盘
- //keyMap[DIK_NUMPAD0] =VK_NUMPAD0;//小键盘;
- //keyMap[DIK_NUMPAD1] =VK_NUMPAD1;//小键盘;
- //keyMap[DIK_NUMPAD2] =VK_NUMPAD2;//小键盘;
- //keyMap[DIK_NUMPAD3] =VK_NUMPAD3;////小键盘;
- //keyMap[DIK_NUMPAD4] =VK_NUMPAD4;////小键盘;
- //keyMap[DIK_NUMPAD5] =VK_NUMPAD5;////小键盘;
- //keyMap[DIK_NUMPAD6] =VK_NUMPAD6;///小键盘;
- //keyMap[DIK_NUMPAD7] =VK_NUMPAD7;////小键盘;
- //keyMap[DIK_NUMPAD8] =VK_NUMPAD9;////小键盘
- //keyMap[DIK_NUMPAD9] =VK_NUMPAD9;////小键盘
- //keyMap[DIK_ADD] =VK_ADD;//+ 小键盘
- //keyMap[DIK_SUBTRACT] =VK_SUBTRACT;//- 小键盘"
- //keyMap[DIK_MULTIPLY] =VK_MULTIPLY;//* 小键盘
- //keyMap[DIK_DIVIDE] =VK_DIVIDE;//'/' 小键盘"
- //keyMap[DIK_DECIMAL] =VK_DECIMAL;//"."小键盘
- keyMap[0x3B] =VK_F1;
- keyMap[0x3C] =VK_F2;
- keyMap[0x3D] =VK_F3;
- keyMap[0x3E] =VK_F4;
- keyMap[0x3F] =VK_F5;
- keyMap[0x40] =VK_F6;
- keyMap[0x41] =VK_F7;
- keyMap[0x42] =VK_F8;
- keyMap[0x43] =VK_F9;
- keyMap[0x44] =VK_F10;
- keyMap[0x57] =VK_F11;
- keyMap[0x58] =VK_F12;
- keyMap[0x1c] =VK_RETURN;
- keyMap[0xF] =VK_TAB;
- keyMap[0x2A] =VK_SHIFT;
- keyMap[0x1] =VK_ESCAPE;
- keyMap[0x1D] =VK_CONTROL;
- keyMap[0x39] =VK_SPACE;
- keyMap[0xb8] =VK_MENU; //alt
- keyMap[0xe] =VK_BACK; //退格
- keyMap[0x3A] =VK_CAPITAL; // Caps Lock
- keyMap[0xD3] =VK_DELETE;
- keyMap[0xc8] =VK_UP;
- keyMap[0xd0] =VK_DOWN;
- keyMap[0xcb] =VK_LEFT;
- keyMap[0xcd] =VK_RIGHT;
- }
- void TSRuntime::InitVirtualToASCIIMap()
- {
- ZeroMemory(VirtualToASCIIMap,0x100);
- VirtualToASCIIMap[0x8]=0x8;//back
- VirtualToASCIIMap[0xD]=0xD;//enter
- VirtualToASCIIMap[0x20]=0x20;//space
- VirtualToASCIIMap[17]=17; //ctrl
- VirtualToASCIIMap[18]=18; //alt
- VirtualToASCIIMap[16]=16; //shift
- VirtualToASCIIMap[0xa4]=0xa4; //左Alt键
- VirtualToASCIIMap[0xA0]=0xA0; //左Shift键
- VirtualToASCIIMap[0xA2]=0xA2; //左Ctrl键
- VirtualToASCIIMap[32]=32; //space
- VirtualToASCIIMap[91]=91; //win
- VirtualToASCIIMap[20]=20; //cap
- VirtualToASCIIMap[9]=9; //tab
- VirtualToASCIIMap[27]=27; //esc
- VirtualToASCIIMap[38]=38; //up
- VirtualToASCIIMap[40]=40; //down
- VirtualToASCIIMap[37]=37; //left
- VirtualToASCIIMap[39]=39; //right
- VirtualToASCIIMap[93]=93; //option
- VirtualToASCIIMap[44]=44; //print
- VirtualToASCIIMap[46]=46; //delete
- VirtualToASCIIMap[36]=36; //home
- VirtualToASCIIMap[35]=35; //end
- VirtualToASCIIMap[33]=33; //pgup
- VirtualToASCIIMap[34]=34; //pgdn
- VirtualToASCIIMap[0x41]=0x61;//A
- VirtualToASCIIMap[0x42]=0x62;//B
- VirtualToASCIIMap[0x43]=0x63;//C
- VirtualToASCIIMap[0x44]=0x64;//D
- VirtualToASCIIMap[0x45]=0x65;//E
- VirtualToASCIIMap[0x46]=0x66;//F
- VirtualToASCIIMap[0x47]=0x67;//G
- VirtualToASCIIMap[0x48]=0x68;//H
- VirtualToASCIIMap[0x49]=0x69;//I
- VirtualToASCIIMap[0x4A]=0x6A;//J
- VirtualToASCIIMap[0x4B]=0x6B;//K
- VirtualToASCIIMap[0x4C]=0x6C;//L
- VirtualToASCIIMap[0x4D]=0x6D;//M
- VirtualToASCIIMap[0x4E]=0x6E;//N
- VirtualToASCIIMap[0x4F]=0x6F;//O
- VirtualToASCIIMap[0x50]=0x70;//P
- VirtualToASCIIMap[0x51]=0x71;//Q
- VirtualToASCIIMap[0x52]=0x72;//R
- VirtualToASCIIMap[0x53]=0x73;//S
- VirtualToASCIIMap[0x54]=0x74;//T
- VirtualToASCIIMap[0x55]=0x75;//U
- VirtualToASCIIMap[0x56]=0x76;//V
- VirtualToASCIIMap[0x57]=0x77;//W
- VirtualToASCIIMap[0x58]=0x78;//X
- VirtualToASCIIMap[0x59]=0x79;//Y
- VirtualToASCIIMap[0x5A]=0x7A;//Z
- //VirtualToASCIIMap[0x41]=0x41;//a
- //VirtualToASCIIMap[0x42]=0x42;//b
- //VirtualToASCIIMap[0x43]=0x43;//c
- //VirtualToASCIIMap[0x44]=0x44;//d
- //VirtualToASCIIMap[0x45]=0x45;//e
- //VirtualToASCIIMap[0x46]=0x46;//f
- //VirtualToASCIIMap[0x47]=0x47;//g
- //VirtualToASCIIMap[0x48]=0x48;//h
- //VirtualToASCIIMap[0x49]=0x49;//I
- //VirtualToASCIIMap[0x4A]=0x4A;//J
- //VirtualToASCIIMap[0x4B]=0x4B;//K
- //VirtualToASCIIMap[0x4C]=0x4C;//L
- //VirtualToASCIIMap[0x4D]=0x4D;//M
- //VirtualToASCIIMap[0x4E]=0x4E;//N
- //VirtualToASCIIMap[0x4F]=0x4F;//O
- //VirtualToASCIIMap[0x50]=0x50;//P
- //VirtualToASCIIMap[0x51]=0x51;//Q
- //VirtualToASCIIMap[0x52]=0x52;//R
- //VirtualToASCIIMap[0x53]=0x53;//S
- //VirtualToASCIIMap[0x54]=0x54;//T
- //VirtualToASCIIMap[0x55]=0x55;//U
- //VirtualToASCIIMap[0x56]=0x56;//V
- //VirtualToASCIIMap[0x57]=0x57;//W
- //VirtualToASCIIMap[0x58]=0x58;//X
- //VirtualToASCIIMap[0x59]=0x59;//Y
- //VirtualToASCIIMap[0x5A]=0x5A;//Z
- VirtualToASCIIMap[0x61]=0x61;//a
- VirtualToASCIIMap[0x62]=0x62;//b
- VirtualToASCIIMap[0x63]=0x63;//c
- VirtualToASCIIMap[0x64]=0x64;//d
- VirtualToASCIIMap[0x65]=0x65;//e
- VirtualToASCIIMap[0x66]=0x66;//f
- VirtualToASCIIMap[0x67]=0x67;//g
- VirtualToASCIIMap[0x68]=0x68;//h
- VirtualToASCIIMap[0x69]=0x69;//I
- VirtualToASCIIMap[0x6A]=0x6A;//J
- VirtualToASCIIMap[0x6B]=0x6B;//K
- VirtualToASCIIMap[0x6C]=0x6C;//L
- VirtualToASCIIMap[0x6D]=0x6D;//M
- VirtualToASCIIMap[0x6E]=0x6E;//N
- VirtualToASCIIMap[0x6F]=0x6F;//O
- VirtualToASCIIMap[0x70]=0x70;//P
- VirtualToASCIIMap[0x71]=0x71;//Q
- VirtualToASCIIMap[0x72]=0x72;//R
- VirtualToASCIIMap[0x73]=0x73;//S
- VirtualToASCIIMap[0x74]=0x74;//T
- VirtualToASCIIMap[0x75]=0x75;//U
- VirtualToASCIIMap[0x76]=0x76;//V
- VirtualToASCIIMap[0x77]=0x77;//W
- VirtualToASCIIMap[0x78]=0x78;//X
- VirtualToASCIIMap[0x79]=0x79;//Y
- VirtualToASCIIMap[0x7A]=0x7A;//Z
- VirtualToASCIIMap[48] ='0';//L"0";
- VirtualToASCIIMap[49] ='1';//L"1";
- VirtualToASCIIMap[50] ='2';//L"2";
- VirtualToASCIIMap[51] ='3';//L"3";
- VirtualToASCIIMap[52] ='4';//L"4";
- VirtualToASCIIMap[53] ='5';//L"5";
- VirtualToASCIIMap[54] ='6';//L"6";
- VirtualToASCIIMap[55] ='7';//L"7";
- VirtualToASCIIMap[56] ='8';//L"8";
- VirtualToASCIIMap[57] ='9';//L"9";
- VirtualToASCIIMap[VK_F1] =VK_F1;//L"F1";
- VirtualToASCIIMap[VK_F2] =VK_F2;//L"F2";
- VirtualToASCIIMap[VK_F3] =VK_F3;//L"F3";
- VirtualToASCIIMap[VK_F4] =VK_F4;//L"F4";
- VirtualToASCIIMap[VK_F5] =VK_F5;//L"F5";
- VirtualToASCIIMap[VK_F6] =VK_F6;//L"F6";
- VirtualToASCIIMap[VK_F7] =VK_F7;//L"F7";
- VirtualToASCIIMap[VK_F8] =VK_F8;//L"F8";
- VirtualToASCIIMap[VK_F9] =VK_F9;//L"F9"
- VirtualToASCIIMap[VK_F10] =VK_F10;//L"F10"
- VirtualToASCIIMap[VK_F11] =VK_F11;//L"F11"
- VirtualToASCIIMap[VK_F12] =VK_F12;//L"F12"
- //VirtualToASCIIMap[VK_NUMLOCK] =VK_NUMLOCK;//小键盘;
- //VirtualToASCIIMap[VK_NUMPAD0] =VK_NUMPAD0;//小键盘;
- //VirtualToASCIIMap[VK_NUMPAD1] =VK_NUMPAD1;//小键盘;
- //VirtualToASCIIMap[VK_NUMPAD2] =VK_NUMPAD2;//小键盘;
- //VirtualToASCIIMap[VK_NUMPAD3] =VK_NUMPAD3;////小键盘;
- //VirtualToASCIIMap[VK_NUMPAD4] =VK_NUMPAD4;////小键盘;
- //VirtualToASCIIMap[VK_NUMPAD5] =VK_NUMPAD5;////小键盘;
- //VirtualToASCIIMap[VK_NUMPAD6] =VK_NUMPAD6;///小键盘;
- //VirtualToASCIIMap[VK_NUMPAD7] =VK_NUMPAD7;////小键盘;
- //VirtualToASCIIMap[VK_NUMPAD8] =VK_NUMPAD9;////小键盘
- //VirtualToASCIIMap[VK_NUMPAD9] =VK_NUMPAD9;////小键盘
- //VirtualToASCIIMap[VK_ADD] =VK_ADD;//+ 小键盘
- //VirtualToASCIIMap[VK_SUBTRACT] =VK_SUBTRACT;//- 小键盘"
- //VirtualToASCIIMap[VK_MULTIPLY] =VK_MULTIPLY;//* 小键盘
- //VirtualToASCIIMap[VK_DIVIDE] =VK_DIVIDE;//'/' 小键盘"
- //VirtualToASCIIMap[VK_DECIMAL] =VK_DECIMAL;//"."小键盘
- //VirtualToASCIIMap[VK_SEPARATOR] =VK_SEPARATOR;// 小键盘"
- VirtualToASCIIMap[0xBA]=0x3B;//;
- VirtualToASCIIMap[0xBC]=0x2C;//,
- VirtualToASCIIMap[0xBE]=0x2E;//.
- VirtualToASCIIMap[0xBF]=0x2F;///
- VirtualToASCIIMap[0xC0]=0x7E;//~
- VirtualToASCIIMap[0xDB]=0x2D;//-
- VirtualToASCIIMap[0xBB]=0x3D;//=
- VirtualToASCIIMap[0xDB]=0x5B;//[
- VirtualToASCIIMap[0xDC]=0x5C;//\
- VirtualToASCIIMap[0xDD]=0x5D;//]
- VirtualToASCIIMap[0xDE]=0x27;//'
- }
- void TSRuntime::InitKeyPressCharMap() //初始化KeyPressCharMap用于直接将虚拟键码相应的字符串转换到相应的ASCII码
- {
- ZeroMemory(KeyPressCharMap,0x100);
- KeyPressCharMap[49] =L"1";
- KeyPressCharMap[50] =L"2";
- KeyPressCharMap[51] =L"3";
- KeyPressCharMap[52] =L"4";
- KeyPressCharMap[53] =L"5";
- KeyPressCharMap[54] =L"6";
- KeyPressCharMap[55] =L"7";
- KeyPressCharMap[56] =L"8";
- KeyPressCharMap[57] =L"9";
- KeyPressCharMap[48] =L"0";
- KeyPressCharMap[45] =L"-";
- KeyPressCharMap[61] =L"=";
- KeyPressCharMap[8] = L"back";
- KeyPressCharMap[65] =L"a";
- KeyPressCharMap[66] =L"b";
- KeyPressCharMap[67] =L"c";
- KeyPressCharMap[68] =L"d";
- KeyPressCharMap[69] =L"e";
- KeyPressCharMap[70] =L"f";
- KeyPressCharMap[71] =L"g";
- KeyPressCharMap[72] =L"h";
- KeyPressCharMap[73] =L"i";
- KeyPressCharMap[74] =L"j";
- KeyPressCharMap[75] =L"k";
- KeyPressCharMap[76] =L"l";
- KeyPressCharMap[77] =L"m";
- KeyPressCharMap[78] =L"n";
- KeyPressCharMap[79] =L"o";
- KeyPressCharMap[80] =L"p";
- KeyPressCharMap[81] =L"q";
- KeyPressCharMap[82] =L"r";
- KeyPressCharMap[83] =L"s";
- KeyPressCharMap[84] =L"t";
- KeyPressCharMap[85] =L"u";
- KeyPressCharMap[86] =L"v";
- KeyPressCharMap[87] =L"w";
- KeyPressCharMap[88] =L"x";
- KeyPressCharMap[89] =L"y";
- KeyPressCharMap[90] =L"z";
- KeyPressCharMap[112] =L"f1";
- KeyPressCharMap[113] =L"f2";
- KeyPressCharMap[114] =L"f3";
- KeyPressCharMap[115] =L"f4";
- KeyPressCharMap[116] =L"f5";
- KeyPressCharMap[117] =L"f6";
- KeyPressCharMap[118] =L"f7";
- KeyPressCharMap[119] =L"f8";
- KeyPressCharMap[120] =L"f9";
- KeyPressCharMap[121] =L"f10";
- KeyPressCharMap[122] =L"f11";
- KeyPressCharMap[123] =L"f12";
- KeyPressCharMap[17] =L"ctrl";
- KeyPressCharMap[18] =L"alt";
- KeyPressCharMap[16] =L"shift";
- KeyPressCharMap[91] =L"win";
- KeyPressCharMap[32] =L"space";
- KeyPressCharMap[20] =L"cap";
- KeyPressCharMap[9] =L"tab";
- KeyPressCharMap[192] =L"~";
- KeyPressCharMap[27] =L"esc";
- KeyPressCharMap[13] =L"enter";
- KeyPressCharMap[38] =L"up";
- KeyPressCharMap[40] =L"down";
- KeyPressCharMap[37] =L"left";
- KeyPressCharMap[39] =L"right";
- KeyPressCharMap[93] =L"option";
- KeyPressCharMap[44] =L"print";
- KeyPressCharMap[46] =L"delete";
- KeyPressCharMap[36] =L"home";
- KeyPressCharMap[35] =L"end";
- KeyPressCharMap[33] =L"pgup";
- KeyPressCharMap[34] =L"pgdn";
- KeyPressCharMap[219] =L"[";
- KeyPressCharMap[221] =L"]";
- KeyPressCharMap[220] =L"\\";
- KeyPressCharMap[186] =L";";
- KeyPressCharMap[222] =L"'";
- KeyPressCharMap[188] =L",";
- KeyPressCharMap[190] =L".";
- KeyPressCharMap[191] =L"/";
- }
- void TSRuntime::getMode(wchar_t *mouse,wchar_t *key,wchar_t *display,DWORD &dwMouse,DWORD &dwKey,DWORD &dwDisplay)
- {
- //TSRuntime::add_log( "获得模式:%s",display);
- wchar_t tmp[16][28]={0};
- int rlen=0;
- //memset(tmp,0,16*28*sizeof(wchar_t));
- if ((_wcsicmp(display,L"gdi")==0))
- {
- //TSRuntime::add_log( "gdi模式赋值");
- dwDisplay |= DISPLAY_GDI;
- }
- else if((_wcsicmp(display,L"dx2")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwDisplay |= DISPLAY_DX2;
- }
- else if((_wcsicmp(display,L"gdi2")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwDisplay |= DISPLAY_GDI2;
- }
- else if((_wcsicmp(display,L"dx")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwDisplay |= DISPLAY_DX_3D;
- }
- else if((_wcsicmp(display,L"normal")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwDisplay |= DISPLAY_NORMAL;
- }
- else
- dwDisplay=-1;
- if ((_wcsicmp(mouse,L"normal")==0))
- {
- //TSRuntime::add_log( "windows模式赋值");
- dwMouse |= MOUSE_NORMAL;
- }
- else if ((_wcsicmp(mouse,L"windows")==0))
- {
- //TSRuntime::add_log( "windows模式赋值");
- dwMouse |= MOUSE_WINDOW;
- }
- else if((_wcsicmp(mouse,L"dx")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwMouse |= MOUSE_API;
- }
- else
- dwMouse=-1;
- if ((_wcsicmp(key,L"normal")==0))
- {
- //TSRuntime::add_log( "windows模式赋值");
- dwKey |= KEY_NORMAL;
- }
- else if ((_wcsicmp(key,L"windows")==0))
- {
- //TSRuntime::add_log( "windows模式赋值");
- dwKey |= KEY_WINDOW;
- }
- else if((_wcsicmp(key,L"dx")==0))
- {
- //TSRuntime::add_log( "dx模式赋值");
- dwKey |= KEY_API;
- }
- else
- dwKey=-1;
- }
- //TsMutex::TsMutex()
- //{
- // InitializeCriticalSection(&m_mutex);
- //}
- //
- //TsMutex::~TsMutex()
- //{
- // DeleteCriticalSection(&m_mutex);
- //}
- //
- //void TsMutex::lock()
- //{
- // EnterCriticalSection(&m_mutex);
- //}
- //void TsMutex::unlock()
- //{
- // LeaveCriticalSection(&m_mutex);
- //}
- //
- //TsMutexlock::TsMutexlock(TsMutex *ptcmutex)
- //{
- // m_ptcmutex= ptcmutex;
- // m_ptcmutex->lock();
- //}
- //
- //TsMutexlock::~TsMutexlock()
- //{
- // m_ptcmutex->unlock();
- //}
|