mytool.cpp
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:9k
源码类别:

输入法编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "windows.h"
  3. #include "stdio.h"
  4. #include "string.h"
  5. #include "time.h"
  6. #include "mytool.h"
  7. #include "formula.h"
  8. #include "../DllManager.h"
  9. extern DllManager ChLib;//定义在主DLL中
  10. mytool::mytool()
  11. {
  12.  strcpy(DaNum, "零壹贰叁肆伍陆柒捌玖");
  13.  strcpy(DaDanwei , "元拾佰仟万拾佰仟亿拾佰仟特拾佰仟吉拾佰仟伯拾佰仟令拾佰仟阿拾佰仟库拾佰仟依拾佰仟斯拾佰仟舌拾佰仟扣拾佰仟磊拾佰仟比拾佰仟吕拾佰仟加拾佰仟须拾佰仟辰拾佰仟奔拾佰仟左拾佰仟马拾佰仟肥拾佰仟夺拾佰仟扔拾佰仟盍拾佰仟厚拾佰仟度拾佰仟磁拾佰仟顺拾佰仟");
  14.  strcpy(DaNumE, "○一二三四五六七八九十");
  15. }
  16. mytool::~mytool()
  17. {
  18.   
  19. }
  20. /////////////////////////////////////////////////////////////
  21. //分析字符串确定串格式
  22. //0表示不正确,1数字型,2日期型,3表达式
  23. int mytool::analysisStr(char *ssp)
  24. {
  25. int i,len,pt=0,ret=0,flage=0;
  26. len=strlen(ssp);
  27. //查看是否有非公式字符
  28. for(i=0;i<len;i++)
  29. {
  30. if('0'<=ssp[i] && ssp[i]<='9')
  31. continue;
  32. if(ssp[i]=='+'||ssp[i]=='-'||ssp[i]=='*'||ssp[i]=='/'||ssp[i]=='^')
  33. continue;
  34. if(ssp[i]=='.'||ssp[i]=='('||ssp[i]==')'||ssp[i]==' ')
  35. continue;
  36. if((ssp[i]==-93 && ssp[i+1]==-85)||(ssp[i]==-93 && ssp[i+1]==-83))
  37. {
  38. i++;
  39. continue;
  40. }
  41. if((ssp[i]==-95 && ssp[i+1]==-63)||(ssp[i]==-95 && ssp[i+1]==-62))
  42. {
  43. i++;
  44. continue;
  45. }
  46. break;
  47. }
  48. if(i==len) //
  49. {
  50. for(i=0;i<len;i++)
  51. {
  52. if('0'<=ssp[i] && ssp[i]<='9')
  53. flage=1;
  54. if('.'==ssp[i])
  55. pt++;
  56. if(ssp[i]=='+'||ssp[i]=='-'||ssp[i]=='*'||ssp[i]=='/'||ssp[i]=='^')
  57. {
  58. ret=3;
  59. break;
  60. }
  61. if((ssp[i]==-93 && ssp[i+1]==-85)||(ssp[i]==-93 && ssp[i+1]==-83))
  62. {
  63. ret=3;
  64. break;
  65. }
  66. if((ssp[i]==-95 && ssp[i+1]==-63)||(ssp[i]==-95 && ssp[i+1]==-62))
  67. {
  68. ret=3;
  69. break;
  70. }
  71. }
  72. if(ret==0)
  73. {
  74. if(pt==2)
  75. ret=2;
  76. if(pt<2 && flage==1)
  77. ret=1;
  78. }
  79. }
  80. // MessageBox (0,ss,0,0);
  81. return ret;
  82. }
  83. mytool::TranDaxieDollor(char *source,char *Daxie)
  84. {
  85. int i,point,len;
  86. char tem[1000]="",tem2[1000]="",ss1[10],ss2[10];
  87. char pss[20]="";
  88. ss1[2]=ss2[2]=0;
  89. //确定小数点
  90. strcpy(pss,"整");
  91. len=strlen(source);
  92. point=len-1;
  93. for(i=0;i<len;i++)
  94. {
  95. if('.'==source[i])
  96. {
  97. point=i;
  98. pss[0]=0;
  99. if(i+1<len)
  100. {
  101. ss1[0]=DaNum[(source[i+1]-0x30)*2];
  102. ss1[1]=DaNum[(source[i+1]-0x30)*2+1];
  103. strcat(ss1,"角");
  104. strcat(pss,ss1);
  105. }
  106. if(i+2<len)
  107. {
  108. ss1[0]=DaNum[(source[i+2]-0x30)*2];
  109. ss1[1]=DaNum[(source[i+2]-0x30)*2+1];
  110. ss1[2]=0;
  111. strcat(ss1,"分");
  112. strcat(pss,ss1);
  113. }
  114. break;
  115. }
  116. }
  117. //
  118. for(i=0;i<point;i++)
  119. {
  120. ss1[0]=DaNum[(source[point-i-1]-0x30)*2];
  121. ss1[1]=DaNum[(source[point-i-1]-0x30)*2+1];
  122. ss1[2]=0;
  123. ss2[0]=DaDanwei[i*2];
  124. ss2[1]=DaDanwei[i*2+1];
  125. ss2[2]=0;
  126. sprintf(tem2,"%s%s%s",ss1,ss2,tem);
  127. strcpy(tem,tem2);
  128. }
  129. strcat(tem,pss);
  130. strcpy(Daxie,tem);
  131. }
  132. mytool::TranDaxieNum(char *source,char *Daxie)
  133. {
  134. int i,len;
  135. char tem[1000]="",tem2[1000]="",ss1[3];
  136. ss1[2]=0;
  137. //
  138. len=strlen(source);
  139. for(i=0;i<len;i++)
  140. {
  141. if(source[i]!='.')
  142. {
  143. ss1[0]=DaNum[(source[i]-0x30)*2];
  144. ss1[1]=DaNum[(source[i]-0x30)*2+1];
  145. sprintf(tem2,"%s%s",tem,ss1);
  146. strcat(tem,ss1);
  147. }
  148. else
  149. {
  150. strcat(tem,"点");
  151. }
  152. }
  153. strcpy(Daxie,tem);
  154. }
  155. ////////////////////////////////////////////////////////////
  156. //日期处理
  157. mytool::GetDate(char *ss)
  158. {
  159.     SYSTEMTIME  systime;
  160. GetSystemTime (&systime);
  161. sprintf(ss,"%d年%d月%d日", systime.wYear,systime.wMonth,systime.wDay); 
  162. }
  163. mytool::GetDateChina(char *ss)
  164. {
  165. SYSTEMTIME systime;
  166. GetSystemTime (&systime);
  167. sprintf(ss,"%d年%d月%d日", systime.wYear,systime.wMonth,systime.wDay); 
  168. TranDateChina(ss,systime);
  169. }
  170. mytool::TranDate(char *ss,SYSTEMTIME  systime)
  171. {
  172. GetSystemTime (&systime);
  173. sprintf(ss,"%d年%d月%d日", systime.wYear,systime.wMonth,systime.wDay); 
  174. }
  175. mytool::TranDateChina(char *ss,SYSTEMTIME systime)
  176. {
  177. int i,tt,tt2;
  178. char nn[10]="",yy[10]="",rr[10]="";
  179. char tem1[1000]="",ss1[3];
  180. ss1[2]=0;
  181. tt=systime.wYear;
  182. for(i=0;i<4;i++)
  183. {
  184. tt2=tt%10;
  185. ss1[0]=DaNumE[tt2*2];
  186. ss1[1]=DaNumE[tt2*2+1];
  187. sprintf(tem1,"%s%s",ss1,nn);
  188. strcpy(nn,tem1);
  189. tt=tt/10;
  190. }
  191.     //////////////////////////////////////////////////////////
  192. tt=systime.wMonth%10;
  193. tem1[0]=0;
  194. if(tt>0)
  195. {
  196. ss1[0]=DaNumE[tt*2];
  197. ss1[1]=DaNumE[tt*2+1];
  198. ss1[2]=0;
  199. sprintf(tem1,"%s",ss1);
  200. }
  201. tt=systime.wMonth/10;
  202. if(tt>0)
  203. {
  204. ss1[0]=0;
  205. if(tt>1)
  206. {
  207. ss1[0]=DaNumE[tt*2];
  208. ss1[1]=DaNumE[tt*2+1];
  209. ss1[2]=0;
  210. }
  211. sprintf(yy,"%s十%s",ss1,tem1);
  212. }
  213. else
  214. sprintf(yy,"%s",tem1);
  215.     //////////////////////////////////////////////////////////
  216. tt=systime.wDay%10;
  217. tem1[0]=0;
  218. if(tt>0)
  219. {
  220. ss1[0]=DaNumE[tt*2];
  221. ss1[1]=DaNumE[tt*2+1];
  222. ss1[2]=0;
  223. sprintf(tem1,"%s",ss1);
  224. }
  225. tt=systime.wDay/10;
  226. if(tt>0)
  227. {
  228. ss1[0]=0;
  229. if(tt>1)
  230. {
  231. ss1[0]=DaNumE[tt*2];
  232. ss1[1]=DaNumE[tt*2+1];
  233. ss1[2]=0;
  234. }
  235. sprintf(rr,"%s十%s",ss1,tem1);
  236. }
  237. else
  238. sprintf(rr,"%s",tem1);
  239. sprintf(ss,"%s年%s月%s日",nn,yy,rr);
  240. }
  241. //返回非零说明有错误发生
  242. int mytool::formcaculate(char *formss,double *retvar)
  243. {
  244. formula ff;
  245. ff.caculate(formss);
  246. return ff.getformulaVar(retvar);
  247. }
  248. //97版的mdb
  249. BOOL mytool::mypassmdb (char * FileName,char *Pass)
  250. {
  251. char cWord[13];
  252. FILE *fp;
  253. fp = fopen(FileName,"rb"); //打开文字文件只读
  254. if (fp == 0)
  255. {
  256. MessageBox (0,"文件不能打开!",0,0);
  257. return 0;
  258. }
  259. if (GetFileSize(fp,0) <= 80)
  260. {
  261. MessageBox (0,"这不是Mdb文件!",0,0);
  262. return 0;
  263. }
  264.     fseek(fp, 66,SEEK_SET);//寻至密码处
  265. fread (cWord,13,1,fp);   //读出加密器
  266. fclose (fp);
  267. if ((BYTE)(cWord[0] ^ 0x86) == 0)//判断有无密码
  268. strcpy(Pass,"No Password");
  269. else
  270. {   //对加密串进行逐位解密
  271. cWord[0] ^= 0x86;
  272. cWord[1] ^= 0xFB;
  273. cWord[2] ^= 0xEC;
  274. cWord[3] ^= 0x37;
  275. cWord[4] ^= 0x5D;
  276. cWord[5] ^= 0x44;
  277. cWord[6] ^= 0x9C;
  278. cWord[7] ^= 0xFA;
  279. cWord[8] ^= 0xC6;
  280. cWord[9] ^= 0x5E;
  281. cWord[10] ^= 0x28;
  282. cWord[11] ^= 0xE6;
  283. cWord[12] ^= 0x13;
  284. strcpy(Pass,cWord);//返回解明码
  285. }
  286. // MessageBox (0,Pass,0,0);
  287. return 0;
  288. }
  289. void mytool::TranComStr(int selet ,char *retss)
  290. {
  291. int len,ret,i,pt;
  292.     double tem;
  293. char ss[1001];  
  294. char buffer[2000]="";
  295. if(selet==2)
  296. {
  297.    GetAsyncKeyState(16);
  298. if(GetAsyncKeyState(16)==0)
  299. GetDate(retss);
  300. else
  301. GetDateChina(retss);
  302.   }
  303. if(selet==1) //万能转换
  304. {
  305. SendMessage(GetFocus(), WM_COPY, 1, 0);
  306. {
  307. OpenClipboard(GetFocus());
  308. if(IsClipboardFormatAvailable (CF_TEXT)!=0)
  309. {
  310. HANDLE hmem = GetClipboardData(CF_TEXT);
  311. if(hmem!=0)
  312. {
  313. char *pp=(char*)GlobalLock(hmem);
  314. strcpy(buffer,pp);
  315. if(buffer[strlen(buffer)-2]==13||buffer[strlen(buffer)-2]==10)
  316. buffer[strlen(buffer)-2]=0;//清除回车
  317. GlobalUnlock(hmem);
  318. }
  319. }
  320. CloseClipboard();
  321. }
  322. if(strlen(buffer)>0) //得到数据
  323. {
  324. sprintf(ss,"%s",buffer);
  325. ret=analysisStr(ss);
  326. //sprintf(ss,"%d",ret);
  327. //MessageBox(0,"dd",ss,0);
  328. if(ret==0){
  329. char temss[20];
  330. ChLib.ChissToCodeC("c:\jsime\MainCode.txt", ss, temss);
  331. if(strlen(buffer)>0) //得到数据
  332. {
  333. //  MessageBox(0,ss,temss,0);
  334. strcpy(retss,temss);
  335. }
  336. }
  337. if(ret==1)
  338. TranDaxieNum(ss,retss);
  339. if(ret==2)
  340. TranDaxieNum(ss,retss);
  341. if(ret==3)
  342. {
  343. ret=formcaculate(ss,&tem);
  344. if(ret!=-1)
  345. {
  346. //sprintf(retss,"%d  %lf",ret,tem);
  347. sprintf(retss,"%lf",tem);
  348. //结果去尾0处理
  349. pt=-1;
  350. len=strlen(retss);
  351. for(i=0;i<len;i++)
  352. {
  353. if('.'==retss[i])
  354. {
  355. pt=i;
  356. break;
  357. }
  358. }
  359. if(pt!=-1)
  360. {
  361. for(i=len-1;i>=0;i--)
  362. {
  363. if(retss[i]=='0')
  364. retss[i]=0;
  365. else 
  366. {
  367. if(retss[i]=='.')
  368. retss[i]=0;
  369. break;
  370. }
  371. }
  372. }
  373. //结果去尾0处理END
  374. }
  375. else
  376. {
  377. retss[0]=0;
  378. }
  379. }//3
  380. }
  381. }
  382. }
  383. //本段程序为附加程序,用于获取指定窗口的内容
  384. void getAppss(int wparam)
  385. {
  386. if(wparam==32)
  387.     {
  388. long t;
  389.         t=GetWindowTextLength(GetFocus());
  390. if(t>200000)
  391. { MessageBox(0,"被复制对象不大于20万字节",0,0);
  392. t=200000;
  393. }
  394. HANDLE hGlobalMemory = GlobalAlloc(GHND, t + 1); // 分配内存
  395. LPBYTE lpGlobalMemory = (LPBYTE)GlobalLock(hGlobalMemory),lpgmem; // 锁定内存
  396. lpgmem=lpGlobalMemory;
  397.        /*lstr=(char*)malloc(t+1);
  398. if(lstr==0 || hGlobalMemory==0)
  399. { MessageBox(0,"分配内存失败",0,0);
  400. sprintf(ss,"%ld",hGlobalMemory);
  401. }*/
  402. // free(lstr); 
  403. if(t>4000)
  404. {
  405. char ss[200001];
  406. SendMessage(GetFocus(), WM_GETTEXT, t, (LPARAM)ss);
  407. ss[t]=0;
  408. for(int i=0;i<t;i++)
  409. *(lpgmem++)=ss[i];
  410. *(lpgmem)=0;
  411. }
  412. else
  413. {
  414. char ss[4001];
  415. SendMessage(GetFocus(), WM_GETTEXT, t, (LPARAM)ss);
  416. ss[t]=0;
  417. for(int i=0;i<t;i++)
  418. *(lpgmem++)=ss[i];
  419. *(lpgmem)=0;
  420. }
  421. GlobalUnlock(hGlobalMemory); // 锁定内存块解锁
  422. OpenClipboard(GetFocus());
  423. GetClipboardFormatName(0,0,0);
  424. EmptyClipboard();
  425. //GetClipboardData(CF_TEXT)
  426. SetClipboardData(CF_TEXT,hGlobalMemory);
  427. GlobalFree(hGlobalMemory);
  428. // strcat(tems,"进入剪切板");
  429. CloseClipboard();
  430. }
  431. }