- Getting a localized layout names from input.dll

- Add some layouts to resources

svn path=/trunk/; revision=33228
This commit is contained in:
Dmitry Chapyshev 2008-05-02 06:41:59 +00:00
parent 1163b5af3c
commit aa249071fc
15 changed files with 118 additions and 29 deletions

View file

@ -72,7 +72,7 @@ AddNewLayout(HWND hwndDlg)
VOID
CreateKeyboardLayoutList(VOID)
{
HKEY hKey, hSubKey;
HKEY hKey;
PTSTR pstrLayoutID;
TCHAR szLayoutID[CCH_LAYOUT_ID + 1], KeyName[MAX_PATH];
DWORD dwIndex = 0;
@ -84,32 +84,22 @@ CreateKeyboardLayoutList(VOID)
while (RegEnumKeyEx(hKey, dwIndex, szLayoutID, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
wsprintf(KeyName, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLayoutID);
GetLayoutName(szLayoutID, KeyName);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, KeyName, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
INT iIndex = (INT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName);
pstrLayoutID = (PTSTR)HeapAlloc(hProcessHeap, 0, sizeof(szLayoutID));
lstrcpy(pstrLayoutID, szLayoutID);
SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)pstrLayoutID);
// FIXME!
if (_tcscmp(szLayoutID, _T("00000409")) == 0)
{
DWORD dwKeyNameSize = sizeof(KeyName);
if (RegQueryValueEx(hSubKey, _T("Layout Text"), NULL, NULL, (LPBYTE)KeyName, &dwKeyNameSize) == ERROR_SUCCESS)
{
INT iIndex = (INT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName);
pstrLayoutID = (PTSTR)HeapAlloc(hProcessHeap, 0, sizeof(szLayoutID));
lstrcpy(pstrLayoutID, szLayoutID);
SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)pstrLayoutID);
// FIXME!
if (_tcscmp(szLayoutID, _T("00000409")) == 0)
{
SendMessage(hLayoutList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0);
}
dwIndex++;
}
RegCloseKey(hSubKey);
SendMessage(hLayoutList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0);
}
dwIndex++;
dwSize = sizeof(szLayoutID) / sizeof(TCHAR);
}

View file

@ -38,7 +38,7 @@ InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc);
INT_PTR CALLBACK
SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
BOOL
GetLayoutName(LPCTSTR lcid, LPTSTR name);
GetLayoutName(LPCTSTR szLCID, LPTSTR szName);
VOID
UpdateLayoutsList(VOID);

View file

@ -223,4 +223,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Äõèâåõñêà ìàëòèéñêà"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Áúëãàðñêà ßÂÅÐÒÚ"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Áúëãàðñêà ×ØÅÐÒÚ"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -224,4 +224,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi (Schreibmaschine)"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -223,4 +223,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -222,5 +222,10 @@ BEGIN
IDS_DIVEHI_PHONETIC_LAYOUT, "Divehi Phonetic"
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS 5237-1978)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -228,4 +228,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Búlgaro Fonético (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Búlgaro Fonético (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -225,4 +225,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -223,4 +223,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -230,4 +230,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Malediwski (Maszynisty)"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bu³garski (Fonetyczny)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bu³garski (Fonetyczny, BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -223,4 +223,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Äèâèõàé ìàøèíîïèñü"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Áîëãàðñêàÿ ôîíåòè÷åñêàÿ (êëàññè÷åñêàÿ)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Áîëãàðñêàÿ ôîíåòè÷åñêàÿ (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Áîëãàğñêàÿ (BDS 5237-1978)"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -227,4 +227,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -232,4 +232,9 @@ BEGIN
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Ìàëüä³âñüêà (äðóêàðñüêà ìàøèíêà)"
IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Áîëãàðñüêà ôîíåòè÷íà (êëàñè÷íà)"
IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Áîëãàðñüêà ôîíåòè÷íà (BDS)"
IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
IDS_BURMESE_LAYOUT, "Burmese"
END

View file

@ -185,6 +185,11 @@
#define IDS_DIVEHI_TYPEWRITER_LAYOUT 5133
#define IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT 5134
#define IDS_BULGARIAN_PHONETIC_BDS_LAYOUT 5135
#define IDS_BULGARIAN_BDS_LAYOUT 5136
#define IDS_GERMAN_RISTOME_LAYOUT 5137
#define IDS_GERMAN_NEO_11_LAYOUT 5138
#define IDS_GERMAN_DE_ERGO_LAYOUT 5139
#define IDS_BURMESE_LAYOUT 5140
#endif /* __CPL_RESOURCE_H */

View file

@ -86,19 +86,58 @@ CreateLayoutIcon(LPTSTR szInd)
}
BOOL
GetLayoutName(LPCTSTR lcid, LPTSTR name)
GetLayoutName(LPCTSTR szLCID, LPTSTR szName)
{
HKEY hKey;
DWORD dwBufLen;
TCHAR szBuf[MAX_PATH];
TCHAR szBuf[MAX_PATH], szDispName[MAX_PATH], szIndex[MAX_PATH], szPath[MAX_PATH];
HANDLE hLib;
int i, j, k;
wsprintf(szBuf, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), lcid);
wsprintf(szBuf, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)szBuf, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
dwBufLen = sizeof(szBuf);
if (RegQueryValueEx(hKey, _T("Layout Text"), NULL, NULL, (LPBYTE)name, &dwBufLen) == ERROR_SUCCESS)
if (RegQueryValueEx(hKey, _T("Layout Display Name"), NULL, NULL, (LPBYTE)szDispName, &dwBufLen) == ERROR_SUCCESS)
{
if (szDispName[0] == '@')
{
for (i = 0; i < _tcslen(szDispName); i++)
{
if ((szDispName[i] == ',') && (szDispName[i + 1] == '-'))
{
for (j = i + 2, k = 0; j < _tcslen(szDispName)+1; j++, k++)
{
szIndex[k] = szDispName[j];
}
szDispName[i - 1] = '\0';
break;
}
else szDispName[i] = szDispName[i + 1];
}
if (ExpandEnvironmentStrings(szDispName, szPath, MAX_PATH))
{
hLib = LoadLibrary(szPath);
if (hLib)
{
if (LoadString(hLib, _ttoi(szIndex), szPath, sizeof(szPath) / sizeof(TCHAR)) != 0)
{
_tcscpy(szName, szPath);
RegCloseKey(hKey);
return TRUE;
}
FreeLibrary(hLib);
}
}
}
}
dwBufLen = sizeof(szBuf);
if (RegQueryValueEx(hKey, _T("Layout Text"), NULL, NULL, (LPBYTE)szName, &dwBufLen) == ERROR_SUCCESS)
{
RegCloseKey(hKey);
return TRUE;