⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inputlanguage.cpp

📁 利用注册表键值调用输入法
💻 CPP
字号:
// InputLanguage.cpp: implementation of the CInputLanguage class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "eyes.h"
#include "InputLanguage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CInputLanguage::CInputLanguage()
{
 m_pILHead = NULL;
 LoadInputLanguage();
}

CInputLanguage::~CInputLanguage()
{
Clear();
}


BOOL CInputLanguage::LoadInputLanguage()
{
 HKEY hKey,hKey1;
 DWORD cp=16;
 char lp[15];
 CString szID;
 CString szKeyName,szKeyName1;
 szKeyName = "Keyboard Layout\\Preload";
 szKeyName1 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\";

 int i=1;
 szID.Format("%d",i);
 DWORD lpT=REG_SZ;
 if(::RegOpenKey(HKEY_CURRENT_USER,szKeyName,&hKey)==ERROR_SUCCESS )
 { 
while( ::RegQueryValueEx(hKey,szID,NULL,&lpT,(LPBYTE)lp,&cp) == ERROR_SUCCESS )
 {
 CString szTempName;
 szTempName = szKeyName1 + (LPCTSTR)(LPTSTR)lp;
 if(RegOpenKey(HKEY_LOCAL_MACHINE,szTempName,&hKey1)==ERROR_SUCCESS )
 {
 char lpD[100];
 DWORD lpS=100; //DataSize
 if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lpD,&lpS)==ERROR_SUCCESS)
 {
 IL* p1,*p2;
 p1 = m_pILHead;
 p2 = new(IL);
 strcpy(p2->ilID,lp);
 strcpy(p2->szName,lpD);
 p2->pNext = NULL;
 if( p1 )
 {
 while( p1->pNext ){ p1 = p1->pNext ; }
 p1->pNext = p2;
 }
 else
 {
 m_pILHead = p2;
 }
 }
 }
 ::RegCloseKey(hKey1);
 i++;
 szID.Format("%d",i); 
 } 
 }

 ::RegCloseKey(hKey);
 return (m_pILHead != NULL );
}

BOOL CInputLanguage::SelectInputLanguage(IL *pIL)

{
 if( !pIL ) return FALSE;
 HKL hkl;
 hkl=LoadKeyboardLayout(pIL->ilID,KLF_ACTIVATE);//装载输入法
 if(hkl==NULL) return FALSE;
 else{
 ActivateKeyboardLayout(hkl,KLF_SETFORPROCESS);//激活输入法
 }
 return TRUE;
}

//消除链表内存。

void CInputLanguage::Clear()

{
 IL* p1,*p2;
 p1 = m_pILHead;
 while( p1 )
 {
 p2 = p1;
 p1 = p1->pNext;
 delete(p2);
 }
 m_pILHead = NULL;
}


//获得输入法信息链表头结点指针。

IL* CInputLanguage::GetInputLanguageList()

{
 return m_pILHead;
} 


IL* CInputLanguage::FindInput()

{
	CString str;
 IL* p1,*p2;
 p1 = m_pILHead;
 str = p1->szName;
 while( str.Find("微软拼音")==-1 )
 {
 p2 = p1;
 p1 = p1->pNext;
 str.Empty();
 str=p1->szName;
 }
// if(p1) //MessageBox("没发现微软拼音!");
return p1;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -