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