STATUS.CPP
上传用户:zhang8947
上传日期:2007-01-08
资源大小:1910k
文件大小:15k
源码类别:

多国语言处理

开发平台:

Visual C++

  1. //状态
  2. #include "stdafx.h"
  3. #include <ver.h>
  4. #include "resource.h"
  5. #include "cspublic.h"
  6. #include "systemse.h"
  7. #include "status.h"
  8. #include "hooks.h"
  9. extern CHotKeyParam OHotKeyParam ; //热键参数对象
  10. CWinStatus OWinStatus ; //主窗口状态对象
  11. CWinStatus::CWinStatus( void )
  12. {
  13. m_hMainWnd =NULL ;
  14. //得到主窗口状态
  15. m_nMainWinStatus =GetPrivateProfileInt( "窗口参数" , 
  16. "浮动条状态" , 2 , INI_FILE_NAME ) ;
  17. m_bLine =GetPrivateProfileInt( "窗口参数" ,
  18. "退化显示" , 1 , INI_FILE_NAME ) ;
  19. m_bLineSwitch =1 ;
  20. //-----------------------------------------------------------------------------------//
  21. m_hInputWnd =NULL ;
  22. //得到输入板窗口状态
  23. m_nInputWinStatus =GetPrivateProfileInt( "输入板参数" ,
  24. "输入板状态" , 1 , INI_FILE_NAME ) ;
  25. //-----------------------------------------------------------------------------------------------//
  26. //得到输入内码
  27. m_nInputCode =GetPrivateProfileInt( "输入方法" , 
  28. "输入内码" , 0 , INI_FILE_NAME ) ;
  29. //得到当前输入法
  30. m_nInputMethod =GetPrivateProfileInt( "输入方法" , "当前输入法" , 0 , 
  31. INI_FILE_NAME ) ;
  32. //----------------------------------------------------------------------------------------------//
  33. //得到是西文字符还是中文字符,缺省为西文字符
  34. m_bInputStatus123[0] =GetPrivateProfileInt( "输入方法" ,
  35. "西文字符还是中文字符" , 1 , INI_FILE_NAME ) ;
  36. //得到输入汉字后是否自动加空格,缺省为不加
  37. m_bInputStatus123[1] =GetPrivateProfileInt( "输入方法" ,
  38. "汉字后是否加空格" , 1 , INI_FILE_NAME ) ;
  39. //得到是半角字母还是全角字母,缺省为半角字母
  40. m_bInputStatus123[2] =GetPrivateProfileInt( "输入方法" ,
  41. "半角字母还是全角字母" , 1 , INI_FILE_NAME ) ;
  42. //-------------------------------------------------------------------------------------------//
  43. //得到是否自动识别GB、BIG5
  44. m_bRecGbBig5 =GetPrivateProfileInt( "输出" , "是否自动识别GB码与BIG5码" , 
  45. 1 , INI_FILE_NAME ) ;
  46. //得到是否自动识别HZ码
  47. m_bRecHz =GetPrivateProfileInt( "输出" , "是否自动识别HZ码" , 
  48. 1 , INI_FILE_NAME ) ;
  49. //得到输出汉字是简体还是繁体
  50. m_bIsJt =GetPrivateProfileInt( "输出" , 
  51. "简体汉字还是繁体汉字" , 1 , INI_FILE_NAME ) ;
  52. //得到缺省输出内码
  53. m_nOutputCode =GetPrivateProfileInt( "输出" , 
  54. "缺省输出内码" , 0 , INI_FILE_NAME ) ;  
  55. //得到是否以系统的内码为优先
  56. m_bSystemFirst =GetPrivateProfileInt( "输出" ,
  57. "是否以系统内码为先" , 1 , INI_FILE_NAME ) ;
  58. //得到当前系统的内码
  59. m_nSystemCode =GetPrivateProfileInt( "输出" ,
  60. "当前系统的内码" , 1 , INI_FILE_NAME ) ;
  61. //---------------------------------------------------------------------------------------------------------------//
  62. m_bWinOrBar =GetPrivateProfileInt( "指取翻译" , "详细解释还是简单解释" ,
  63. 1 , INI_FILE_NAME ) ;
  64. //得到是否进行指取翻译
  65. m_nFingerTranslate =GetPrivateProfileInt( "指取翻译" , "是否进行指取翻译" ,
  66. 1 , INI_FILE_NAME ) ;
  67. if( m_nFingerTranslate )
  68. m_nFingerTranslate =1 ;
  69. m_nFingerAid =GetPrivateProfileInt( "指取翻译" ,
  70. "是否需要辅助键" , 0 , INI_FILE_NAME ) ;
  71. if( m_nFingerAid )
  72. m_nFingerAid =1 ;
  73. //---------------------------------------------------------------------------------------------//
  74. m_bPrompt =GetPrivateProfileInt( "系统参数" , 
  75. "系统退出时是否提示" , 1 , INI_FILE_NAME ) ;
  76. m_bExitWin =GetPrivateProfileInt( "系统参数" ,
  77. "是否同时退出Windows" , 0 , INI_FILE_NAME ) ;
  78. //-------------------------------------------------------------------------------------------//
  79. m_bMenuCharFlag =0 ;
  80. //-------------------------------------------------------------------------------------------//
  81. //判断Windows版本
  82. //低字0为Win,1为95;高字0为西文,1为外挂,2为中文Win
  83. WORD wLow , wHigh ;
  84. if( HIBYTE(LOWORD( GetVersion() ))==95 )
  85. wLow =1 ;
  86. else
  87. wLow =0 ;
  88. wHigh =0 ; //缺省为西文
  89. char sProgramName[100] ;
  90. //得到Windows 所在路径
  91. if( !::GetWindowsDirectory( sProgramName , sizeof( sProgramName ) ) )
  92. {
  93. m_dwWinVersion =MAKELONG( wLow , wHigh ) ;
  94. return ;
  95. }
  96. strcat( sProgramName , "\winver.exe" ) ;
  97. BYTE   abData[512];
  98. DWORD  handle;
  99. DWORD  dwSize;
  100. LANGUAGE_PAGE *lpLang ;
  101. dwSize =::GetFileVersionInfoSize(sProgramName, &handle);
  102. ::GetFileVersionInfo(sProgramName, handle, dwSize, abData);
  103. ::VerQueryValue(abData, "\VarFileInfo\Translation", 
  104. (void FAR* FAR*)&lpLang, (UINT FAR*)&dwSize);
  105. if(!dwSize) 
  106. {
  107. m_dwWinVersion =MAKELONG( wLow , wHigh ) ;
  108. return ;
  109. }
  110. if( lpLang->wLanguage==0x0404 || //繁体字汉语
  111. lpLang->wLanguage==0x0411 || //日语
  112. lpLang->wLanguage==0x0412 || //朝鲜语
  113. lpLang->wLanguage==0x0804 ) //简体字汉语
  114. wHigh =2 ;
  115. m_dwWinVersion =MAKELONG( wLow , wHigh ) ;
  116. }
  117. CWinStatus::~CWinStatus( void )
  118. {
  119. char sBuff[10] ;
  120. wsprintf( sBuff , "%d" , m_nMainWinStatus ) ;
  121. WritePrivateProfileString( "窗口参数" , "浮动条状态" , sBuff , 
  122. INI_FILE_NAME ) ;
  123. wsprintf( sBuff , "%d" , m_bLine ) ;
  124. WritePrivateProfileString( "窗口参数" ,
  125. "退化显示" , sBuff , INI_FILE_NAME ) ;
  126. wsprintf( sBuff , "%d" , m_nInputWinStatus ) ;
  127. WritePrivateProfileString( "输入板参数" , "输入板状态" , sBuff , 
  128. INI_FILE_NAME ) ;
  129. //--------------------------------------------------------------------------------//
  130. wsprintf( sBuff , "%d" , m_nInputCode ) ;
  131. WritePrivateProfileString( "输入方法" , "输入内码" , sBuff , INI_FILE_NAME ) ;
  132. wsprintf( sBuff , "%d" , m_nInputMethod ) ;
  133. WritePrivateProfileString( "输入方法" , "当前输入法" , sBuff , INI_FILE_NAME ) ;
  134. //---------------------------------------------------------------------------------//
  135. wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[0] ) ;
  136. WritePrivateProfileString( "输入方法" ,
  137. "西文字符还是中文字符" , sBuff , INI_FILE_NAME ) ;
  138. wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[1] ) ;
  139. WritePrivateProfileString( "输入方法" ,
  140. "汉字后是否加空格" , sBuff , INI_FILE_NAME ) ;
  141. wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[2] ) ;
  142. WritePrivateProfileString( "输入方法" ,
  143. "半角字母还是全角字母" , sBuff , INI_FILE_NAME ) ;
  144. //----------------------------------------------------------------------------------//
  145. //存储参数到INI文件中
  146. wsprintf( sBuff , "%d" , m_bRecGbBig5 ) ;
  147. WritePrivateProfileString( "输出" , "是否自动识别GB码与BIG5码" ,
  148. sBuff , INI_FILE_NAME ) ;
  149. wsprintf( sBuff , "%d" , m_bRecHz ) ;
  150. WritePrivateProfileString( "输出" , "是否自动识别HZ码" ,
  151. sBuff , INI_FILE_NAME ) ;
  152. wsprintf( sBuff , "%d" , m_bIsJt ) ;
  153. WritePrivateProfileString( "输出" , "简体汉字还是繁体汉字" , 
  154. sBuff , INI_FILE_NAME ) ;
  155. wsprintf( sBuff , "%d" , m_nOutputCode ) ;
  156. WritePrivateProfileString( "输出" , "缺省输出内码" ,
  157. sBuff , INI_FILE_NAME ) ;
  158. wsprintf( sBuff , "%d" , m_bSystemFirst ) ;
  159. WritePrivateProfileString( "输出" , "是否以系统内码为先" ,
  160. sBuff , INI_FILE_NAME ) ;
  161. wsprintf( sBuff , "%d" , m_nSystemCode ) ;
  162. WritePrivateProfileString( "输出" , "当前系统的内码" ,
  163. sBuff , INI_FILE_NAME ) ; 
  164. //-----------------------------------------------------------------------------------------//
  165. wsprintf( sBuff , "%d" , m_bWinOrBar ) ;
  166. WritePrivateProfileString( "指取翻译" , "详细解释还是简单解释" ,
  167. sBuff , INI_FILE_NAME ) ;
  168. wsprintf( sBuff , "%d" , m_nFingerTranslate ) ;
  169. WritePrivateProfileString( "指取翻译" , "是否进行指取翻译" ,
  170. sBuff , INI_FILE_NAME ) ;
  171. wsprintf( sBuff , "%d" , m_nFingerAid ) ;
  172. WritePrivateProfileString( "指取翻译" ,
  173. "是否需要辅助键" , sBuff , INI_FILE_NAME ) ;
  174. //---------------------------------------------------------------------------------------------//
  175. wsprintf( sBuff , "%d" , m_bPrompt ) ;
  176. WritePrivateProfileString( "系统参数" , 
  177. "系统退出时是否提示" , sBuff , INI_FILE_NAME ) ;
  178. wsprintf( sBuff , "%d" , m_bExitWin ) ;
  179. WritePrivateProfileString( "系统参数" ,
  180. "是否同时退出Windows" , sBuff , INI_FILE_NAME ) ;
  181. }
  182. //-------------------------------------------------------------------//
  183. #ifdef __cplusplus
  184. extern "C" {
  185. #endif
  186. //主窗口状态对象的接口函数
  187. //设置主窗口句柄
  188. void __export FAR PASCAL SetMainWinHandle( HWND hwnd )
  189. {
  190. OWinStatus.m_hMainWnd =hwnd ;
  191. }
  192. //得到主窗口句柄
  193. HWND __export FAR PASCAL GetMainWinHandle( void )
  194. {
  195. return OWinStatus.m_hMainWnd ;
  196. }
  197. //设置主窗口状态
  198. void __export FAR PASCAL SetMainWinStatus( int nStatus )
  199. {
  200. OWinStatus.m_nMainWinStatus =nStatus ;
  201. }
  202. //得到主窗口状态
  203. int __export FAR PASCAL GetMainWinStatus( void )
  204. {
  205. return OWinStatus.m_nMainWinStatus ;
  206. }
  207. //显示或隐藏主窗口
  208. void __export FAR PASCAL SwitchMainWin( void )
  209. {
  210. if( !OWinStatus.m_hMainWnd ) //主窗口句柄为空
  211. return ;
  212. if( !OWinStatus.m_nMainWinStatus ) //当前为隐藏,显示之
  213. {
  214. SetMainWinStatus( 2 ) ; //状态设为正常显示
  215. ::SetWindowPos( OWinStatus.m_hMainWnd , HWND_TOPMOST ,
  216. 0 , 0 , 0 , 0 , SWP_SHOWWINDOW|
  217. SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE ) ;  
  218. if( GetLineFlag() ) //允许退化显示
  219. //设上退化时间器
  220. ::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER ,
  221. 1 , 0 ) ;
  222. }
  223. else //当前为显示,隐藏之
  224. {
  225. if( GetLineFlag() ) //允许退化显示
  226. ::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER ,
  227. 0 , 0 ) ;
  228. SetMainWinStatus( 0 ) ;
  229. ::ShowWindow( OWinStatus.m_hMainWnd , SW_HIDE ) ;
  230. }
  231. }
  232. //设置退化显示状态
  233. void __export FAR PASCAL SetLineFlag( BOOL b )
  234. {
  235. OWinStatus.m_bLine =b ;
  236. }
  237. //得到退化显示状态
  238. BOOL __export FAR PASCAL GetLineFlag( void )
  239. {
  240. return OWinStatus.m_bLine ;
  241. }
  242. //设置退化显示开关
  243. void __export FAR PASCAL SetLineSwitch( BOOL b )
  244. {
  245. OWinStatus.m_bLineSwitch =b ;
  246. }
  247. //得到退化显示开关
  248. BOOL __export FAR PASCAL GetLineSwitch( void )
  249. {
  250. return OWinStatus.m_bLineSwitch ;
  251. }
  252. //-------------------------------------------------//
  253. //输入板窗口状态的接口函数
  254. //设置输入板窗口句柄
  255. void __export FAR PASCAL SetInputBarHandle( HWND hwnd )
  256. {
  257. OWinStatus.m_hInputWnd =hwnd ;
  258. }
  259. //得到输入板窗口句柄
  260. HWND __export FAR PASCAL GetInputBarHandle( void )
  261. {
  262. return OWinStatus.m_hInputWnd ;
  263. }
  264. //设置输入板窗口状态
  265. void __export FAR PASCAL SetInputBarStatus( int nStatus )
  266. {
  267. OWinStatus.m_nInputWinStatus =nStatus ;
  268. if( nStatus==2 )
  269. OHotKeyParam.SetEnableFlag( 1 , 0 ) ;
  270. else
  271. OHotKeyParam.SetEnableFlag( 1 , 1 ) ;
  272. }
  273. //得到输入板窗口状态
  274. int __export FAR PASCAL GetInputBarStatus( void )
  275. {
  276. return OWinStatus.m_nInputWinStatus ;
  277. }
  278. //显示或隐藏输入板窗口
  279. void __export FAR PASCAL SwitchInputBar( void )
  280. {
  281. if( !OWinStatus.m_hInputWnd ) //输入板窗口句柄为空
  282. return ;
  283. if( OWinStatus.m_nInputWinStatus==0 ) //当前为隐藏,显示之
  284. {
  285. ::SetWindowPos( OWinStatus.m_hInputWnd , HWND_TOPMOST ,
  286. 0 , 0 , 0 , 0 , SWP_SHOWWINDOW|
  287. SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE ) ;  
  288. SetInputBarStatus( 1 ) ;
  289. }
  290. else if( OWinStatus.m_nInputWinStatus==1 ) //当前为显示,隐藏之
  291. {
  292. ::ShowWindow( OWinStatus.m_hInputWnd , SW_HIDE ) ;
  293. SetInputBarStatus( 0 ) ;
  294. }
  295. }
  296. //--------------------------------------------------------------------------------------------------//
  297. //输入内码和输入法
  298. //得到当前输入内码
  299. int __export FAR PASCAL GetInputCode( void )
  300. {
  301. return OWinStatus.m_nInputCode ;
  302. //设置当前输入内码
  303. void __export FAR PASCAL SetInputCode( int n )
  304. {
  305. OWinStatus.m_nInputCode =n ;
  306. }
  307. //得到当前输入法
  308. int __export FAR PASCAL GetInputMethod( void )
  309. {
  310. return OWinStatus.m_nInputMethod ;
  311. }
  312. //设置当前输入法
  313. void __export FAR PASCAL SetInputMethod( int n )
  314. {
  315. OWinStatus.m_nInputMethod =n ;
  316. }
  317. //----------------------------------------------------------------------------------------//
  318. //得到输入板上三个状态按钮的状态
  319. BOOL __export FAR PASCAL GetInputStatus123( int n )
  320. {
  321. if( n<1 || n>3 )
  322. return 0 ;
  323. return OWinStatus.m_bInputStatus123[n-1] ;
  324. }
  325. //切换输入板上三个状态按钮的状态
  326. void __export FAR PASCAL SetInputStatus123( int n )
  327. {
  328. if( n<1 || n>3 )
  329. return ;
  330. //切换
  331. if( OWinStatus.m_bInputStatus123[n-1] )
  332. OWinStatus.m_bInputStatus123[n-1] =0 ;
  333. else
  334. OWinStatus.m_bInputStatus123[n-1] =1 ;
  335. }
  336. //---------------------------------------------------------------------------------------------------//
  337. //得到是否自动识别GB、BIG5码
  338. BOOL __export FAR PASCAL GetRecGbBig5( void )
  339. {
  340. return OWinStatus.m_bRecGbBig5 ;
  341. }
  342. //切换是否自动识别GB、BIG5码
  343. void __export FAR PASCAL SwitchRecGbBig5( void )
  344. {
  345. if( OWinStatus.m_bRecGbBig5 ) //原来是自动识别的
  346. OWinStatus.m_bRecGbBig5 =0 ;
  347. else
  348. OWinStatus.m_bRecGbBig5 =1 ;
  349. }
  350. //得到是否自动识别HZ码
  351. BOOL __export FAR PASCAL GetRecHz( void )
  352. {
  353. return OWinStatus.m_bRecHz ;
  354. }
  355. //切换是否自动识别HZ码
  356. void __export FAR PASCAL SwitchRecHz( void )
  357. {
  358. if( OWinStatus.m_bRecHz ) //原来是自动识别的
  359. OWinStatus.m_bRecHz =0 ;
  360. else
  361. OWinStatus.m_bRecHz =1 ;
  362. }
  363. //得到输出简体还是繁体汉字
  364. BOOL __export FAR PASCAL IsJt( void )
  365. {
  366. return OWinStatus.m_bIsJt ;
  367. }
  368. //切换输出简体还繁体汉字
  369. void __export FAR PASCAL SwitchJtFt( void )
  370. {
  371. if( OWinStatus.m_bIsJt ) //原来是简体
  372. OWinStatus.m_bIsJt =0 ; //改为繁体
  373. else
  374. OWinStatus.m_bIsJt =1 ;
  375. }
  376. //得到缺省输出内码
  377. int __export FAR PASCAL GetOutputCode( void )
  378. {
  379. return OWinStatus.m_nOutputCode ;
  380. }
  381. //设置缺省输出内码
  382. void __export FAR PASCAL SetOutputCode( int n )
  383. {
  384. OWinStatus.m_nOutputCode =n ;
  385. }
  386. //得到是否以系统内码为优先
  387. BOOL __export FAR PASCAL GetSystemFirst( void )
  388. {
  389. return OWinStatus.m_bSystemFirst ;
  390. }
  391. //切换是否以系统内码为优先
  392. void __export FAR PASCAL SwitchSystemFirst( void )
  393. {
  394. if( OWinStatus.m_bSystemFirst )
  395. OWinStatus.m_bSystemFirst =0 ;
  396. else
  397. OWinStatus.m_bSystemFirst =1 ;
  398. }
  399. //得到系统内码
  400. int __export FAR PASCAL GetSystemCode( void )
  401. {
  402. return OWinStatus.m_nSystemCode ;
  403. }
  404. //设置系统内码
  405. void __export FAR PASCAL SetSystemCode( int n )
  406. {
  407. OWinStatus.m_nSystemCode =n ;
  408. }
  409. //-------------------------------------------------------------------------------------------------------//
  410. //关于指取翻译的一些状态参数
  411. //得到是详细解释还是简单解释
  412. BOOL __export FAR PASCAL GetWinOrBar( void )
  413. {
  414. return OWinStatus.m_bWinOrBar ;
  415. }
  416. //切换详细解释与简单解释
  417. void __export FAR PASCAL SetWinOrBar( BOOL b )
  418. {
  419. OWinStatus.m_bWinOrBar =b ;
  420. }
  421. //指取翻译动作控制码
  422. //0表示没有挂上
  423. //1表示已经挂上,但还不能读,写
  424. //2表示可以写
  425. //3表示可以读
  426. void __export FAR PASCAL SetFingerTranslate( int n )
  427. {
  428. OWinStatus.m_nFingerTranslate =n ;
  429. }
  430. //得到指取翻译控制码
  431. int __export FAR PASCAL GetFingerTranslate( void )
  432. {
  433. return OWinStatus.m_nFingerTranslate ;
  434. }
  435. //设置是否需要指取翻译辅助键
  436. void __export FAR PASCAL SetFingerAidedKeyFlag( int n )
  437. {
  438. OWinStatus.m_nFingerAid =n ;
  439. if( n==1 ) //需要
  440. {
  441. if( GetFingerTranslate() ) //指取翻译有效
  442. OHotKeyParam.m_bEnable[3] =1 ; //辅助键有效
  443. }
  444. else //不需要
  445. OHotKeyParam.m_bEnable[3] =0 ; //辅助键有效
  446. }
  447. //得到是否需要指取翻译辅助键
  448. int __export FAR PASCAL GetFingerAidedKeyFlag( void )
  449. {
  450. return OWinStatus.m_nFingerAid ;
  451. }
  452. //---------------------------------------------------------------------------------//
  453. //设置退出时是否提示
  454. void __export FAR PASCAL SetPrompt( BOOL b )
  455. {
  456. OWinStatus.m_bPrompt =b ;
  457. }
  458. //得到退出时是否提示
  459. BOOL __export FAR PASCAL GetPrompt( void )
  460. {
  461. return OWinStatus.m_bPrompt ;
  462. }
  463. //设置是否同时退出Windows
  464. void __export FAR PASCAL SetExitWin( BOOL b )
  465. {
  466. OWinStatus.m_bExitWin =b ;
  467. }
  468. //得到是否同时退出Windows
  469. BOOL __export FAR PASCAL GetExitWin( void )
  470. {
  471. return OWinStatus.m_bExitWin ;
  472. }
  473. //设置是否是按钮消失鼠标的,0不是,1是
  474. void __export FAR PASCAL SetMenuCharFlag( BOOL b )
  475. {
  476. OWinStatus.m_bMenuCharFlag =b ;
  477. }
  478. //得到是否是按钮消失鼠标的,0不是,1是
  479. BOOL __export FAR PASCAL GetMenuCharFlag( void )
  480. {
  481. return OWinStatus.m_bMenuCharFlag ;
  482. }
  483. //判断Windows版本
  484. //低字0为Win,1为95;高字0为西文,1为外挂,2为中文Win
  485. DWORD __export FAR PASCAL GetWindowsVersion( void )
  486. {
  487. return OWinStatus.m_dwWinVersion ;
  488. }
  489. #ifdef __cplusplus
  490. }
  491. #endif