TSRuntime.cpp 30 KB

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