mirror of
https://github.com/reactos/reactos.git
synced 2024-07-19 10:56:09 +00:00
- Implement "Add keyboard layout" dialog
- Other small changes svn path=/trunk/; revision=33048
This commit is contained in:
parent
8b2204b25c
commit
0a8d3f23bc
|
@ -4,6 +4,7 @@
|
||||||
* FILE: dll/win32/input/add.c
|
* FILE: dll/win32/input/add.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Colin Finck
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 06-09-2007 Created
|
* 06-09-2007 Created
|
||||||
*/
|
*/
|
||||||
|
@ -38,73 +39,77 @@ SelectLayoutByLang(VOID)
|
||||||
static VOID
|
static VOID
|
||||||
AddNewLayout(HWND hwndDlg)
|
AddNewLayout(HWND hwndDlg)
|
||||||
{
|
{
|
||||||
TCHAR Lang[MAX_PATH], LangID[MAX_PATH], LayoutID[MAX_PATH];
|
TCHAR NewLayout[3];
|
||||||
INT iLang, iLayout;
|
INT iLayout;
|
||||||
LCID Lcid;
|
HKEY hKey;
|
||||||
|
DWORD cValues;
|
||||||
|
PTSTR pts;
|
||||||
|
|
||||||
iLang = SendMessage(hLangList, CB_GETCURSEL, 0, 0);
|
iLayout = SendMessage(hLayoutList, CB_GETCURSEL, 0, 0);
|
||||||
iLayout = SendMessage(hLayoutList, CB_GETCURSEL, 0, 0);
|
if (iLayout == CB_ERR) return;
|
||||||
|
|
||||||
if ((iLang == CB_ERR) || (iLayout == CB_ERR)) return;
|
if (RegOpenKey(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"), &hKey) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &cValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
_stprintf(NewLayout, _T("%d"), cValues + 1);
|
||||||
|
|
||||||
Lcid = (LCID) SendMessage(hLangList, CB_GETITEMDATA, iLang, 0);
|
pts = (PTSTR) SendMessage(hLayoutList, CB_GETITEMDATA, iLayout, 0);
|
||||||
GetLocaleInfo(MAKELCID(Lcid, SORT_DEFAULT), LOCALE_ILANGUAGE, (WORD*)Lang, sizeof(Lang));
|
|
||||||
_stprintf(LangID, _T("0000%s"), Lang);
|
|
||||||
|
|
||||||
_tcscpy(LayoutID, (LPTSTR)SendMessage(hLayoutList, CB_GETITEMDATA, iLayout, 0));
|
if (RegSetValueEx(hKey,
|
||||||
|
NewLayout,
|
||||||
if (_tcscmp(LangID, LayoutID) == 0)
|
0,
|
||||||
{
|
REG_SZ,
|
||||||
MessageBox(0, L"", L"", MB_OK);
|
(LPBYTE)pts,
|
||||||
HKEY hKey;
|
(DWORD)(_tcslen(pts)*sizeof(PTSTR))) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"), 0, KEY_WRITE, &hKey))
|
UpdateLayoutsList();
|
||||||
{
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
CreateKeyboardLayoutList(VOID)
|
CreateKeyboardLayoutList(VOID)
|
||||||
{
|
{
|
||||||
HKEY hKey, hSubKey;
|
HKEY hKey, hSubKey;
|
||||||
TCHAR szBuf[MAX_PATH], KeyName[MAX_PATH];
|
PTSTR pstrBuf;
|
||||||
|
TCHAR szBuf[CCH_LAYOUT_ID + 1], KeyName[MAX_PATH];
|
||||||
LONG Ret;
|
LONG Ret;
|
||||||
DWORD dwIndex = 0;
|
DWORD dwIndex = 0;
|
||||||
|
|
||||||
if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts"), &hKey) == ERROR_SUCCESS)
|
if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts"), &hKey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
Ret = RegEnumKey(hKey, dwIndex, szBuf, sizeof(szBuf) / sizeof(TCHAR));
|
Ret = RegEnumKey(hKey, dwIndex, szBuf, sizeof(szBuf) / sizeof(TCHAR));
|
||||||
if (Ret == ERROR_SUCCESS)
|
|
||||||
|
while (Ret == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
while (Ret == ERROR_SUCCESS)
|
_stprintf(KeyName, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szBuf);
|
||||||
|
|
||||||
|
if (RegOpenKey(HKEY_LOCAL_MACHINE, KeyName, &hSubKey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
_stprintf(KeyName, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szBuf);
|
DWORD Length = MAX_PATH;
|
||||||
if (RegOpenKey(HKEY_LOCAL_MACHINE, KeyName, &hSubKey) == ERROR_SUCCESS)
|
|
||||||
|
if (RegQueryValueEx(hSubKey, _T("Layout Text"), NULL, NULL, (LPBYTE)KeyName, &Length) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
DWORD Length = MAX_PATH;
|
INT iIndex = (INT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName);
|
||||||
|
|
||||||
if (RegQueryValueEx(hSubKey, _T("Layout Text"), NULL, NULL, (LPBYTE)KeyName, &Length) == ERROR_SUCCESS)
|
pstrBuf = (PTSTR)HeapAlloc(hProcessHeap, 0, (CCH_LAYOUT_ID + 1) * sizeof(TCHAR));
|
||||||
|
_tcscpy(pstrBuf, szBuf);
|
||||||
|
SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)pstrBuf);
|
||||||
|
|
||||||
|
// FIXME!
|
||||||
|
if (_tcscmp(szBuf, _T("00000409")) == 0)
|
||||||
{
|
{
|
||||||
UINT iIndex;
|
SendMessage(hLayoutList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0);
|
||||||
iIndex = (UINT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName);
|
|
||||||
|
|
||||||
SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)szBuf);
|
|
||||||
|
|
||||||
// FIXME!
|
|
||||||
if (_tcscmp(szBuf, _T("00000409")) == 0)
|
|
||||||
{
|
|
||||||
SendMessage(hLayoutList, CB_SELECTSTRING, (WPARAM) -1, (LPARAM)KeyName);
|
|
||||||
}
|
|
||||||
|
|
||||||
dwIndex++;
|
|
||||||
Ret = RegEnumKey(hKey, dwIndex, szBuf, sizeof(szBuf) / sizeof(TCHAR));
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
RegCloseKey(hSubKey);
|
dwIndex++;
|
||||||
|
Ret = RegEnumKey(hKey, dwIndex, szBuf, sizeof(szBuf) / sizeof(TCHAR));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegCloseKey(hSubKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,11 +185,19 @@ AddDlgProc(HWND hDlg,
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
{
|
{
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
{
|
||||||
|
INT iCount;
|
||||||
|
|
||||||
|
for(iCount = SendMessage(hLayoutList, CB_GETCOUNT, 0, 0); --iCount >= 0;)
|
||||||
|
HeapFree(hProcessHeap, 0, (LPVOID)SendMessage(hLayoutList, CB_GETITEMDATA, iCount, 0));
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -1,27 +1,10 @@
|
||||||
/*
|
|
||||||
* ReactOS
|
|
||||||
* Copyright (C) 2007 ReactOS Team
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* PROJECT: input.dll
|
* PROJECT: input.dll
|
||||||
* FILE: dll/win32/input/input.c
|
* FILE: dll/win32/input/input.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
||||||
|
* Colin Finck
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 06-09-2007 Created
|
* 06-09-2007 Created
|
||||||
*/
|
*/
|
||||||
|
@ -33,6 +16,7 @@
|
||||||
|
|
||||||
LONG CALLBACK SystemApplet(VOID);
|
LONG CALLBACK SystemApplet(VOID);
|
||||||
HINSTANCE hApplet = 0;
|
HINSTANCE hApplet = 0;
|
||||||
|
HANDLE hProcessHeap;
|
||||||
|
|
||||||
/* Applets */
|
/* Applets */
|
||||||
APPLET Applets[NUM_APPLETS] =
|
APPLET Applets[NUM_APPLETS] =
|
||||||
|
@ -127,6 +111,7 @@ DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
hApplet = hinstDLL;
|
hApplet = hinstDLL;
|
||||||
|
hProcessHeap = GetProcessHeap();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,10 @@ typedef struct
|
||||||
} APPLET, *PAPPLET;
|
} APPLET, *PAPPLET;
|
||||||
|
|
||||||
extern HINSTANCE hApplet;
|
extern HINSTANCE hApplet;
|
||||||
|
extern HANDLE hProcessHeap;
|
||||||
|
|
||||||
|
// Character Count of a layout ID like "00000409"
|
||||||
|
#define CCH_LAYOUT_ID 8
|
||||||
|
|
||||||
/* input.c */
|
/* input.c */
|
||||||
VOID
|
VOID
|
||||||
|
@ -32,6 +36,8 @@ INT_PTR CALLBACK
|
||||||
SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
|
SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
|
||||||
BOOL
|
BOOL
|
||||||
GetLayoutName(LPCTSTR lcid, LPTSTR name);
|
GetLayoutName(LPCTSTR lcid, LPTSTR name);
|
||||||
|
VOID
|
||||||
|
UpdateLayoutsList(VOID);
|
||||||
|
|
||||||
/* keysettings.c */
|
/* keysettings.c */
|
||||||
INT_PTR CALLBACK
|
INT_PTR CALLBACK
|
||||||
|
|
|
@ -1,27 +1,10 @@
|
||||||
/*
|
|
||||||
* ReactOS
|
|
||||||
* Copyright (C) 2007 ReactOS Team
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* PROJECT: input.dll
|
* PROJECT: input.dll
|
||||||
* FILE: dll/win32/input/inputlangprop.c
|
* FILE: dll/win32/input/inputlangprop.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
||||||
|
* Colin Finck
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 06-09-2007 Created
|
* 06-09-2007 Created
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,27 +1,10 @@
|
||||||
/*
|
|
||||||
* ReactOS
|
|
||||||
* Copyright (C) 2007 ReactOS Team
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* PROJECT: input.dll
|
* PROJECT: input.dll
|
||||||
* FILE: dll/win32/input/keysettings.c
|
* FILE: dll/win32/input/keysettings.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
* PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru)
|
||||||
|
* Colin Finck
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 06-09-2007 Created
|
* 06-09-2007 Created
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
* FILE: dll/win32/input/settings.c
|
* FILE: dll/win32/input/settings.c
|
||||||
* PURPOSE: input.dll
|
* PURPOSE: input.dll
|
||||||
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Colin Finck
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* 06-09-2007 Created
|
* 06-09-2007 Created
|
||||||
*/
|
*/
|
||||||
|
@ -13,6 +14,8 @@
|
||||||
|
|
||||||
#define BUFSIZE 256
|
#define BUFSIZE 256
|
||||||
|
|
||||||
|
static HWND MainDlgWnd;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
LANGID LangId;
|
LANGID LangId;
|
||||||
|
@ -81,13 +84,11 @@ InitLangList(HWND hWnd)
|
||||||
HKEY hKey, hSubKey;
|
HKEY hKey, hSubKey;
|
||||||
TCHAR szBuf[MAX_PATH], szPreload[MAX_PATH], szSub[MAX_PATH];
|
TCHAR szBuf[MAX_PATH], szPreload[MAX_PATH], szSub[MAX_PATH];
|
||||||
LAYOUT_ITEM lItem;
|
LAYOUT_ITEM lItem;
|
||||||
AddListColumn(hWnd);
|
|
||||||
LONG Ret;
|
LONG Ret;
|
||||||
DWORD dwIndex = 0, dwType, dwSize;
|
DWORD dwIndex = 0, dwType, dwSize;
|
||||||
LV_ITEM item;
|
LV_ITEM item;
|
||||||
HWND hList = GetDlgItem(hWnd, IDC_KEYLAYOUT_LIST);
|
HWND hList = GetDlgItem(hWnd, IDC_KEYLAYOUT_LIST);
|
||||||
|
INT i;
|
||||||
(VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT);
|
|
||||||
|
|
||||||
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"),
|
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout\\Preload"),
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
|
@ -142,7 +143,7 @@ InitLangList(HWND hWnd)
|
||||||
item.pszText = lItem.IndName;
|
item.pszText = lItem.IndName;
|
||||||
item.lParam = (LPARAM)&lItem;
|
item.lParam = (LPARAM)&lItem;
|
||||||
item.iItem = (INT) dwIndex;
|
item.iItem = (INT) dwIndex;
|
||||||
INT i = ListView_InsertItem(hList, &item);
|
i = ListView_InsertItem(hList, &item);
|
||||||
|
|
||||||
ListView_SetItemText(hList, i, 1, lItem.LangName);
|
ListView_SetItemText(hList, i, 1, lItem.LangName);
|
||||||
ListView_SetItemText(hList, i, 2, lItem.LayoutName);
|
ListView_SetItemText(hList, i, 2, lItem.LayoutName);
|
||||||
|
@ -163,6 +164,25 @@ InitLangList(HWND hWnd)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
UpdateLayoutsList(VOID)
|
||||||
|
{
|
||||||
|
(VOID) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST));
|
||||||
|
InitLangList(MainDlgWnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
DeleteLayout(VOID)
|
||||||
|
{
|
||||||
|
INT iIndex;
|
||||||
|
|
||||||
|
iIndex = (INT) SendMessage(GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST), LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
|
||||||
|
if (iIndex != -1)
|
||||||
|
{
|
||||||
|
MessageBox(0, _T("Not implemented!"), NULL, MB_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Property page dialog callback */
|
/* Property page dialog callback */
|
||||||
INT_PTR CALLBACK
|
INT_PTR CALLBACK
|
||||||
SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
|
SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
|
||||||
|
@ -173,6 +193,10 @@ SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
|
MainDlgWnd = hwndDlg;
|
||||||
|
AddListColumn(hwndDlg);
|
||||||
|
(VOID) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST),
|
||||||
|
LVS_EX_FULLROWSELECT);
|
||||||
InitLangList(hwndDlg);
|
InitLangList(hwndDlg);
|
||||||
EnableWindow(GetDlgItem(hwndDlg, IDC_PROP_BUTTON),FALSE);
|
EnableWindow(GetDlgItem(hwndDlg, IDC_PROP_BUTTON),FALSE);
|
||||||
EnableWindow(GetDlgItem(hwndDlg, IDC_SET_DEFAULT),FALSE);
|
EnableWindow(GetDlgItem(hwndDlg, IDC_SET_DEFAULT),FALSE);
|
||||||
|
@ -189,6 +213,10 @@ SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
|
case IDC_REMOVE_BUTTON:
|
||||||
|
DeleteLayout();
|
||||||
|
break;
|
||||||
|
|
||||||
case IDC_KEY_SET_BTN:
|
case IDC_KEY_SET_BTN:
|
||||||
DialogBox(hApplet,
|
DialogBox(hApplet,
|
||||||
MAKEINTRESOURCE(IDD_KEYSETTINGS),
|
MAKEINTRESOURCE(IDD_KEYSETTINGS),
|
||||||
|
|
Loading…
Reference in a new issue