NVDA Helper
In-process and lite high-speed utilities for NVDA
ime.cpp File Reference
#include <windows.h>
#include <wchar.h>
#include "nvdaHelperRemote.h"
#include <remote/nvdaControllerInternal.h>
#include "typedCharacter.h"
#include "tsf.h"
#include <common/log.h>
#include "ime.h"

Go to the source code of this file.

Classes

struct  LPINPUTCONTEXT2
 

Macros

#define GETLANG()
 
#define GETPRIMLANG()
 
#define GETSUBLANG()
 
#define LANG_CHS   MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
 
#define LANG_CHT   MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
 
#define MAKEIMEVERSION(major, minor)
 
#define IMEID_VER(dwId)
 
#define IMEID_LANG(dwId)
 
#define _CHT_HKL_DAYI   ( (DWORD_PTR)0xE0060404 )
 
#define _CHT_HKL_NEW_PHONETIC   ( (DWORD_PTR)0xE0080404 )
 
#define _CHT_HKL_NEW_CHANG_JIE   ( (DWORD_PTR)0xE0090404 )
 
#define _CHT_HKL_NEW_QUICK   ( (DWORD_PTR)0xE00A0404 )
 
#define _CHT_HKL_HK_CANTONESE   ( (DWORD_PTR)0xE00B0404 )
 
#define _CHT_IMEFILENAME   "TINTLGNT.IME"
 
#define _CHT_IMEFILENAME2   "CINTLGNT.IME"
 
#define _CHT_IMEFILENAME3   "MSTCIPHA.IME"
 
#define IMEID_CHT_VER42   ( LANG_CHT | MAKEIMEVERSION( 4, 2 ) )
 
#define IMEID_CHT_VER43   ( LANG_CHT | MAKEIMEVERSION( 4, 3 ) )
 
#define IMEID_CHT_VER44   ( LANG_CHT | MAKEIMEVERSION( 4, 4 ) )
 
#define IMEID_CHT_VER50   ( LANG_CHT | MAKEIMEVERSION( 5, 0 ) )
 
#define IMEID_CHT_VER51   ( LANG_CHT | MAKEIMEVERSION( 5, 1 ) )
 
#define IMEID_CHT_VER52   ( LANG_CHT | MAKEIMEVERSION( 5, 2 ) )
 
#define IMEID_CHT_VER60   ( LANG_CHT | MAKEIMEVERSION( 6, 0 ) )
 
#define IMEID_CHT_VER_VISTA   ( LANG_CHT | MAKEIMEVERSION( 7, 0 ) )
 
#define _CHS_HKL   ( (DWORD_PTR)0xE00E0804 )
 
#define _CHS_IMEFILENAME   "PINTLGNT.IME"
 
#define _CHS_IMEFILENAME2   "MSSCIPYA.IME"
 
#define IMEID_CHS_VER41   ( LANG_CHS | MAKEIMEVERSION( 4, 1 ) )
 
#define IMEID_CHS_VER42   ( LANG_CHS | MAKEIMEVERSION( 4, 2 ) )
 
#define IMEID_CHS_VER53   ( LANG_CHS | MAKEIMEVERSION( 5, 3 ) )
 

Typedefs

typedef UINT(WINAPI * GetReadingString_funcType) (HIMC, UINT, LPWSTR, PINT, BOOL *, PUINT)
 

Functions

static LPINPUTCONTEXT2 (WINAPI *immLockIMC)(HIMC)
 
static BOOL (WINAPI *immUnlockIMC)(HIMC) = NULL
 
static LPVOID (WINAPI *immLockIMCC)(HIMCC)
 
DWORD getIMEVersion (HKL kbd_layout, wchar_t *filename)
 
bool getTIPFilename (REFCLSID clsid, WCHAR *filename, DWORD len)
 
void handleOpenStatus (HWND hwnd)
 
void handleReadingStringUpdate (HWND hwnd)
 
void handleIMEConversionModeUpdate (HWND hwnd, bool report)
 
void handleCandidatesClosed (HWND hwnd)
 
static bool handleCandidates (HWND hwnd)
 
static WCHAR * getCompositionString (HIMC imc, DWORD index)
 
static bool handleComposition (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
static bool handleEndComposition (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
bool hasValidIMEContext (HWND hwnd)
 
static LRESULT handleIMEWindowMessage (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK IME_callWndProcHook (int code, WPARAM wParam, LPARAM lParam)
 
WCHAR * IME_getCompositionString ()
 
LRESULT CALLBACK IME_getMessageHook (int code, WPARAM wParam, LPARAM lParam)
 
void IME_inProcess_initialize ()
 
void IME_inProcess_terminate ()
 

Variables

HWND curIMEWindow =NULL
 
static HWND candidateIMEWindow =0
 
static BOOL lastOpenStatus =true
 
static HMODULE gImm32Module = NULL
 
static DWORD lastConversionModeFlags =0
 
UINT wm_candidateChange =0
 
UINT wm_handleIMEConversionModeUpdate =0
 

Macro Definition Documentation

◆ GETLANG

#define GETLANG ( )
Value:
LOWORD(g_hklCurrent)

◆ GETPRIMLANG

#define GETPRIMLANG ( )
Value:
((WORD)PRIMARYLANGID(GETLANG()))
#define GETLANG()
Definition ime.cpp:24

◆ GETSUBLANG

#define GETSUBLANG ( )
Value:
SUBLANGID(GETLANG())

◆ LANG_CHS

#define LANG_CHS   MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)

◆ LANG_CHT

#define LANG_CHT   MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)

◆ MAKEIMEVERSION

#define MAKEIMEVERSION ( major,
minor )
Value:
( (DWORD)( ( (BYTE)( major ) << 24 ) | ( (BYTE)( minor ) << 16 ) ) )

◆ IMEID_VER

#define IMEID_VER ( dwId)
Value:
( ( dwId ) & 0xffff0000 )

◆ IMEID_LANG

#define IMEID_LANG ( dwId)
Value:
( ( dwId ) & 0x0000ffff )

◆ _CHT_HKL_DAYI

#define _CHT_HKL_DAYI   ( (DWORD_PTR)0xE0060404 )

◆ _CHT_HKL_NEW_PHONETIC

#define _CHT_HKL_NEW_PHONETIC   ( (DWORD_PTR)0xE0080404 )

Referenced by getIMEVersion().

◆ _CHT_HKL_NEW_CHANG_JIE

#define _CHT_HKL_NEW_CHANG_JIE   ( (DWORD_PTR)0xE0090404 )

Referenced by getIMEVersion().

◆ _CHT_HKL_NEW_QUICK

#define _CHT_HKL_NEW_QUICK   ( (DWORD_PTR)0xE00A0404 )

Referenced by getIMEVersion().

◆ _CHT_HKL_HK_CANTONESE

#define _CHT_HKL_HK_CANTONESE   ( (DWORD_PTR)0xE00B0404 )

Referenced by getIMEVersion().

◆ _CHT_IMEFILENAME

#define _CHT_IMEFILENAME   "TINTLGNT.IME"

◆ _CHT_IMEFILENAME2

#define _CHT_IMEFILENAME2   "CINTLGNT.IME"

◆ _CHT_IMEFILENAME3

#define _CHT_IMEFILENAME3   "MSTCIPHA.IME"

◆ IMEID_CHT_VER42

#define IMEID_CHT_VER42   ( LANG_CHT | MAKEIMEVERSION( 4, 2 ) )

◆ IMEID_CHT_VER43

#define IMEID_CHT_VER43   ( LANG_CHT | MAKEIMEVERSION( 4, 3 ) )

◆ IMEID_CHT_VER44

#define IMEID_CHT_VER44   ( LANG_CHT | MAKEIMEVERSION( 4, 4 ) )

◆ IMEID_CHT_VER50

#define IMEID_CHT_VER50   ( LANG_CHT | MAKEIMEVERSION( 5, 0 ) )

◆ IMEID_CHT_VER51

#define IMEID_CHT_VER51   ( LANG_CHT | MAKEIMEVERSION( 5, 1 ) )

◆ IMEID_CHT_VER52

#define IMEID_CHT_VER52   ( LANG_CHT | MAKEIMEVERSION( 5, 2 ) )

◆ IMEID_CHT_VER60

#define IMEID_CHT_VER60   ( LANG_CHT | MAKEIMEVERSION( 6, 0 ) )

◆ IMEID_CHT_VER_VISTA

#define IMEID_CHT_VER_VISTA   ( LANG_CHT | MAKEIMEVERSION( 7, 0 ) )

◆ _CHS_HKL

#define _CHS_HKL   ( (DWORD_PTR)0xE00E0804 )

Referenced by getIMEVersion().

◆ _CHS_IMEFILENAME

#define _CHS_IMEFILENAME   "PINTLGNT.IME"

◆ _CHS_IMEFILENAME2

#define _CHS_IMEFILENAME2   "MSSCIPYA.IME"

◆ IMEID_CHS_VER41

#define IMEID_CHS_VER41   ( LANG_CHS | MAKEIMEVERSION( 4, 1 ) )

◆ IMEID_CHS_VER42

#define IMEID_CHS_VER42   ( LANG_CHS | MAKEIMEVERSION( 4, 2 ) )

◆ IMEID_CHS_VER53

#define IMEID_CHS_VER53   ( LANG_CHS | MAKEIMEVERSION( 5, 3 ) )

Typedef Documentation

◆ GetReadingString_funcType

typedef UINT(WINAPI * GetReadingString_funcType) (HIMC, UINT, LPWSTR, PINT, BOOL *, PUINT)

Function Documentation

◆ LPINPUTCONTEXT2()

static LPINPUTCONTEXT2 ( WINAPI * immLockIMC)
static

◆ BOOL()

◆ LPVOID()

◆ getIMEVersion()

DWORD getIMEVersion ( HKL kbd_layout,
wchar_t * filename )

◆ getTIPFilename()

bool getTIPFilename ( REFCLSID clsid,
WCHAR * filename,
DWORD len )

◆ handleOpenStatus()

void handleOpenStatus ( HWND hwnd)

◆ handleReadingStringUpdate()

◆ handleIMEConversionModeUpdate()

void handleIMEConversionModeUpdate ( HWND hwnd,
bool report )

◆ handleCandidatesClosed()

void handleCandidatesClosed ( HWND hwnd)
inline

◆ handleCandidates()

static bool handleCandidates ( HWND hwnd)
static

◆ getCompositionString()

static WCHAR * getCompositionString ( HIMC imc,
DWORD index )
static

◆ handleComposition()

static bool handleComposition ( HWND hwnd,
WPARAM wParam,
LPARAM lParam )
static

◆ handleEndComposition()

static bool handleEndComposition ( HWND hwnd,
WPARAM wParam,
LPARAM lParam )
static

◆ hasValidIMEContext()

bool hasValidIMEContext ( HWND hwnd)

References LPINPUTCONTEXT2().

Referenced by handleIMEWindowMessage().

◆ handleIMEWindowMessage()

◆ IME_callWndProcHook()

static LRESULT CALLBACK IME_callWndProcHook ( int code,
WPARAM wParam,
LPARAM lParam )
static

◆ IME_getCompositionString()

WCHAR * IME_getCompositionString ( )

◆ IME_getMessageHook()

◆ IME_inProcess_initialize()

◆ IME_inProcess_terminate()

void IME_inProcess_terminate ( )

Variable Documentation

◆ curIMEWindow

HWND curIMEWindow =NULL

◆ candidateIMEWindow

HWND candidateIMEWindow =0
static

◆ lastOpenStatus

BOOL lastOpenStatus =true
static

Referenced by handleOpenStatus().

◆ gImm32Module

HMODULE gImm32Module = NULL
static

◆ lastConversionModeFlags

DWORD lastConversionModeFlags =0
static

◆ wm_candidateChange

UINT wm_candidateChange =0

◆ wm_handleIMEConversionModeUpdate

UINT wm_handleIMEConversionModeUpdate =0