You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
5.1 KiB
217 lines
5.1 KiB
//
|
|
// internat.h
|
|
//
|
|
|
|
#ifndef INTERNAT_H
|
|
#define INTERNAT_H
|
|
|
|
#include "private.h"
|
|
#include "commctrl.h"
|
|
#include "regsvr.h"
|
|
#include "inatlib.h"
|
|
#include "cregkey.h"
|
|
|
|
void UninitINAT();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// INTERNAT Icon APIs
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//
|
|
// For Keyboard Layout info. NT4
|
|
//
|
|
typedef struct
|
|
{
|
|
DWORD dwID; // numeric id
|
|
UINT iSpecialID; // i.e. 0xf001 for dvorak etc
|
|
WCHAR wszText[64];
|
|
|
|
} LAYOUT, *LPLAYOUT;
|
|
|
|
typedef struct
|
|
{
|
|
UINT idx ;
|
|
char chars[4];
|
|
} INATSYMBOL;
|
|
|
|
|
|
int GetLocaleInfoString(LCID lcid, LCTYPE lcType, char *psz, int cch);
|
|
ULONG GetLocaleInfoString(HKL hKL, WCHAR *pszRegText, int nSize);
|
|
int GetHKLDesctription(HKL hKL, WCHAR *pszDesc, int cchDesc, WCHAR *pszIMEFile, int cchIMEFile);
|
|
HICON InatCreateIcon(WORD langID );
|
|
HICON InatCreateIconBySize(WORD langID, int cxSmIcon, int cySmIcon, LOGFONT *plf);
|
|
HICON GetIconFromFile(int cx, int cy, WCHAR *lpszFileName, UINT uIconIndex);
|
|
HICON GetIconFromFileA(int cx, int cy, char *lpszFileName, UINT uIconIndex);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// MLNGINFO APIs
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
typedef struct
|
|
{
|
|
HKL hKL;
|
|
BOOL fInitDesc;
|
|
BOOL fInitIcon;
|
|
|
|
void SetDesc(WCHAR *psz)
|
|
{
|
|
StringCchCopyW(szDesc, ARRAYSIZE(szDesc), psz);
|
|
}
|
|
|
|
WCHAR *GetDesc()
|
|
{
|
|
if (!fInitDesc)
|
|
InitDesc();
|
|
|
|
return szDesc;
|
|
}
|
|
|
|
int GetIconIndex()
|
|
{
|
|
if (!fInitIcon)
|
|
InitIcon();
|
|
|
|
return nIconIndex;
|
|
}
|
|
|
|
void ClearIconIndex()
|
|
{
|
|
fInitIcon = FALSE;
|
|
nIconIndex = -1;
|
|
}
|
|
|
|
void InitDesc();
|
|
void InitIcon();
|
|
|
|
private:
|
|
int nIconIndex;
|
|
WCHAR szDesc[128];
|
|
} MLNGINFO;
|
|
|
|
HIMAGELIST GetMlngImageList();
|
|
BOOL GetMlngInfo(int n, MLNGINFO *pmlInfo);
|
|
int GetMlngInfoByhKL(HKL hKL, MLNGINFO *pmlInfo);
|
|
void ClearMlngIconIndex();
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// IconList APIs
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
BOOL EnsureIconImageList();
|
|
UINT InatAddIcon(HICON hIcon);
|
|
BOOL InatGetIconSize(int *pcx, int *pcy);
|
|
BOOL InatGetImageCount();
|
|
void InatRemoveAll();
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// HKLAPIs
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
HKL GetSystemDefaultHKL();
|
|
BOOL SetSystemDefaultHKL(HKL hKL);
|
|
UINT GetPreloadListForNT(DWORD *pdw, UINT uBufSize);
|
|
DWORD GetSubstitute(HKL hKL);
|
|
|
|
#ifdef LATER_TO_CHECK_DUMMYHKL
|
|
void RemoveFEDummyHKLFromPreloadReg(HKL hkl, BOOL fDefaultUser);
|
|
void RemoveFEDummyHKLs();
|
|
#endif LATER_TO_CHECK_DUMMYHKL
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CRegUIName
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CRegKeyMUI : public CMyRegKey
|
|
{
|
|
public:
|
|
LONG QueryValueCch(LPTSTR szValue, LPCTSTR lpszValueName, ULONG cchValue)
|
|
{
|
|
LONG lRes;
|
|
LPTSTR lpValue;
|
|
DWORD index;
|
|
WCHAR szTmpW[MAX_PATH];
|
|
|
|
lRes = CMyRegKey::QueryValueCch(szValue, lpszValueName, cchValue);
|
|
|
|
if (lRes != S_OK || szValue[0] != '@')
|
|
return lRes;
|
|
|
|
lpValue = szValue;
|
|
index = 0;
|
|
|
|
while (*lpValue != '\0' && index < cchValue)
|
|
{
|
|
if (*lpValue == ',')
|
|
{
|
|
lRes = SHLoadRegUIStringW(m_hKey, AtoW(lpszValueName), szTmpW, ARRAYSIZE(szTmpW));
|
|
StringCchCopy(szValue, cchValue, WtoA(szTmpW, ARRAYSIZE(szTmpW)));
|
|
break;
|
|
}
|
|
|
|
lpValue++;
|
|
index++;
|
|
}
|
|
|
|
return lRes;
|
|
}
|
|
|
|
LONG QueryValueCchW(WCHAR *szValue, const WCHAR *lpszValueName, ULONG cchValue)
|
|
{
|
|
LONG lRes;
|
|
LPWSTR lpValue;
|
|
DWORD index;
|
|
|
|
lRes = CMyRegKey::QueryValueCchW(szValue, lpszValueName, cchValue);
|
|
|
|
if (lRes != S_OK || szValue[0] != L'@')
|
|
return lRes;
|
|
|
|
lpValue = szValue;
|
|
index = 0;
|
|
|
|
while (*lpValue && index < cchValue)
|
|
{
|
|
if (*lpValue == L',')
|
|
{
|
|
lRes = SHLoadRegUIStringW(m_hKey, lpszValueName, szValue, cchValue);
|
|
break;
|
|
}
|
|
|
|
lpValue++;
|
|
index++;
|
|
}
|
|
|
|
return lRes;
|
|
}
|
|
|
|
LONG QueryMUIValueW(WCHAR *szValue, const WCHAR *lpszValueName, const WCHAR *lpszMUIName, ULONG cchValue)
|
|
{
|
|
LONG lRes;
|
|
|
|
lRes = SHLoadRegUIStringW(m_hKey, lpszMUIName, szValue, cchValue);
|
|
|
|
if (lRes == S_OK)
|
|
{
|
|
return lRes;
|
|
}
|
|
else
|
|
{
|
|
return CMyRegKey::QueryValueCchW(szValue, lpszValueName, cchValue);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
#endif // INTERNAT_H
|