TSRuntime.cpp 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. /*
  2. 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、
  3. 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议
  4. */
  5. #include "StdAfx.h"
  6. #include <time.h>
  7. #include "TSRuntime.h"
  8. #include "DXBind.h"
  9. //#include "TSHookFuntion.h"
  10. #include <winioctl.h>
  11. #include <TLHELP32.H>
  12. #include "TSMyKernel32DllFuntion.h"
  13. #include "TSPlugInterFace.h"
  14. #include <dinput.h>
  15. MyMouseNamespace TSRuntime::g_Mouse;
  16. MyKeyboardNamespace TSRuntime::g_KeyBoard;
  17. DXBind TSRuntime::g_DxObj;
  18. CMessageData *TSRuntime::pData=NULL;
  19. HANDLE TSRuntime::MapViewThread=NULL;
  20. DWORD TSRuntime::m_displayMode=0;
  21. DWORD TSRuntime::m_dwExStyle=0;
  22. wchar_t TSRuntime::RetStr[MAX_PATH*4]={0};
  23. wchar_t TSRuntime::SetPath[MAX_PATH]={0};
  24. LPOLESTR TSRuntime::KeyPressCharMap[0x100]={0}; //256个键位
  25. BYTE TSRuntime::VirtualToASCIIMap[0x100]={0}; //256个键位
  26. BYTE TSRuntime::keyMap[0x100]={0};
  27. bool TSRuntime::IsVipLogin=false;
  28. bool TSRuntime::IsRegLogin=false;
  29. bool TSRuntime::IsStartProtect=false;
  30. bool TSRuntime::g_IsSYSKEY=false; //按下系统键例如:ATL
  31. pMyDictInfo TSRuntime::MyDictCount[20]={0}; //存储当前所有字库,默认最大字库个数为20个
  32. int TSRuntime::nMaxStrHight[20]={0}; //记录每个字库中,最高的字高.
  33. int TSRuntime::nMyDictCountsize[20]={0}; //记录每个字库的数量
  34. int TSRuntime::NowUsingDictIndex=-1;//记录当前正在使用字库的下标
  35. char TSRuntime::bytestr[1024*3]={0};//存储点阵二进制信息最大存储为250*11
  36. bool TSRuntime::IsVirtualProtectEx=false;//是否驱动模式远程修改注入进程的页面保护属性
  37. HWND TSRuntime::hookHwnd=0;//记录要注入的窗口句柄
  38. HMEMORYLOADER TSRuntime::myUser32module=NULL;
  39. HMEMORYLOADER TSRuntime::mykernel32module=NULL;
  40. bool TSRuntime::IsInitialmyUser32module=false;
  41. bool TSRuntime::IsInitialmykernel32module=false;
  42. wchar_t TSRuntime::membstr[MAX_PATH*400]={0};
  43. bool TSRuntime::IsShowErrorMsg=TRUE;
  44. bool TSRuntime::IsNpProtect=false;
  45. BYTE TSRuntime::KeyPressMap[0x100]={0};
  46. BYTE TSRuntime::KeyPressMap_Mouse[0x100]={0};
  47. BYTE TSRuntime::RawInputKeyPressMap[0x100]={0};
  48. wchar_t TSRuntime::Regcode[MAX_PATH]={0};//记录注册码信息
  49. wchar_t TSRuntime::VipCountCode[MAX_PATH]={0};//记录VIP用户账户信息
  50. DWORD TSRuntime::g_nChecktime=0;
  51. HANDLE TSRuntime::h_checkthread=NULL; //验证线程句柄
  52. INT64 TSRuntime::checkthreadtime=0;//校验线程时间
  53. //CComBSTR TSRuntime::newbstr;
  54. COLORREF TSRuntime::pLoadstrBuffer[11][MAX_PATH]={0};//存储字库点阵还原图片颜色矩阵COLORREF
  55. DWORD TSRuntime::ZwProtectVirtualMemoryRet=0;
  56. bool TSRuntime::IsWin7X64=false;
  57. bool TSRuntime::IsWin8X64=false;
  58. DWORD TSRuntime::ProtectPid[20]={0};
  59. DWORD TSRuntime::IsProid=0;
  60. wchar_t TSRuntime::SetDictPwdString[MAX_PATH]={0};
  61. wchar_t TSRuntime::SetPicPwdString[MAX_PATH]={0};
  62. wchar_t TSRuntime::MachineCode[MAX_PATH]={0};
  63. bool TSRuntime::IsLoginlog=false;
  64. BYTE TSRuntime::SetSimModeType=0;
  65. bool TSRuntime::g_IsLoadDrive=false;
  66. extern mySleep my_sleep;
  67. extern myGetTickCount my_myGetTickCount;
  68. extern TCHAR gDLLFolder[MAX_PATH + 1];
  69. void CheckThread(void *para)//验证线程
  70. {
  71. VMPBEGIN //VMP保护
  72. INT64 lasttime=(DWORD)para;//获取注册码剩余时间
  73. INT64 threadtime=0;
  74. while(TRUE)
  75. {
  76. if(my_myGetTickCount)
  77. {
  78. TSRuntime::checkthreadtime=my_myGetTickCount();
  79. if(threadtime==0)
  80. threadtime=my_myGetTickCount();
  81. }
  82. else
  83. {
  84. TSRuntime::checkthreadtime=::GetTickCount();
  85. if(threadtime==0)
  86. threadtime=::GetTickCount();
  87. }
  88. if(TSRuntime::IsVipLogin==false&&lasttime==0) //试用验证
  89. {
  90. if((TSRuntime::checkthreadtime-threadtime)>=60*1000*30)//试用30分钟后停止服务
  91. //if((TSRuntime::checkthreadtime-threadtime)>=60*1000)//试用1分钟后停止服务
  92. {
  93. threadtime=0;//重置时间
  94. TSRuntime::checkthreadtime=0;
  95. if(TSRuntime::IsStartProtect)
  96. TSRuntime::StartProtect(0,0,-1);
  97. //TSRuntime::h_checkthread=NULL;
  98. return;
  99. }
  100. }
  101. else //注册码验证
  102. {
  103. INT64 time1=(lasttime*60*60*1000+threadtime)-TSRuntime::checkthreadtime;
  104. if(time1<=0)//注册码返回的是小时,然后换算为毫秒
  105. {
  106. threadtime=0;//重置时间
  107. TSRuntime::checkthreadtime=0;
  108. if(TSRuntime::IsStartProtect)
  109. TSRuntime::StartProtect(0,0,-1);
  110. //TSRuntime::h_checkthread=NULL;
  111. return;
  112. }
  113. }
  114. //if(my_sleep)
  115. // my_sleep(60*1000); //1分钟校验一次
  116. //else
  117. // ::Sleep(60*1000); //1分钟校验一次
  118. if(my_sleep)
  119. my_sleep(60*1000*5); //5分钟校验一次
  120. else
  121. ::Sleep(60*1000*5); //5分钟校验一次
  122. }
  123. VMPEND
  124. }
  125. BOOL CALLBACK MyEnumProc(HWND hWnd,LPARAM lParam)
  126. {
  127. DWORD dwProcessId;
  128. GetWindowThreadProcessId(hWnd,&dwProcessId);
  129. LPWNDINFO pInfo=(LPWNDINFO)lParam;
  130. if(dwProcessId==pInfo->dwProcessId)
  131. {
  132. pInfo->hWnd=hWnd;
  133. return FALSE;
  134. }
  135. return TRUE;
  136. }
  137. HWND TSRuntime::GetProcessMainWnd(DWORD dwProcessId) //获取自身窗口句柄
  138. {
  139. WNDINFO wi;
  140. wi.dwProcessId=dwProcessId;
  141. wi.hWnd=NULL;
  142. EnumWindows(MyEnumProc,(LPARAM)&wi);
  143. return wi.hWnd;
  144. }
  145. bool TSRuntime::GetRemoteModulePath(const wchar_t *module, short nPID,wchar_t *modulepath)
  146. {
  147. HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
  148. MODULEENTRY32 modEntry;
  149. modEntry.dwSize = sizeof(MODULEENTRY32);
  150. Module32First(tlh, &modEntry);
  151. do
  152. {
  153. if(!wcsicmp(module, modEntry.szModule))
  154. {
  155. CloseHandle(tlh);
  156. wcscpy(modulepath,modEntry.szExePath);
  157. return TRUE;
  158. }
  159. }
  160. while(Module32Next(tlh, &modEntry));
  161. CloseHandle(tlh);
  162. return FALSE;
  163. }
  164. DWORD TSRuntime::GetRemoteModuleBaseAddr(const wchar_t *module, short nPID)
  165. {
  166. HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
  167. MODULEENTRY32 modEntry;
  168. modEntry.dwSize = sizeof(MODULEENTRY32);
  169. Module32First(tlh, &modEntry);
  170. do
  171. {
  172. if(!wcsicmp(module, modEntry.szModule))
  173. {
  174. CloseHandle(tlh);
  175. return (DWORD)modEntry.modBaseAddr;
  176. }
  177. }
  178. while(Module32Next(tlh, &modEntry));
  179. CloseHandle(tlh);
  180. return NULL;
  181. }
  182. //获取指定进程ID的DLL模块地址
  183. HMODULE TSRuntime::GetRemoteModuleHandle(const wchar_t *module, short nPID)
  184. {
  185. HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
  186. MODULEENTRY32 modEntry;
  187. modEntry.dwSize = sizeof(MODULEENTRY32);
  188. Module32First(tlh, &modEntry);
  189. do
  190. {
  191. if(!wcsicmp(module, modEntry.szModule))
  192. {
  193. CloseHandle(tlh);
  194. return modEntry.hModule;
  195. }
  196. }
  197. while(Module32Next(tlh, &modEntry));
  198. CloseHandle(tlh);
  199. return NULL;
  200. }
  201. //获取指定进程ID的DLL模块地址
  202. HMODULE TSRuntime::GetRemoteModuleBase(const wchar_t *module, short nPID)
  203. {
  204. HANDLE tlh = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, nPID);
  205. MODULEENTRY32 modEntry;
  206. modEntry.dwSize = sizeof(MODULEENTRY32);
  207. Module32First(tlh, &modEntry);
  208. do
  209. {
  210. if(!wcsicmp(module, modEntry.szModule))
  211. {
  212. CloseHandle(tlh);
  213. return (HMODULE)modEntry.modBaseAddr;
  214. }
  215. }
  216. while(Module32Next(tlh, &modEntry));
  217. CloseHandle(tlh);
  218. return NULL;
  219. }
  220. //获取指定进程ID的DLL模块函数的地址
  221. FARPROC TSRuntime::GetRemoteProcAddress( wchar_t *module, const char *func, short nPID)
  222. {
  223. HMODULE remoteMod = GetRemoteModuleHandle(module, nPID);
  224. HMODULE localMod = GetModuleHandle(module);
  225. // If the module isn't already loaded, we load it, but since many of the
  226. // modules we'll probably be loading will do nasty things like modify
  227. // memory and hook functions, we use the DONT_RESOLVE_DLL_REFERENCES flag,
  228. // so that LoadLibraryEx only loads the dll, but doesn't execute it.
  229. if(!localMod) localMod = LoadLibraryEx(module, NULL, DONT_RESOLVE_DLL_REFERENCES);
  230. // Account for potential differences in base address
  231. // of modules in different processes.
  232. int delta = MakeDelta(int, remoteMod, localMod);
  233. FARPROC LocalFunctionAddress = GetProcAddress(localMod, func);
  234. return MakePtr(FARPROC, LocalFunctionAddress, delta);
  235. }
  236. BOOL TSRuntime::MByteToWChar(LPCSTR lpcszStr,LPWSTR lpwszStr,DWORD dwSize)
  237. {
  238. DWORD dwMinSize;
  239. dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0);
  240. if(dwSize < dwMinSize)
  241. {
  242. return FALSE;
  243. }
  244. MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
  245. return TRUE;
  246. }
  247. BOOL TSRuntime::WCharToMByte(LPCWSTR lpcwszStr,LPSTR lpszStr,DWORD dwSize)
  248. {
  249. DWORD dwMinSize;
  250. dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
  251. if(dwSize < dwMinSize)
  252. {
  253. return FALSE;
  254. }
  255. WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
  256. return TRUE;
  257. }
  258. bool TSRuntime::MyLoadLibrary()
  259. {
  260. return true;
  261. }
  262. ////重载系统模块DLL进入系统,重新定位模块DLL的函数地址,然后返回新的函数地址达到防HOOK的步骤
  263. DWORD TSRuntime::GetPassR3HookFuntionAddr(char *modename,char*funname)
  264. {
  265. return true;
  266. }
  267. //驱动层写内存
  268. bool TSRuntime::MyWriteMemory(IN PWriteMemoryInfo WriteInfo)
  269. {
  270. return 1;
  271. }
  272. bool TSRuntime::StartProtect(long enable,long type,int Pid)
  273. {
  274. return 0;
  275. }
  276. bool TSRuntime::GetComPath(TCHAR * Path)
  277. {
  278. // TODO: 在此添加控件通知处理程序代码
  279. CLSID clsid;
  280. IDispatch *pDisp;
  281. HRESULT hr=NULL;
  282. hr=CLSIDFromProgID(L"TS.TSsoft",&clsid);
  283. wchar_t compath[MAX_PATH]={0};
  284. if(hr==S_OK)
  285. {
  286. LPCTSTR data_Set=L"CLSID\\";
  287. TCHAR clsidstr[MAX_PATH]={0};
  288. TCHAR clsidreg[MAX_PATH]={0};
  289. HKEY hKey;
  290. DWORD size=MAX_PATH*sizeof(TCHAR),dwType=0;;
  291. ::swprintf(clsidstr,L"{%X-%X-%X-%X-%X%X}", clsid.Data1, clsid.Data2, clsid.Data3,
  292. clsid.Data4[0]<<8|clsid.Data4[1],
  293. clsid.Data4[2]<<8|clsid.Data4[3],
  294. clsid.Data4[4]<<24|clsid.Data4[5]<<16|
  295. clsid.Data4[6]<<8|clsid.Data4[7]);
  296. swprintf(clsidreg,L"%s%s\\InprocServer32",data_Set,clsidstr);
  297. if(RegOpenKey(HKEY_CLASSES_ROOT,clsidreg,&hKey)!=ERROR_SUCCESS)
  298. //if(RegOpenKeyEx(HKEY_CLASSES_ROOT, clsidreg, 0, KEY_WRITE|KEY_READ,&hKey)!=ERROR_SUCCESS);
  299. return 0;
  300. if(RegQueryValue(hKey,L"",Path,(PLONG)&size)!=ERROR_SUCCESS)
  301. //if(RegQueryValueA(hKey,"",compath,(PLONG)&size)!=ERROR_SUCCESS)
  302. //if(RegQueryValueEx(hKey,_T(""),NULL,&dwType,(LPBYTE)compath,&size)!=ERROR_SUCCESS);
  303. return 0;
  304. RegCloseKey(hKey);
  305. }
  306. return compath;
  307. }
  308. int TSRuntime::VipLogin(wchar_t *regcode,int type,bool isvip)
  309. {
  310. if(regcode==NULL||type<0||type>1)
  311. {
  312. return false;
  313. }
  314. VMPBEGIN //VMP保护
  315. int ret=0;
  316. if(TSRuntime::h_checkthread==NULL||isvip==true)//第一次试用或者验证注册验证码的时候连接服务器
  317. if(TSRuntime::h_checkthread==NULL||isvip==true) //试用或者验证注册码的时候 启用验证线程
  318. {
  319. if(TSRuntime::h_checkthread==NULL&&isvip==false&&ret>0)//第一次试用
  320. TSRuntime::h_checkthread=(HANDLE)_beginthread(CheckThread, 0 ,0 );
  321. else if(true==isvip&&ret>0)
  322. {
  323. if(TSRuntime::h_checkthread!=NULL)//如果启用了验证线程
  324. {
  325. ::TerminateThread(TSRuntime::h_checkthread,0);//结束试用验证线程
  326. TSRuntime::h_checkthread=NULL;
  327. }
  328. if(type==1) //注册码验证线程
  329. TSRuntime::h_checkthread=(HANDLE)_beginthread(CheckThread, 0 ,(void*)ret);
  330. }
  331. Sleep(50);//等待线程函数启动后在返回
  332. }
  333. VMPEND
  334. return ret;
  335. }
  336. void TSRuntime::my_split(TCHAR* sourcestr, TCHAR *oldstr, TCHAR (*temp)[28], int &rlen)
  337. {
  338. TCHAR sourcebak[1024]={0};//不改变源串拷贝一份
  339. wcscpy(sourcebak,sourcestr);
  340. TCHAR *pch=wcstok(sourcebak,oldstr);
  341. rlen=0;
  342. while(pch!=NULL)
  343. {
  344. wcscpy(temp[rlen],pch);
  345. pch=wcstok(NULL,oldstr);
  346. rlen++;
  347. }
  348. }
  349. bool TSRuntime::EnablePrivilege(LPCTSTR pszPrivName, bool fEnable )
  350. {
  351. bool fOk = false;
  352. // Assume function fails
  353. HANDLE hToken;
  354. // Try to open this process's access token
  355. if (OpenProcessToken(GetCurrentProcess(),
  356. TOKEN_ADJUST_PRIVILEGES, &hToken))
  357. {
  358. TOKEN_PRIVILEGES tp = { 1 };
  359. //如果成功查找到特权值
  360. if( LookupPrivilegeValue(NULL, pszPrivName, &tp.Privileges[0].Luid) )
  361. {
  362. tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
  363. AdjustTokenPrivileges(hToken, false, &tp,
  364. sizeof(tp), NULL, NULL);
  365. fOk = (GetLastError() == ERROR_SUCCESS);
  366. }
  367. CloseHandle(hToken);
  368. }
  369. return(fOk);
  370. }
  371. int TSRuntime::InitialWindowsVersion()
  372. {
  373. OSVERSIONINFO Version;
  374. ZeroMemory(&Version,sizeof(OSVERSIONINFO));
  375. Version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  376. GetVersionEx(&Version);
  377. if (Version.dwPlatformId==VER_PLATFORM_WIN32_NT)
  378. {
  379. if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==0))
  380. {
  381. return 0;//Win2000;
  382. }else if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==1))
  383. {
  384. return 1; //WinXP;
  385. }else if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==2))
  386. {
  387. return 2; //Win2003;
  388. }else if((Version.dwMajorVersion==6)&&(Version.dwMinorVersion==0))
  389. {
  390. return 3; //VISTA;
  391. }
  392. else if((Version.dwMajorVersion>=6))
  393. {
  394. BOOL bIsWow64 = FALSE;
  395. typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
  396. LPFN_ISWOW64PROCESS pfnIsWow64 = NULL;
  397. pfnIsWow64 = (LPFN_ISWOW64PROCESS)GetProcAddress(
  398. GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
  399. if (pfnIsWow64)
  400. {
  401. pfnIsWow64(GetCurrentProcess(), &bIsWow64);
  402. }
  403. if(Version.dwMinorVersion==2&&bIsWow64==false) //WIN8
  404. return 5;
  405. else if(Version.dwMinorVersion==2&&bIsWow64==true)
  406. {
  407. TSRuntime::IsWin8X64=true;
  408. return 5;
  409. }
  410. //如果是win7_64系统ret返回true
  411. if(bIsWow64)
  412. TSRuntime::IsWin7X64=true;//win7x64
  413. return 4; //win7x64
  414. }
  415. }
  416. return -1;
  417. }
  418. void TSRuntime::add_log( const char * fmt, ... )
  419. {
  420. va_list va_alist;
  421. char buf[256];
  422. char logbuf[1024];
  423. char cDirectory[600];
  424. FILE* file;
  425. struct tm* current_tm;
  426. time_t current_time;
  427. time( &current_time );
  428. current_tm = localtime( &current_time );
  429. sprintf( logbuf, "//%02d:%02d:%02d: ", current_tm->tm_hour, current_tm->tm_min, current_tm->tm_sec );
  430. va_start( va_alist, fmt );
  431. vsprintf( buf, fmt, va_alist );
  432. va_end( va_alist );
  433. strcat( logbuf, buf );
  434. strcat( logbuf, "\n" );
  435. strcpy( cDirectory, "d:\\" );
  436. strcat( cDirectory, "Tha Log.txt" );
  437. if( ( file = fopen( cDirectory, "a+" ) ) != NULL )
  438. {
  439. fputs( logbuf, file );
  440. fclose( file );
  441. }
  442. }
  443. int TSRuntime::retrunLparamDown(int key)
  444. {
  445. int lparamdown=0X00000000;
  446. switch(key)
  447. {
  448. case VK_RETURN:lparamdown=0X001C0001;break;
  449. case VK_ESCAPE:lparamdown=0X00010001;break;
  450. //按下大写键
  451. case VK_CAPITAL:lparamdown=0X003A0001;break;
  452. case VK_BACK:lparamdown=0X000E0001;break;
  453. case VK_TAB:lparamdown=0X000F0001;break;
  454. case VK_SPACE:lparamdown=0X00390001;break;
  455. case VK_CONTROL:lparamdown=0X001D0001;break;
  456. case 'A':lparamdown=0X001E0001;break;
  457. case 'D':lparamdown=0X00200001;break;
  458. case 'S':lparamdown=0X001F0001;break;
  459. case 'Q':lparamdown=0X00100001;break;
  460. case 'W':lparamdown=0X00110001;break;
  461. case 'E':lparamdown=0X00120001;break;
  462. case 'V':lparamdown=0X002F0001;break;
  463. case 'R':lparamdown=0X00130001;break;
  464. case 'Y':lparamdown=0X00150001;break;
  465. case 'U':lparamdown=0X00160001;break;
  466. case 'I':lparamdown=0X00170001;break;
  467. case 'O':lparamdown=0X00180001;break;
  468. case 'P':lparamdown=0X00190001;break;
  469. case 'T':lparamdown=0X00140001;break;
  470. case 'F':lparamdown=0X00210001;break;
  471. case 'H':lparamdown=0X00230001;break;
  472. case 'J':lparamdown=0X00240001;break;
  473. case 'C':lparamdown=0X002E0001;break;
  474. case 'K':lparamdown=0X00250001;break;
  475. case 'B':lparamdown=0X00300001;break;
  476. case 'L':lparamdown=0X00260001;break;
  477. case 'M':lparamdown=0X00320001;break;
  478. case 'Z':lparamdown=0X002C0001;break;
  479. case 'X':lparamdown=0X002D0001;break;
  480. case '1':lparamdown=0X00020001;break;
  481. case '2':lparamdown=0X00030001;break;
  482. case '3':lparamdown=0X00040001;break;
  483. case '4':lparamdown=0X00050001;break;
  484. case '5':lparamdown=0X00060001;break;
  485. case '6':lparamdown=0X00070001;break;
  486. case '7':lparamdown=0X00080001;break;
  487. case '8':lparamdown=0X00090001;break;
  488. case '9':lparamdown=0X000A0001;break;
  489. case '0':lparamdown=0X000B0001;break;
  490. case VK_F1:lparamdown=0X003B0001;break;
  491. case VK_F2:lparamdown=0X003C0001;break;
  492. case VK_F3:lparamdown=0X003D0001;break;
  493. case VK_F4:lparamdown=0X003E0001;break;
  494. case VK_F5:lparamdown=0X003F0001;break;
  495. case VK_F6:lparamdown=0X00400001;break;
  496. case VK_F7:lparamdown=0X00410001;break;
  497. case VK_F8:lparamdown=0X00420001;break;
  498. case VK_F9:lparamdown=0X00430001;break;
  499. case VK_F10:lparamdown=0X00440001;break;
  500. case VK_F11:lparamdown=0X00570001;break;
  501. case VK_F12:lparamdown=0X00580001;break;
  502. case VK_NUMPAD1:lparamdown=0X004F0001;break;
  503. case VK_NUMPAD2:lparamdown=0X00500001;break;
  504. case VK_NUMPAD3:lparamdown=0X00510001;break;
  505. case VK_NUMPAD4:lparamdown=0X004B0001;break;
  506. case VK_NUMPAD5:lparamdown=0X004C0001;break;
  507. case VK_NUMPAD6:lparamdown=0X004D0001;break;
  508. case VK_NUMPAD7:lparamdown=0X00470001;break;
  509. case VK_NUMPAD8:lparamdown=0X00480001;break;
  510. case VK_NUMPAD9:lparamdown=0X00490001;break;
  511. case VK_NUMPAD0:lparamdown=0X00520001;break;
  512. case VK_UP:lparamdown=0X01480001;break;
  513. case VK_DOWN:lparamdown=0X01500001;break;
  514. case VK_LEFT:lparamdown=0X014B0001;break;
  515. case VK_RIGHT:lparamdown=0X014D0001;break;
  516. case VK_SHIFT:lparamdown=0X002A0001;break;
  517. case VK_MENU:lparamdown=0X20380001;break;
  518. case VK_NUMLOCK:lparamdown=0X01450001;break;
  519. case VK_DIVIDE:lparamdown=0X01350001;break;
  520. case VK_MULTIPLY:lparamdown=0X00370001;break;
  521. case VK_SUBTRACT:lparamdown=0X004A0001;break;
  522. case VK_ADD:lparamdown=0X004E0001;break;
  523. case VK_DECIMAL:lparamdown=0X00110001;break;
  524. case VK_OEM_MINUS:lparamdown=0X000C0001;break;
  525. case VK_OEM_PLUS:lparamdown=0X000D0001;break;
  526. case VK_OEM_3:lparamdown=0X00290001;break;
  527. case VK_OEM_5:lparamdown=0X002B0001;break;
  528. }
  529. return lparamdown;
  530. }
  531. void TSRuntime::InitKeyPressMap()
  532. {
  533. ZeroMemory(KeyPressMap,0x100);
  534. ZeroMemory(KeyPressMap_Mouse,0x100);
  535. }
  536. void TSRuntime::InitKeyMap()
  537. {
  538. ZeroMemory(keyMap,0x100);
  539. keyMap[0x2] ='1';
  540. keyMap[0x3] ='2';
  541. keyMap[0x4] ='3';
  542. keyMap[0x5] ='4';
  543. keyMap[0x6] ='5';
  544. keyMap[0x7] ='6';
  545. keyMap[0x8] ='7';
  546. keyMap[0x9] ='8';
  547. keyMap[0xa] ='9';
  548. keyMap[0xb] ='0';
  549. keyMap[0xc] ='-';
  550. keyMap[0xd] ='=';
  551. keyMap[0x1e] ='A';
  552. keyMap[0x30] ='B';
  553. keyMap[0x2e] ='C';
  554. keyMap[0x20] ='D';
  555. keyMap[0x12] ='E';
  556. keyMap[0x21] ='F';
  557. keyMap[0x22] ='G';
  558. keyMap[0x23] ='H';
  559. keyMap[0x17] ='I';
  560. keyMap[0x24] ='J';
  561. keyMap[0x25] ='K';
  562. keyMap[0x26] ='L';
  563. keyMap[0x32] ='M';
  564. keyMap[0x31] ='N';
  565. keyMap[0x18] ='O';
  566. keyMap[0x19] ='P';
  567. keyMap[0x10] ='Q';
  568. keyMap[0x13] ='R';
  569. keyMap[0x1f] ='S';
  570. keyMap[0x14] ='T';
  571. keyMap[0x16] ='U';
  572. keyMap[0x2f] ='V';
  573. keyMap[0x11] ='W';
  574. keyMap[0x2d] ='X';
  575. keyMap[0x15] ='Y';
  576. keyMap[0x2c] ='Z';
  577. keyMap[0x1e] ='a';
  578. keyMap[0x30] ='b';
  579. keyMap[0x2e] ='c';
  580. keyMap[0x20] ='d';
  581. keyMap[0x12] ='e';
  582. keyMap[0x21] ='f';
  583. keyMap[0x22] ='g';
  584. keyMap[0x23] ='h';
  585. keyMap[0x17] ='i';
  586. keyMap[0x24] ='j';
  587. keyMap[0x25] ='k';
  588. keyMap[0x26] ='l';
  589. keyMap[0x32] ='m';
  590. keyMap[0x31] ='n';
  591. keyMap[0x18] ='o';
  592. keyMap[0x19] ='p';
  593. keyMap[0x10] ='q';
  594. keyMap[0x13] ='r';
  595. keyMap[0x1f] ='s';
  596. keyMap[0x14] ='t';
  597. keyMap[0x16] ='u';
  598. keyMap[0x2f] ='v';
  599. keyMap[0x11] ='w';
  600. keyMap[0x2d] ='x';
  601. keyMap[0x15] ='y';
  602. keyMap[0x2c] ='z';
  603. //keyMap[DIK_NUMLOCK] =VK_NUMLOCK;//小键盘
  604. //keyMap[DIK_NUMPAD0] =VK_NUMPAD0;//小键盘;
  605. //keyMap[DIK_NUMPAD1] =VK_NUMPAD1;//小键盘;
  606. //keyMap[DIK_NUMPAD2] =VK_NUMPAD2;//小键盘;
  607. //keyMap[DIK_NUMPAD3] =VK_NUMPAD3;////小键盘;
  608. //keyMap[DIK_NUMPAD4] =VK_NUMPAD4;////小键盘;
  609. //keyMap[DIK_NUMPAD5] =VK_NUMPAD5;////小键盘;
  610. //keyMap[DIK_NUMPAD6] =VK_NUMPAD6;///小键盘;
  611. //keyMap[DIK_NUMPAD7] =VK_NUMPAD7;////小键盘;
  612. //keyMap[DIK_NUMPAD8] =VK_NUMPAD9;////小键盘
  613. //keyMap[DIK_NUMPAD9] =VK_NUMPAD9;////小键盘
  614. //keyMap[DIK_ADD] =VK_ADD;//+ 小键盘
  615. //keyMap[DIK_SUBTRACT] =VK_SUBTRACT;//- 小键盘"
  616. //keyMap[DIK_MULTIPLY] =VK_MULTIPLY;//* 小键盘
  617. //keyMap[DIK_DIVIDE] =VK_DIVIDE;//'/' 小键盘"
  618. //keyMap[DIK_DECIMAL] =VK_DECIMAL;//"."小键盘
  619. keyMap[0x3B] =VK_F1;
  620. keyMap[0x3C] =VK_F2;
  621. keyMap[0x3D] =VK_F3;
  622. keyMap[0x3E] =VK_F4;
  623. keyMap[0x3F] =VK_F5;
  624. keyMap[0x40] =VK_F6;
  625. keyMap[0x41] =VK_F7;
  626. keyMap[0x42] =VK_F8;
  627. keyMap[0x43] =VK_F9;
  628. keyMap[0x44] =VK_F10;
  629. keyMap[0x57] =VK_F11;
  630. keyMap[0x58] =VK_F12;
  631. keyMap[0x1c] =VK_RETURN;
  632. keyMap[0xF] =VK_TAB;
  633. keyMap[0x2A] =VK_SHIFT;
  634. keyMap[0x1] =VK_ESCAPE;
  635. keyMap[0x1D] =VK_CONTROL;
  636. keyMap[0x39] =VK_SPACE;
  637. keyMap[0xb8] =VK_MENU; //alt
  638. keyMap[0xe] =VK_BACK; //退格
  639. keyMap[0x3A] =VK_CAPITAL; // Caps Lock
  640. keyMap[0xD3] =VK_DELETE;
  641. keyMap[0xc8] =VK_UP;
  642. keyMap[0xd0] =VK_DOWN;
  643. keyMap[0xcb] =VK_LEFT;
  644. keyMap[0xcd] =VK_RIGHT;
  645. }
  646. void TSRuntime::InitVirtualToASCIIMap()
  647. {
  648. ZeroMemory(VirtualToASCIIMap,0x100);
  649. VirtualToASCIIMap[0x8]=0x8;//back
  650. VirtualToASCIIMap[0xD]=0xD;//enter
  651. VirtualToASCIIMap[0x20]=0x20;//space
  652. VirtualToASCIIMap[17]=17; //ctrl
  653. VirtualToASCIIMap[18]=18; //alt
  654. VirtualToASCIIMap[16]=16; //shift
  655. VirtualToASCIIMap[0xa4]=0xa4; //左Alt键
  656. VirtualToASCIIMap[0xA0]=0xA0; //左Shift键
  657. VirtualToASCIIMap[0xA2]=0xA2; //左Ctrl键
  658. VirtualToASCIIMap[32]=32; //space
  659. VirtualToASCIIMap[91]=91; //win
  660. VirtualToASCIIMap[20]=20; //cap
  661. VirtualToASCIIMap[9]=9; //tab
  662. VirtualToASCIIMap[27]=27; //esc
  663. VirtualToASCIIMap[38]=38; //up
  664. VirtualToASCIIMap[40]=40; //down
  665. VirtualToASCIIMap[37]=37; //left
  666. VirtualToASCIIMap[39]=39; //right
  667. VirtualToASCIIMap[93]=93; //option
  668. VirtualToASCIIMap[44]=44; //print
  669. VirtualToASCIIMap[46]=46; //delete
  670. VirtualToASCIIMap[36]=36; //home
  671. VirtualToASCIIMap[35]=35; //end
  672. VirtualToASCIIMap[33]=33; //pgup
  673. VirtualToASCIIMap[34]=34; //pgdn
  674. VirtualToASCIIMap[0x41]=0x61;//A
  675. VirtualToASCIIMap[0x42]=0x62;//B
  676. VirtualToASCIIMap[0x43]=0x63;//C
  677. VirtualToASCIIMap[0x44]=0x64;//D
  678. VirtualToASCIIMap[0x45]=0x65;//E
  679. VirtualToASCIIMap[0x46]=0x66;//F
  680. VirtualToASCIIMap[0x47]=0x67;//G
  681. VirtualToASCIIMap[0x48]=0x68;//H
  682. VirtualToASCIIMap[0x49]=0x69;//I
  683. VirtualToASCIIMap[0x4A]=0x6A;//J
  684. VirtualToASCIIMap[0x4B]=0x6B;//K
  685. VirtualToASCIIMap[0x4C]=0x6C;//L
  686. VirtualToASCIIMap[0x4D]=0x6D;//M
  687. VirtualToASCIIMap[0x4E]=0x6E;//N
  688. VirtualToASCIIMap[0x4F]=0x6F;//O
  689. VirtualToASCIIMap[0x50]=0x70;//P
  690. VirtualToASCIIMap[0x51]=0x71;//Q
  691. VirtualToASCIIMap[0x52]=0x72;//R
  692. VirtualToASCIIMap[0x53]=0x73;//S
  693. VirtualToASCIIMap[0x54]=0x74;//T
  694. VirtualToASCIIMap[0x55]=0x75;//U
  695. VirtualToASCIIMap[0x56]=0x76;//V
  696. VirtualToASCIIMap[0x57]=0x77;//W
  697. VirtualToASCIIMap[0x58]=0x78;//X
  698. VirtualToASCIIMap[0x59]=0x79;//Y
  699. VirtualToASCIIMap[0x5A]=0x7A;//Z
  700. //VirtualToASCIIMap[0x41]=0x41;//a
  701. //VirtualToASCIIMap[0x42]=0x42;//b
  702. //VirtualToASCIIMap[0x43]=0x43;//c
  703. //VirtualToASCIIMap[0x44]=0x44;//d
  704. //VirtualToASCIIMap[0x45]=0x45;//e
  705. //VirtualToASCIIMap[0x46]=0x46;//f
  706. //VirtualToASCIIMap[0x47]=0x47;//g
  707. //VirtualToASCIIMap[0x48]=0x48;//h
  708. //VirtualToASCIIMap[0x49]=0x49;//I
  709. //VirtualToASCIIMap[0x4A]=0x4A;//J
  710. //VirtualToASCIIMap[0x4B]=0x4B;//K
  711. //VirtualToASCIIMap[0x4C]=0x4C;//L
  712. //VirtualToASCIIMap[0x4D]=0x4D;//M
  713. //VirtualToASCIIMap[0x4E]=0x4E;//N
  714. //VirtualToASCIIMap[0x4F]=0x4F;//O
  715. //VirtualToASCIIMap[0x50]=0x50;//P
  716. //VirtualToASCIIMap[0x51]=0x51;//Q
  717. //VirtualToASCIIMap[0x52]=0x52;//R
  718. //VirtualToASCIIMap[0x53]=0x53;//S
  719. //VirtualToASCIIMap[0x54]=0x54;//T
  720. //VirtualToASCIIMap[0x55]=0x55;//U
  721. //VirtualToASCIIMap[0x56]=0x56;//V
  722. //VirtualToASCIIMap[0x57]=0x57;//W
  723. //VirtualToASCIIMap[0x58]=0x58;//X
  724. //VirtualToASCIIMap[0x59]=0x59;//Y
  725. //VirtualToASCIIMap[0x5A]=0x5A;//Z
  726. VirtualToASCIIMap[0x61]=0x61;//a
  727. VirtualToASCIIMap[0x62]=0x62;//b
  728. VirtualToASCIIMap[0x63]=0x63;//c
  729. VirtualToASCIIMap[0x64]=0x64;//d
  730. VirtualToASCIIMap[0x65]=0x65;//e
  731. VirtualToASCIIMap[0x66]=0x66;//f
  732. VirtualToASCIIMap[0x67]=0x67;//g
  733. VirtualToASCIIMap[0x68]=0x68;//h
  734. VirtualToASCIIMap[0x69]=0x69;//I
  735. VirtualToASCIIMap[0x6A]=0x6A;//J
  736. VirtualToASCIIMap[0x6B]=0x6B;//K
  737. VirtualToASCIIMap[0x6C]=0x6C;//L
  738. VirtualToASCIIMap[0x6D]=0x6D;//M
  739. VirtualToASCIIMap[0x6E]=0x6E;//N
  740. VirtualToASCIIMap[0x6F]=0x6F;//O
  741. VirtualToASCIIMap[0x70]=0x70;//P
  742. VirtualToASCIIMap[0x71]=0x71;//Q
  743. VirtualToASCIIMap[0x72]=0x72;//R
  744. VirtualToASCIIMap[0x73]=0x73;//S
  745. VirtualToASCIIMap[0x74]=0x74;//T
  746. VirtualToASCIIMap[0x75]=0x75;//U
  747. VirtualToASCIIMap[0x76]=0x76;//V
  748. VirtualToASCIIMap[0x77]=0x77;//W
  749. VirtualToASCIIMap[0x78]=0x78;//X
  750. VirtualToASCIIMap[0x79]=0x79;//Y
  751. VirtualToASCIIMap[0x7A]=0x7A;//Z
  752. VirtualToASCIIMap[48] ='0';//L"0";
  753. VirtualToASCIIMap[49] ='1';//L"1";
  754. VirtualToASCIIMap[50] ='2';//L"2";
  755. VirtualToASCIIMap[51] ='3';//L"3";
  756. VirtualToASCIIMap[52] ='4';//L"4";
  757. VirtualToASCIIMap[53] ='5';//L"5";
  758. VirtualToASCIIMap[54] ='6';//L"6";
  759. VirtualToASCIIMap[55] ='7';//L"7";
  760. VirtualToASCIIMap[56] ='8';//L"8";
  761. VirtualToASCIIMap[57] ='9';//L"9";
  762. VirtualToASCIIMap[VK_F1] =VK_F1;//L"F1";
  763. VirtualToASCIIMap[VK_F2] =VK_F2;//L"F2";
  764. VirtualToASCIIMap[VK_F3] =VK_F3;//L"F3";
  765. VirtualToASCIIMap[VK_F4] =VK_F4;//L"F4";
  766. VirtualToASCIIMap[VK_F5] =VK_F5;//L"F5";
  767. VirtualToASCIIMap[VK_F6] =VK_F6;//L"F6";
  768. VirtualToASCIIMap[VK_F7] =VK_F7;//L"F7";
  769. VirtualToASCIIMap[VK_F8] =VK_F8;//L"F8";
  770. VirtualToASCIIMap[VK_F9] =VK_F9;//L"F9"
  771. VirtualToASCIIMap[VK_F10] =VK_F10;//L"F10"
  772. VirtualToASCIIMap[VK_F11] =VK_F11;//L"F11"
  773. VirtualToASCIIMap[VK_F12] =VK_F12;//L"F12"
  774. //VirtualToASCIIMap[VK_NUMLOCK] =VK_NUMLOCK;//小键盘;
  775. //VirtualToASCIIMap[VK_NUMPAD0] =VK_NUMPAD0;//小键盘;
  776. //VirtualToASCIIMap[VK_NUMPAD1] =VK_NUMPAD1;//小键盘;
  777. //VirtualToASCIIMap[VK_NUMPAD2] =VK_NUMPAD2;//小键盘;
  778. //VirtualToASCIIMap[VK_NUMPAD3] =VK_NUMPAD3;////小键盘;
  779. //VirtualToASCIIMap[VK_NUMPAD4] =VK_NUMPAD4;////小键盘;
  780. //VirtualToASCIIMap[VK_NUMPAD5] =VK_NUMPAD5;////小键盘;
  781. //VirtualToASCIIMap[VK_NUMPAD6] =VK_NUMPAD6;///小键盘;
  782. //VirtualToASCIIMap[VK_NUMPAD7] =VK_NUMPAD7;////小键盘;
  783. //VirtualToASCIIMap[VK_NUMPAD8] =VK_NUMPAD9;////小键盘
  784. //VirtualToASCIIMap[VK_NUMPAD9] =VK_NUMPAD9;////小键盘
  785. //VirtualToASCIIMap[VK_ADD] =VK_ADD;//+ 小键盘
  786. //VirtualToASCIIMap[VK_SUBTRACT] =VK_SUBTRACT;//- 小键盘"
  787. //VirtualToASCIIMap[VK_MULTIPLY] =VK_MULTIPLY;//* 小键盘
  788. //VirtualToASCIIMap[VK_DIVIDE] =VK_DIVIDE;//'/' 小键盘"
  789. //VirtualToASCIIMap[VK_DECIMAL] =VK_DECIMAL;//"."小键盘
  790. //VirtualToASCIIMap[VK_SEPARATOR] =VK_SEPARATOR;// 小键盘"
  791. VirtualToASCIIMap[0xBA]=0x3B;//;
  792. VirtualToASCIIMap[0xBC]=0x2C;//,
  793. VirtualToASCIIMap[0xBE]=0x2E;//.
  794. VirtualToASCIIMap[0xBF]=0x2F;///
  795. VirtualToASCIIMap[0xC0]=0x7E;//~
  796. VirtualToASCIIMap[0xDB]=0x2D;//-
  797. VirtualToASCIIMap[0xBB]=0x3D;//=
  798. VirtualToASCIIMap[0xDB]=0x5B;//[
  799. VirtualToASCIIMap[0xDC]=0x5C;//\
  800. VirtualToASCIIMap[0xDD]=0x5D;//]
  801. VirtualToASCIIMap[0xDE]=0x27;//'
  802. }
  803. void TSRuntime::InitKeyPressCharMap() //初始化KeyPressCharMap用于直接将虚拟键码相应的字符串转换到相应的ASCII码
  804. {
  805. ZeroMemory(KeyPressCharMap,0x100);
  806. KeyPressCharMap[49] =L"1";
  807. KeyPressCharMap[50] =L"2";
  808. KeyPressCharMap[51] =L"3";
  809. KeyPressCharMap[52] =L"4";
  810. KeyPressCharMap[53] =L"5";
  811. KeyPressCharMap[54] =L"6";
  812. KeyPressCharMap[55] =L"7";
  813. KeyPressCharMap[56] =L"8";
  814. KeyPressCharMap[57] =L"9";
  815. KeyPressCharMap[48] =L"0";
  816. KeyPressCharMap[45] =L"-";
  817. KeyPressCharMap[61] =L"=";
  818. KeyPressCharMap[8] = L"back";
  819. KeyPressCharMap[65] =L"a";
  820. KeyPressCharMap[66] =L"b";
  821. KeyPressCharMap[67] =L"c";
  822. KeyPressCharMap[68] =L"d";
  823. KeyPressCharMap[69] =L"e";
  824. KeyPressCharMap[70] =L"f";
  825. KeyPressCharMap[71] =L"g";
  826. KeyPressCharMap[72] =L"h";
  827. KeyPressCharMap[73] =L"i";
  828. KeyPressCharMap[74] =L"j";
  829. KeyPressCharMap[75] =L"k";
  830. KeyPressCharMap[76] =L"l";
  831. KeyPressCharMap[77] =L"m";
  832. KeyPressCharMap[78] =L"n";
  833. KeyPressCharMap[79] =L"o";
  834. KeyPressCharMap[80] =L"p";
  835. KeyPressCharMap[81] =L"q";
  836. KeyPressCharMap[82] =L"r";
  837. KeyPressCharMap[83] =L"s";
  838. KeyPressCharMap[84] =L"t";
  839. KeyPressCharMap[85] =L"u";
  840. KeyPressCharMap[86] =L"v";
  841. KeyPressCharMap[87] =L"w";
  842. KeyPressCharMap[88] =L"x";
  843. KeyPressCharMap[89] =L"y";
  844. KeyPressCharMap[90] =L"z";
  845. KeyPressCharMap[112] =L"f1";
  846. KeyPressCharMap[113] =L"f2";
  847. KeyPressCharMap[114] =L"f3";
  848. KeyPressCharMap[115] =L"f4";
  849. KeyPressCharMap[116] =L"f5";
  850. KeyPressCharMap[117] =L"f6";
  851. KeyPressCharMap[118] =L"f7";
  852. KeyPressCharMap[119] =L"f8";
  853. KeyPressCharMap[120] =L"f9";
  854. KeyPressCharMap[121] =L"f10";
  855. KeyPressCharMap[122] =L"f11";
  856. KeyPressCharMap[123] =L"f12";
  857. KeyPressCharMap[17] =L"ctrl";
  858. KeyPressCharMap[18] =L"alt";
  859. KeyPressCharMap[16] =L"shift";
  860. KeyPressCharMap[91] =L"win";
  861. KeyPressCharMap[32] =L"space";
  862. KeyPressCharMap[20] =L"cap";
  863. KeyPressCharMap[9] =L"tab";
  864. KeyPressCharMap[192] =L"~";
  865. KeyPressCharMap[27] =L"esc";
  866. KeyPressCharMap[13] =L"enter";
  867. KeyPressCharMap[38] =L"up";
  868. KeyPressCharMap[40] =L"down";
  869. KeyPressCharMap[37] =L"left";
  870. KeyPressCharMap[39] =L"right";
  871. KeyPressCharMap[93] =L"option";
  872. KeyPressCharMap[44] =L"print";
  873. KeyPressCharMap[46] =L"delete";
  874. KeyPressCharMap[36] =L"home";
  875. KeyPressCharMap[35] =L"end";
  876. KeyPressCharMap[33] =L"pgup";
  877. KeyPressCharMap[34] =L"pgdn";
  878. KeyPressCharMap[219] =L"[";
  879. KeyPressCharMap[221] =L"]";
  880. KeyPressCharMap[220] =L"\\";
  881. KeyPressCharMap[186] =L";";
  882. KeyPressCharMap[222] =L"'";
  883. KeyPressCharMap[188] =L",";
  884. KeyPressCharMap[190] =L".";
  885. KeyPressCharMap[191] =L"/";
  886. }
  887. void TSRuntime::getMode(wchar_t *mouse,wchar_t *key,wchar_t *display,DWORD &dwMouse,DWORD &dwKey,DWORD &dwDisplay)
  888. {
  889. //TSRuntime::add_log( "获得模式:%s",display);
  890. wchar_t tmp[16][28]={0};
  891. int rlen=0;
  892. //memset(tmp,0,16*28*sizeof(wchar_t));
  893. if ((_wcsicmp(display,L"gdi")==0))
  894. {
  895. //TSRuntime::add_log( "gdi模式赋值");
  896. dwDisplay |= DISPLAY_GDI;
  897. }
  898. else if((_wcsicmp(display,L"dx2")==0))
  899. {
  900. //TSRuntime::add_log( "dx模式赋值");
  901. dwDisplay |= DISPLAY_DX2;
  902. }
  903. else if((_wcsicmp(display,L"gdi2")==0))
  904. {
  905. //TSRuntime::add_log( "dx模式赋值");
  906. dwDisplay |= DISPLAY_GDI2;
  907. }
  908. else if((_wcsicmp(display,L"dx")==0))
  909. {
  910. //TSRuntime::add_log( "dx模式赋值");
  911. dwDisplay |= DISPLAY_DX_3D;
  912. }
  913. else if((_wcsicmp(display,L"normal")==0))
  914. {
  915. //TSRuntime::add_log( "dx模式赋值");
  916. dwDisplay |= DISPLAY_NORMAL;
  917. }
  918. else
  919. dwDisplay=-1;
  920. if ((_wcsicmp(mouse,L"normal")==0))
  921. {
  922. //TSRuntime::add_log( "windows模式赋值");
  923. dwMouse |= MOUSE_NORMAL;
  924. }
  925. else if ((_wcsicmp(mouse,L"windows")==0))
  926. {
  927. //TSRuntime::add_log( "windows模式赋值");
  928. dwMouse |= MOUSE_WINDOW;
  929. }
  930. else if((_wcsicmp(mouse,L"dx")==0))
  931. {
  932. //TSRuntime::add_log( "dx模式赋值");
  933. dwMouse |= MOUSE_API;
  934. }
  935. else
  936. dwMouse=-1;
  937. if ((_wcsicmp(key,L"normal")==0))
  938. {
  939. //TSRuntime::add_log( "windows模式赋值");
  940. dwKey |= KEY_NORMAL;
  941. }
  942. else if ((_wcsicmp(key,L"windows")==0))
  943. {
  944. //TSRuntime::add_log( "windows模式赋值");
  945. dwKey |= KEY_WINDOW;
  946. }
  947. else if((_wcsicmp(key,L"dx")==0))
  948. {
  949. //TSRuntime::add_log( "dx模式赋值");
  950. dwKey |= KEY_API;
  951. }
  952. else
  953. dwKey=-1;
  954. }
  955. //TsMutex::TsMutex()
  956. //{
  957. // InitializeCriticalSection(&m_mutex);
  958. //}
  959. //
  960. //TsMutex::~TsMutex()
  961. //{
  962. // DeleteCriticalSection(&m_mutex);
  963. //}
  964. //
  965. //void TsMutex::lock()
  966. //{
  967. // EnterCriticalSection(&m_mutex);
  968. //}
  969. //void TsMutex::unlock()
  970. //{
  971. // LeaveCriticalSection(&m_mutex);
  972. //}
  973. //
  974. //TsMutexlock::TsMutexlock(TsMutex *ptcmutex)
  975. //{
  976. // m_ptcmutex= ptcmutex;
  977. // m_ptcmutex->lock();
  978. //}
  979. //
  980. //TsMutexlock::~TsMutexlock()
  981. //{
  982. // m_ptcmutex->unlock();
  983. //}