www.pudn.com > 智能内码识别,支持屏幕取词翻译的程序.zip > STATUS.CPP
//状态 #include "stdafx.h" #include#include "resource.h" #include "cspublic.h" #include "systemse.h" #include "status.h" #include "hooks.h" extern CHotKeyParam OHotKeyParam ; //热键参数对象 CWinStatus OWinStatus ; //主窗口状态对象 CWinStatus::CWinStatus( void ) { m_hMainWnd =NULL ; //得到主窗口状态 m_nMainWinStatus =GetPrivateProfileInt( "窗口参数" , "浮动条状态" , 2 , INI_FILE_NAME ) ; m_bLine =GetPrivateProfileInt( "窗口参数" , "退化显示" , 1 , INI_FILE_NAME ) ; m_bLineSwitch =1 ; //-----------------------------------------------------------------------------------// m_hInputWnd =NULL ; //得到输入板窗口状态 m_nInputWinStatus =GetPrivateProfileInt( "输入板参数" , "输入板状态" , 1 , INI_FILE_NAME ) ; //-----------------------------------------------------------------------------------------------// //得到输入内码 m_nInputCode =GetPrivateProfileInt( "输入方法" , "输入内码" , 0 , INI_FILE_NAME ) ; //得到当前输入法 m_nInputMethod =GetPrivateProfileInt( "输入方法" , "当前输入法" , 0 , INI_FILE_NAME ) ; //----------------------------------------------------------------------------------------------// //得到是西文字符还是中文字符,缺省为西文字符 m_bInputStatus123[0] =GetPrivateProfileInt( "输入方法" , "西文字符还是中文字符" , 1 , INI_FILE_NAME ) ; //得到输入汉字后是否自动加空格,缺省为不加 m_bInputStatus123[1] =GetPrivateProfileInt( "输入方法" , "汉字后是否加空格" , 1 , INI_FILE_NAME ) ; //得到是半角字母还是全角字母,缺省为半角字母 m_bInputStatus123[2] =GetPrivateProfileInt( "输入方法" , "半角字母还是全角字母" , 1 , INI_FILE_NAME ) ; //-------------------------------------------------------------------------------------------// //得到是否自动识别GB、BIG5 m_bRecGbBig5 =GetPrivateProfileInt( "输出" , "是否自动识别GB码与BIG5码" , 1 , INI_FILE_NAME ) ; //得到是否自动识别HZ码 m_bRecHz =GetPrivateProfileInt( "输出" , "是否自动识别HZ码" , 1 , INI_FILE_NAME ) ; //得到输出汉字是简体还是繁体 m_bIsJt =GetPrivateProfileInt( "输出" , "简体汉字还是繁体汉字" , 1 , INI_FILE_NAME ) ; //得到缺省输出内码 m_nOutputCode =GetPrivateProfileInt( "输出" , "缺省输出内码" , 0 , INI_FILE_NAME ) ; //得到是否以系统的内码为优先 m_bSystemFirst =GetPrivateProfileInt( "输出" , "是否以系统内码为先" , 1 , INI_FILE_NAME ) ; //得到当前系统的内码 m_nSystemCode =GetPrivateProfileInt( "输出" , "当前系统的内码" , 1 , INI_FILE_NAME ) ; //---------------------------------------------------------------------------------------------------------------// m_bWinOrBar =GetPrivateProfileInt( "指取翻译" , "详细解释还是简单解释" , 1 , INI_FILE_NAME ) ; //得到是否进行指取翻译 m_nFingerTranslate =GetPrivateProfileInt( "指取翻译" , "是否进行指取翻译" , 1 , INI_FILE_NAME ) ; if( m_nFingerTranslate ) m_nFingerTranslate =1 ; m_nFingerAid =GetPrivateProfileInt( "指取翻译" , "是否需要辅助键" , 0 , INI_FILE_NAME ) ; if( m_nFingerAid ) m_nFingerAid =1 ; //---------------------------------------------------------------------------------------------// m_bPrompt =GetPrivateProfileInt( "系统参数" , "系统退出时是否提示" , 1 , INI_FILE_NAME ) ; m_bExitWin =GetPrivateProfileInt( "系统参数" , "是否同时退出Windows" , 0 , INI_FILE_NAME ) ; //-------------------------------------------------------------------------------------------// m_bMenuCharFlag =0 ; //-------------------------------------------------------------------------------------------// //判断Windows版本 //低字0为Win,1为95;高字0为西文,1为外挂,2为中文Win WORD wLow , wHigh ; if( HIBYTE(LOWORD( GetVersion() ))==95 ) wLow =1 ; else wLow =0 ; wHigh =0 ; //缺省为西文 char sProgramName[100] ; //得到Windows 所在路径 if( !::GetWindowsDirectory( sProgramName , sizeof( sProgramName ) ) ) { m_dwWinVersion =MAKELONG( wLow , wHigh ) ; return ; } strcat( sProgramName , "\\winver.exe" ) ; BYTE abData[512]; DWORD handle; DWORD dwSize; LANGUAGE_PAGE *lpLang ; dwSize =::GetFileVersionInfoSize(sProgramName, &handle); ::GetFileVersionInfo(sProgramName, handle, dwSize, abData); ::VerQueryValue(abData, "\\VarFileInfo\\Translation", (void FAR* FAR*)&lpLang, (UINT FAR*)&dwSize); if(!dwSize) { m_dwWinVersion =MAKELONG( wLow , wHigh ) ; return ; } if( lpLang->wLanguage==0x0404 || //繁体字汉语 lpLang->wLanguage==0x0411 || //日语 lpLang->wLanguage==0x0412 || //朝鲜语 lpLang->wLanguage==0x0804 ) //简体字汉语 wHigh =2 ; m_dwWinVersion =MAKELONG( wLow , wHigh ) ; } CWinStatus::~CWinStatus( void ) { char sBuff[10] ; wsprintf( sBuff , "%d" , m_nMainWinStatus ) ; WritePrivateProfileString( "窗口参数" , "浮动条状态" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_bLine ) ; WritePrivateProfileString( "窗口参数" , "退化显示" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nInputWinStatus ) ; WritePrivateProfileString( "输入板参数" , "输入板状态" , sBuff , INI_FILE_NAME ) ; //--------------------------------------------------------------------------------// wsprintf( sBuff , "%d" , m_nInputCode ) ; WritePrivateProfileString( "输入方法" , "输入内码" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nInputMethod ) ; WritePrivateProfileString( "输入方法" , "当前输入法" , sBuff , INI_FILE_NAME ) ; //---------------------------------------------------------------------------------// wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[0] ) ; WritePrivateProfileString( "输入方法" , "西文字符还是中文字符" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[1] ) ; WritePrivateProfileString( "输入方法" , "汉字后是否加空格" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , OWinStatus.m_bInputStatus123[2] ) ; WritePrivateProfileString( "输入方法" , "半角字母还是全角字母" , sBuff , INI_FILE_NAME ) ; //----------------------------------------------------------------------------------// //存储参数到INI文件中 wsprintf( sBuff , "%d" , m_bRecGbBig5 ) ; WritePrivateProfileString( "输出" , "是否自动识别GB码与BIG5码" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_bRecHz ) ; WritePrivateProfileString( "输出" , "是否自动识别HZ码" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_bIsJt ) ; WritePrivateProfileString( "输出" , "简体汉字还是繁体汉字" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nOutputCode ) ; WritePrivateProfileString( "输出" , "缺省输出内码" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_bSystemFirst ) ; WritePrivateProfileString( "输出" , "是否以系统内码为先" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nSystemCode ) ; WritePrivateProfileString( "输出" , "当前系统的内码" , sBuff , INI_FILE_NAME ) ; //-----------------------------------------------------------------------------------------// wsprintf( sBuff , "%d" , m_bWinOrBar ) ; WritePrivateProfileString( "指取翻译" , "详细解释还是简单解释" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nFingerTranslate ) ; WritePrivateProfileString( "指取翻译" , "是否进行指取翻译" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_nFingerAid ) ; WritePrivateProfileString( "指取翻译" , "是否需要辅助键" , sBuff , INI_FILE_NAME ) ; //---------------------------------------------------------------------------------------------// wsprintf( sBuff , "%d" , m_bPrompt ) ; WritePrivateProfileString( "系统参数" , "系统退出时是否提示" , sBuff , INI_FILE_NAME ) ; wsprintf( sBuff , "%d" , m_bExitWin ) ; WritePrivateProfileString( "系统参数" , "是否同时退出Windows" , sBuff , INI_FILE_NAME ) ; } //-------------------------------------------------------------------// #ifdef __cplusplus extern "C" { #endif //主窗口状态对象的接口函数 //设置主窗口句柄 void __export FAR PASCAL SetMainWinHandle( HWND hwnd ) { OWinStatus.m_hMainWnd =hwnd ; } //得到主窗口句柄 HWND __export FAR PASCAL GetMainWinHandle( void ) { return OWinStatus.m_hMainWnd ; } //设置主窗口状态 void __export FAR PASCAL SetMainWinStatus( int nStatus ) { OWinStatus.m_nMainWinStatus =nStatus ; } //得到主窗口状态 int __export FAR PASCAL GetMainWinStatus( void ) { return OWinStatus.m_nMainWinStatus ; } //显示或隐藏主窗口 void __export FAR PASCAL SwitchMainWin( void ) { if( !OWinStatus.m_hMainWnd ) //主窗口句柄为空 return ; if( !OWinStatus.m_nMainWinStatus ) //当前为隐藏,显示之 { SetMainWinStatus( 2 ) ; //状态设为正常显示 ::SetWindowPos( OWinStatus.m_hMainWnd , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_SHOWWINDOW| SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE ) ; if( GetLineFlag() ) //允许退化显示 //设上退化时间器 ::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER , 1 , 0 ) ; } else //当前为显示,隐藏之 { if( GetLineFlag() ) //允许退化显示 ::SendMessage( GetMainWinHandle() , WM_USER_SET_TIMER , 0 , 0 ) ; SetMainWinStatus( 0 ) ; ::ShowWindow( OWinStatus.m_hMainWnd , SW_HIDE ) ; } } //设置退化显示状态 void __export FAR PASCAL SetLineFlag( BOOL b ) { OWinStatus.m_bLine =b ; } //得到退化显示状态 BOOL __export FAR PASCAL GetLineFlag( void ) { return OWinStatus.m_bLine ; } //设置退化显示开关 void __export FAR PASCAL SetLineSwitch( BOOL b ) { OWinStatus.m_bLineSwitch =b ; } //得到退化显示开关 BOOL __export FAR PASCAL GetLineSwitch( void ) { return OWinStatus.m_bLineSwitch ; } //-------------------------------------------------// //输入板窗口状态的接口函数 //设置输入板窗口句柄 void __export FAR PASCAL SetInputBarHandle( HWND hwnd ) { OWinStatus.m_hInputWnd =hwnd ; } //得到输入板窗口句柄 HWND __export FAR PASCAL GetInputBarHandle( void ) { return OWinStatus.m_hInputWnd ; } //设置输入板窗口状态 void __export FAR PASCAL SetInputBarStatus( int nStatus ) { OWinStatus.m_nInputWinStatus =nStatus ; if( nStatus==2 ) OHotKeyParam.SetEnableFlag( 1 , 0 ) ; else OHotKeyParam.SetEnableFlag( 1 , 1 ) ; } //得到输入板窗口状态 int __export FAR PASCAL GetInputBarStatus( void ) { return OWinStatus.m_nInputWinStatus ; } //显示或隐藏输入板窗口 void __export FAR PASCAL SwitchInputBar( void ) { if( !OWinStatus.m_hInputWnd ) //输入板窗口句柄为空 return ; if( OWinStatus.m_nInputWinStatus==0 ) //当前为隐藏,显示之 { ::SetWindowPos( OWinStatus.m_hInputWnd , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_SHOWWINDOW| SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE ) ; SetInputBarStatus( 1 ) ; } else if( OWinStatus.m_nInputWinStatus==1 ) //当前为显示,隐藏之 { ::ShowWindow( OWinStatus.m_hInputWnd , SW_HIDE ) ; SetInputBarStatus( 0 ) ; } } //--------------------------------------------------------------------------------------------------// //输入内码和输入法 //得到当前输入内码 int __export FAR PASCAL GetInputCode( void ) { return OWinStatus.m_nInputCode ; } //设置当前输入内码 void __export FAR PASCAL SetInputCode( int n ) { OWinStatus.m_nInputCode =n ; } //得到当前输入法 int __export FAR PASCAL GetInputMethod( void ) { return OWinStatus.m_nInputMethod ; } //设置当前输入法 void __export FAR PASCAL SetInputMethod( int n ) { OWinStatus.m_nInputMethod =n ; } //----------------------------------------------------------------------------------------// //得到输入板上三个状态按钮的状态 BOOL __export FAR PASCAL GetInputStatus123( int n ) { if( n<1 || n>3 ) return 0 ; return OWinStatus.m_bInputStatus123[n-1] ; } //切换输入板上三个状态按钮的状态 void __export FAR PASCAL SetInputStatus123( int n ) { if( n<1 || n>3 ) return ; //切换 if( OWinStatus.m_bInputStatus123[n-1] ) OWinStatus.m_bInputStatus123[n-1] =0 ; else OWinStatus.m_bInputStatus123[n-1] =1 ; } //---------------------------------------------------------------------------------------------------// //得到是否自动识别GB、BIG5码 BOOL __export FAR PASCAL GetRecGbBig5( void ) { return OWinStatus.m_bRecGbBig5 ; } //切换是否自动识别GB、BIG5码 void __export FAR PASCAL SwitchRecGbBig5( void ) { if( OWinStatus.m_bRecGbBig5 ) //原来是自动识别的 OWinStatus.m_bRecGbBig5 =0 ; else OWinStatus.m_bRecGbBig5 =1 ; } //得到是否自动识别HZ码 BOOL __export FAR PASCAL GetRecHz( void ) { return OWinStatus.m_bRecHz ; } //切换是否自动识别HZ码 void __export FAR PASCAL SwitchRecHz( void ) { if( OWinStatus.m_bRecHz ) //原来是自动识别的 OWinStatus.m_bRecHz =0 ; else OWinStatus.m_bRecHz =1 ; } //得到输出简体还是繁体汉字 BOOL __export FAR PASCAL IsJt( void ) { return OWinStatus.m_bIsJt ; } //切换输出简体还繁体汉字 void __export FAR PASCAL SwitchJtFt( void ) { if( OWinStatus.m_bIsJt ) //原来是简体 OWinStatus.m_bIsJt =0 ; //改为繁体 else OWinStatus.m_bIsJt =1 ; } //得到缺省输出内码 int __export FAR PASCAL GetOutputCode( void ) { return OWinStatus.m_nOutputCode ; } //设置缺省输出内码 void __export FAR PASCAL SetOutputCode( int n ) { OWinStatus.m_nOutputCode =n ; } //得到是否以系统内码为优先 BOOL __export FAR PASCAL GetSystemFirst( void ) { return OWinStatus.m_bSystemFirst ; } //切换是否以系统内码为优先 void __export FAR PASCAL SwitchSystemFirst( void ) { if( OWinStatus.m_bSystemFirst ) OWinStatus.m_bSystemFirst =0 ; else OWinStatus.m_bSystemFirst =1 ; } //得到系统内码 int __export FAR PASCAL GetSystemCode( void ) { return OWinStatus.m_nSystemCode ; } //设置系统内码 void __export FAR PASCAL SetSystemCode( int n ) { OWinStatus.m_nSystemCode =n ; } //-------------------------------------------------------------------------------------------------------// //关于指取翻译的一些状态参数 //得到是详细解释还是简单解释 BOOL __export FAR PASCAL GetWinOrBar( void ) { return OWinStatus.m_bWinOrBar ; } //切换详细解释与简单解释 void __export FAR PASCAL SetWinOrBar( BOOL b ) { OWinStatus.m_bWinOrBar =b ; } //指取翻译动作控制码 //0表示没有挂上 //1表示已经挂上,但还不能读,写 //2表示可以写 //3表示可以读 void __export FAR PASCAL SetFingerTranslate( int n ) { OWinStatus.m_nFingerTranslate =n ; } //得到指取翻译控制码 int __export FAR PASCAL GetFingerTranslate( void ) { return OWinStatus.m_nFingerTranslate ; } //设置是否需要指取翻译辅助键 void __export FAR PASCAL SetFingerAidedKeyFlag( int n ) { OWinStatus.m_nFingerAid =n ; if( n==1 ) //需要 { if( GetFingerTranslate() ) //指取翻译有效 OHotKeyParam.m_bEnable[3] =1 ; //辅助键有效 } else //不需要 OHotKeyParam.m_bEnable[3] =0 ; //辅助键有效 } //得到是否需要指取翻译辅助键 int __export FAR PASCAL GetFingerAidedKeyFlag( void ) { return OWinStatus.m_nFingerAid ; } //---------------------------------------------------------------------------------// //设置退出时是否提示 void __export FAR PASCAL SetPrompt( BOOL b ) { OWinStatus.m_bPrompt =b ; } //得到退出时是否提示 BOOL __export FAR PASCAL GetPrompt( void ) { return OWinStatus.m_bPrompt ; } //设置是否同时退出Windows void __export FAR PASCAL SetExitWin( BOOL b ) { OWinStatus.m_bExitWin =b ; } //得到是否同时退出Windows BOOL __export FAR PASCAL GetExitWin( void ) { return OWinStatus.m_bExitWin ; } //设置是否是按钮消失鼠标的,0不是,1是 void __export FAR PASCAL SetMenuCharFlag( BOOL b ) { OWinStatus.m_bMenuCharFlag =b ; } //得到是否是按钮消失鼠标的,0不是,1是 BOOL __export FAR PASCAL GetMenuCharFlag( void ) { return OWinStatus.m_bMenuCharFlag ; } //判断Windows版本 //低字0为Win,1为95;高字0为西文,1为外挂,2为中文Win DWORD __export FAR PASCAL GetWindowsVersion( void ) { return OWinStatus.m_dwWinVersion ; } #ifdef __cplusplus } #endif