Leaked source code of windows server 2003
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.

533 lines
18 KiB

  1. //
  2. // Include Files.
  3. //
  4. #ifndef INPUTDLG_H
  5. #define INPUTDLG_H
  6. #ifndef ARRAYSIZE
  7. #define ARRAYSIZE(a) (sizeof(a)/sizeof((a)[0]))
  8. #endif
  9. //
  10. // Constant Declarations.
  11. //
  12. #define US_LOCALE MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
  13. #define IS_DIRECT_SWITCH_HOTKEY(p) \
  14. (((p) >= IME_HOTKEY_DSWITCH_FIRST) && \
  15. ((p) <= IME_HOTKEY_DSWITCH_LAST))
  16. #define DESC_MAX MAX_PATH // max size of a description
  17. #define ALLOCBLOCK 3 // # items added to block for alloc/realloc
  18. #define HKL_LEN 9 // max # chars in hkl id + null
  19. #define LIST_MARGIN 2 // for making the list box look good
  20. #define MB_OK_OOPS (MB_OK | MB_ICONEXCLAMATION) // msg box flags
  21. //
  22. // wStatus bit pile.
  23. //
  24. #define LANG_ACTIVE 0x0001 // language is active
  25. #define LANG_ORIGACTIVE 0x0002 // language was active to start with
  26. #define LANG_CHANGED 0x0004 // user changed status of language
  27. #define ICON_LOADED 0x0010 // icon read in from file
  28. #define LANG_DEFAULT 0x0020 // current language
  29. #define LANG_DEF_CHANGE 0x0040 // language default has changed
  30. #define LANG_IME 0x0080 // IME
  31. #define LANG_HOTKEY 0x0100 // a hotkey has been defined
  32. #define LANG_UNLOAD 0x0200 // unload language
  33. #define LANG_UPDATE 0x8000 // language needs to be updated
  34. #define HOTKEY_SWITCH_LANG 0x0000 // id to switch between locales
  35. #define MAX(i, j) (((i) > (j)) ? (i) : (j))
  36. #define LANG_OAC (LANG_ORIGACTIVE | LANG_ACTIVE | LANG_CHANGED)
  37. //
  38. // Bits for g_dwChanges.
  39. //
  40. #define CHANGE_SWITCH 0x0001
  41. #define CHANGE_DEFAULT 0x0002
  42. #define CHANGE_CAPSLOCK 0x0004
  43. #define CHANGE_NEWKBDLAYOUT 0x0008
  44. #define CHANGE_TIPCHANGE 0x0010
  45. #define CHANGE_LANGSWITCH 0x0020
  46. #define CHANGE_DIRECTSWITCH 0x0040
  47. //
  48. // For the indicator on the tray.
  49. //
  50. #define IDM_NEWSHELL 249
  51. #define IDM_EXIT 259
  52. #define MOD_VIRTKEY 0x0080
  53. //
  54. // These are according to the US English kbd layout
  55. //
  56. #define VK_OEM_SEMICLN 0xba // ; :
  57. #define VK_OEM_EQUAL 0xbb // = +
  58. #define VK_OEM_SLASH 0xbf // / ?
  59. #define VK_OEM_LBRACKET 0xdb // [ {
  60. #define VK_OEM_BSLASH 0xdc // \ |
  61. #define VK_OEM_RBRACKET 0xdd // ] }
  62. #define VK_OEM_QUOTE 0xde // ' "
  63. //
  64. // For the hot key switching.
  65. //
  66. #define DIALOG_SWITCH_INPUT_LOCALES 0
  67. #define DIALOG_SWITCH_KEYBOARD_LAYOUT 1
  68. #define DIALOG_SWITCH_IME 2
  69. //
  70. // Show Language bar
  71. //
  72. #define REG_LANGBAR_SHOWNORMAL (DWORD)0
  73. #define REG_LANGBAR_DOCK (DWORD)1
  74. #define REG_LANGBAR_MINIMIZED (DWORD)2
  75. #define REG_LANGBAR_HIDDEN (DWORD)3
  76. #define REG_LANGBAR_DESKBAND (DWORD)4
  77. //
  78. // Typedef Declarations.
  79. //
  80. typedef struct
  81. {
  82. DWORD dwLangID; // language id
  83. BOOL bDefLang; // default language
  84. BOOL bNoAddCat; // don't add category
  85. UINT uInputType; // default input type
  86. LPARAM lParam; // item data
  87. int iIdxTips; // index of Tips
  88. CLSID clsid; // tip clsid
  89. GUID guidProfile; // tip profile guid
  90. HKL hklSub; // tip substitute hkl
  91. ATOM atmDefTipName; // default input name
  92. ATOM atmTVItemName; // tree view item name
  93. } TVITEMNODE, *LPTVITEMNODE;
  94. typedef struct langnode_s
  95. {
  96. WORD wStatus; // status flags
  97. UINT iLayout; // offset into layout array
  98. HKL hkl; // hkl
  99. HKL hklUnload; // hkl of currently loaded layout
  100. UINT iLang; // offset into lang array
  101. HANDLE hLangNode; // handle to free for this structure
  102. int nIconIME; // IME icon
  103. struct langnode_s *pNext; // ptr to next langnode
  104. UINT uModifiers; // hide Hotkey stuff here
  105. UINT uVKey; // so we can rebuild the hotkey record
  106. } LANGNODE, *LPLANGNODE;
  107. typedef struct
  108. {
  109. DWORD dwID; // language id
  110. ATOM atmLanguageName; // language name - localized
  111. TCHAR szSymbol[3]; // 2 letter indicator symbol (+ null)
  112. UINT iUseCount; // usage count for this language
  113. UINT iNumCount; // number of links attached
  114. DWORD dwDefaultLayout; // default layout id
  115. LPLANGNODE pNext; // ptr to lang node structure
  116. } INPUTLANG, *LPINPUTLANG;
  117. typedef struct
  118. {
  119. DWORD dwID; // numeric id
  120. BOOL bInstalled; // if layout is installed
  121. UINT iSpecialID; // special id (0xf001 for dvorak etc)
  122. ATOM atmLayoutFile; // layout file name
  123. ATOM atmLayoutText; // layout text name
  124. ATOM atmIMEFile; // IME file name
  125. } LAYOUT, *LPLAYOUT;
  126. typedef struct
  127. {
  128. DWORD dwLangID; // language id
  129. BOOL bEnabled; // enable status
  130. BOOL bDefault; // default profile
  131. BOOL fEngineAvailable; // engine status
  132. BOOL bNoAddCat; // don't add category
  133. UINT uInputType; // input type
  134. CLSID clsid; // tip clsid
  135. GUID guidProfile; // tip profile guid
  136. HKL hklSub; // tip substitute hkl
  137. UINT iLayout; // offset into keyboard layout array
  138. ATOM atmTipText; // layout text name
  139. } TIPS, *LPTIPS;
  140. typedef struct
  141. {
  142. DWORD dwHotKeyID;
  143. UINT idHotKeyName;
  144. DWORD fdwEnable;
  145. UINT uModifiers;
  146. UINT uVKey;
  147. HKL hkl;
  148. ATOM atmHotKeyName;
  149. UINT idxLayout;
  150. UINT uLayoutHotKey;
  151. } HOTKEYINFO, *LPHOTKEYINFO;
  152. typedef struct
  153. {
  154. HWND hwndMain;
  155. LPLANGNODE pLangNode;
  156. LPHOTKEYINFO pHotKeyNode;
  157. } INITINFO, *LPINITINFO;
  158. typedef struct
  159. {
  160. UINT uVirtKeyValue;
  161. UINT idVirtKeyName;
  162. ATOM atVirtKeyName;
  163. } VIRTKEYDESC;
  164. //
  165. // Global Variables.
  166. //
  167. static VIRTKEYDESC g_aVirtKeyDesc[] =
  168. {
  169. {0, IDS_VK_NONE, 0},
  170. {VK_SPACE, IDS_VK_SPACE, 0},
  171. {VK_PRIOR, IDS_VK_PRIOR, 0},
  172. {VK_NEXT, IDS_VK_NEXT, 0},
  173. {VK_END, IDS_VK_END, 0},
  174. {VK_HOME, IDS_VK_HOME, 0},
  175. {VK_F1, IDS_VK_F1, 0},
  176. {VK_F2, IDS_VK_F2, 0},
  177. {VK_F3, IDS_VK_F3, 0},
  178. {VK_F4, IDS_VK_F4, 0},
  179. {VK_F5, IDS_VK_F5, 0},
  180. {VK_F6, IDS_VK_F6, 0},
  181. {VK_F7, IDS_VK_F7, 0},
  182. {VK_F8, IDS_VK_F8, 0},
  183. {VK_F9, IDS_VK_F9, 0},
  184. {VK_F10, IDS_VK_F10, 0},
  185. {VK_F11, IDS_VK_F11, 0},
  186. {VK_F12, IDS_VK_F12, 0},
  187. {VK_OEM_SEMICLN, IDS_VK_OEM_SEMICLN, 0},
  188. {VK_OEM_EQUAL, IDS_VK_OEM_EQUAL, 0},
  189. {VK_OEM_COMMA, IDS_VK_OEM_COMMA, 0},
  190. {VK_OEM_MINUS, IDS_VK_OEM_MINUS, 0},
  191. {VK_OEM_PERIOD, IDS_VK_OEM_PERIOD, 0},
  192. {VK_OEM_SLASH, IDS_VK_OEM_SLASH, 0},
  193. {VK_OEM_3, IDS_VK_OEM_3, 0},
  194. {VK_OEM_LBRACKET, IDS_VK_OEM_LBRACKET, 0},
  195. {VK_OEM_BSLASH, IDS_VK_OEM_BSLASH, 0},
  196. {VK_OEM_RBRACKET, IDS_VK_OEM_RBRACKET, 0},
  197. {VK_OEM_QUOTE, IDS_VK_OEM_QUOTE, 0},
  198. {'A', IDS_VK_A + 0, 0},
  199. {'B', IDS_VK_A + 1, 0},
  200. {'C', IDS_VK_A + 2, 0},
  201. {'D', IDS_VK_A + 3, 0},
  202. {'E', IDS_VK_A + 4, 0},
  203. {'F', IDS_VK_A + 5, 0},
  204. {'G', IDS_VK_A + 6, 0},
  205. {'H', IDS_VK_A + 7, 0},
  206. {'I', IDS_VK_A + 8, 0},
  207. {'J', IDS_VK_A + 9, 0},
  208. {'K', IDS_VK_A + 10, 0},
  209. {'L', IDS_VK_A + 11, 0},
  210. {'M', IDS_VK_A + 12, 0},
  211. {'N', IDS_VK_A + 13, 0},
  212. {'O', IDS_VK_A + 14, 0},
  213. {'P', IDS_VK_A + 15, 0},
  214. {'Q', IDS_VK_A + 16, 0},
  215. {'R', IDS_VK_A + 17, 0},
  216. {'S', IDS_VK_A + 18, 0},
  217. {'T', IDS_VK_A + 19, 0},
  218. {'U', IDS_VK_A + 20, 0},
  219. {'V', IDS_VK_A + 21, 0},
  220. {'W', IDS_VK_A + 22, 0},
  221. {'X', IDS_VK_A + 23, 0},
  222. {'Y', IDS_VK_A + 24, 0},
  223. {'Z', IDS_VK_A + 25, 0},
  224. {0, IDS_VK_NONE1, 0},
  225. {'0', IDS_VK_0 + 0, 0},
  226. {'1', IDS_VK_0 + 1, 0},
  227. {'2', IDS_VK_0 + 2, 0},
  228. {'3', IDS_VK_0 + 3, 0},
  229. {'4', IDS_VK_0 + 4, 0},
  230. {'5', IDS_VK_0 + 5, 0},
  231. {'6', IDS_VK_0 + 6, 0},
  232. {'7', IDS_VK_0 + 7, 0},
  233. {'8', IDS_VK_0 + 8, 0},
  234. {'9', IDS_VK_0 + 9, 0},
  235. {'~', IDS_VK_0 + 10, 0},
  236. {'`', IDS_VK_0 + 11, 0},
  237. };
  238. static BOOL g_bAdmin_Privileges = FALSE;
  239. static BOOL g_bSetupCase = FALSE;
  240. static BOOL g_bCHSystem = FALSE;
  241. static BOOL g_bMESystem = FALSE;
  242. static BOOL g_bShowRtL = FALSE;
  243. static UINT g_iEnabledTips = 0;
  244. static UINT g_iEnabledKbdTips = 0;
  245. static DWORD g_dwToolBar = 0;
  246. static DWORD g_dwChanges = 0;
  247. static LPINPUTLANG g_lpLang = NULL;
  248. static UINT g_iLangBuff;
  249. static HANDLE g_hLang;
  250. static UINT g_nLangBuffSize;
  251. static LPLAYOUT g_lpLayout = NULL;
  252. static UINT g_iLayoutBuff;
  253. static HANDLE g_hLayout;
  254. static UINT g_nLayoutBuffSize;
  255. static UINT g_iLayoutIME; // Number of IME keyboard layouts.
  256. static int g_iUsLayout;
  257. static DWORD g_dwAttributes;
  258. static int g_cyText;
  259. static int g_cyListItem;
  260. static LPTIPS g_lpTips = NULL;
  261. static UINT g_iTipsBuff;
  262. static UINT g_nTipsBuffSize;
  263. static HANDLE g_hTips;
  264. static TCHAR c_szLocaleInfo[] = TEXT("SYSTEM\\CurrentControlSet\\Control\\Nls\\Locale");
  265. static TCHAR c_szLocaleInfoNT4[] = TEXT("SYSTEM\\CurrentControlSet\\Control\\Nls\\Language");
  266. static TCHAR c_szLayoutPath[] = TEXT("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts");
  267. static TCHAR c_szLayoutFile[] = TEXT("layout file");
  268. static TCHAR c_szLayoutText[] = TEXT("layout text");
  269. static TCHAR c_szLayoutID[] = TEXT("layout id");
  270. static TCHAR c_szInstalled[] = TEXT("installed");
  271. static TCHAR c_szIMEFile[] = TEXT("IME File");
  272. static TCHAR c_szDisplayLayoutText[] = TEXT("Layout Display Name");
  273. static TCHAR c_szKbdLayouts[] = TEXT("Keyboard Layout");
  274. static TCHAR c_szPreloadKey[] = TEXT("Preload");
  275. static TCHAR c_szSubstKey[] = TEXT("Substitutes");
  276. static TCHAR c_szToggleKey[] = TEXT("Toggle");
  277. static TCHAR c_szToggleHotKey[] = TEXT("Hotkey");
  278. static TCHAR c_szToggleLang[] = TEXT("Language Hotkey");
  279. static TCHAR c_szToggleLayout[] = TEXT("Layout Hotkey");
  280. static TCHAR c_szAttributes[] = TEXT("Attributes");
  281. static TCHAR c_szKbdPreloadKey[] = TEXT("Keyboard Layout\\Preload");
  282. static TCHAR c_szKbdSubstKey[] = TEXT("Keyboard Layout\\Substitutes");
  283. static TCHAR c_szKbdToggleKey[] = TEXT("Keyboard Layout\\Toggle");
  284. static TCHAR c_szInternat[] = TEXT("internat.exe");
  285. static char c_szInternatA[] = "internat.exe";
  286. static TCHAR c_szTipInfo[] = TEXT("SOFTWARE\\Microsoft\\CTF");
  287. static TCHAR c_szCTFMon[] = TEXT("CTFMON.EXE");
  288. static char c_szCTFMonA[] = "ctfmon.exe";
  289. static TCHAR c_szScanCodeKey[] = TEXT("Keyboard Layout\\IMEtoggle\\scancode");
  290. static TCHAR c_szValueShiftLeft[] = TEXT("Shift Left");
  291. static TCHAR c_szValueShiftRight[] = TEXT("Shift Right");
  292. static TCHAR c_szIndicator[] = TEXT("Indicator");
  293. static TCHAR c_szCTFMonClass[] = TEXT("CicLoaderWndClass");
  294. static TCHAR c_szLoadImmPath[] = TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\IMM");
  295. static TCHAR c_szPrefixCopy[] = TEXT("KEYBOARD_");
  296. static TCHAR c_szKbdInf[] = TEXT("kbd.inf");
  297. static TCHAR c_szKbdInf9x[] = TEXT("multilng.inf");
  298. static TCHAR c_szKbdIMEInf9x[] = TEXT("ime.inf");
  299. static TCHAR c_szIMECopy[] = TEXT("IME_");
  300. static TCHAR c_szTipCategoryEnable[] = TEXT("Enable");
  301. static TCHAR c_szCTFTipPath[] = TEXT("SOFTWARE\\Microsoft\\CTF\\TIP\\");
  302. static TCHAR c_szLangProfileKey[] = TEXT("LanguageProfile");
  303. static TCHAR c_szSubstituteLayout[] = TEXT("SubstituteLayout");
  304. static TCHAR c_szKbdPreloadKey_DefUser[] = TEXT(".DEFAULT\\Keyboard Layout\\Preload");
  305. static TCHAR c_szKbdSubstKey_DefUser[] = TEXT(".DEFAULT\\Keyboard Layout\\Substitutes");
  306. static TCHAR c_szKbdToggleKey_DefUser[] = TEXT(".DEFAULT\\Keyboard Layout\\Toggle");
  307. static TCHAR c_szRunPath_DefUser[] = TEXT(".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVersion\\Run");
  308. static TCHAR c_szHelpFile[] = TEXT("input.hlp");
  309. static HOTKEYINFO g_aDirectSwitchHotKey[IME_HOTKEY_DSWITCH_LAST - IME_HOTKEY_DSWITCH_FIRST + 1];
  310. #define DSWITCH_HOTKEY_SIZE sizeof(g_aDirectSwitchHotKey) / sizeof(HOTKEYINFO)
  311. static HOTKEYINFO g_SwitchLangHotKey;
  312. static HOTKEYINFO g_aImeHotKey0404[] =
  313. {
  314. {IME_ITHOTKEY_RESEND_RESULTSTR, IDS_RESEND_RESULTSTR_CHT,
  315. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  316. 0, 0, (HKL)NULL, 0, -1},
  317. {IME_ITHOTKEY_PREVIOUS_COMPOSITION, IDS_PREVIOUS_COMPOS_CHT,
  318. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  319. 0, 0, (HKL)NULL, 0, -1},
  320. {IME_ITHOTKEY_UISTYLE_TOGGLE, IDS_UISTYLE_TOGGLE_CHT,
  321. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  322. 0, 0, (HKL)NULL, 0, -1},
  323. {IME_THOTKEY_IME_NONIME_TOGGLE, IDS_IME_NONIME_TOGGLE_CHT,
  324. MOD_LEFT,
  325. 0, 0, (HKL)NULL, 0, -1},
  326. {IME_THOTKEY_SHAPE_TOGGLE, IDS_SHAPE_TOGGLE_CHT,
  327. MOD_LEFT,
  328. 0, 0, (HKL)NULL, 0, -1},
  329. {IME_THOTKEY_SYMBOL_TOGGLE, IDS_SYMBOL_TOGGLE_CHT,
  330. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  331. 0, 0, (HKL)NULL, 0, -1},
  332. };
  333. static HOTKEYINFO g_aImeHotKey0804[] =
  334. {
  335. {IME_CHOTKEY_IME_NONIME_TOGGLE, IDS_IME_NONIME_TOGGLE_CHS,
  336. MOD_LEFT,
  337. 0, 0, (HKL)NULL, 0, -1},
  338. {IME_CHOTKEY_SHAPE_TOGGLE, IDS_SHAPE_TOGGLE_CHS,
  339. MOD_LEFT,
  340. 0, 0, (HKL)NULL, 0, -1},
  341. {IME_CHOTKEY_SYMBOL_TOGGLE, IDS_SYMBOL_TOGGLE_CHS,
  342. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  343. 0, 0, (HKL)NULL, 0, -1},
  344. };
  345. static HOTKEYINFO g_aImeHotKeyCHxBoth[]=
  346. {
  347. // CHS HOTKEYs,
  348. {IME_CHOTKEY_IME_NONIME_TOGGLE, IDS_IME_NONIME_TOGGLE_CHS,
  349. MOD_LEFT,
  350. 0, 0, (HKL)NULL, 0, -1},
  351. {IME_CHOTKEY_SHAPE_TOGGLE, IDS_SHAPE_TOGGLE_CHS,
  352. MOD_LEFT,
  353. 0, 0, (HKL)NULL, 0, -1},
  354. {IME_CHOTKEY_SYMBOL_TOGGLE, IDS_SYMBOL_TOGGLE_CHS,
  355. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  356. 0, 0, (HKL)NULL, 0, -1},
  357. // CHT HOTKEYs,
  358. {IME_ITHOTKEY_RESEND_RESULTSTR, IDS_RESEND_RESULTSTR_CHT,
  359. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  360. 0, 0, (HKL)NULL, 0, -1},
  361. {IME_ITHOTKEY_PREVIOUS_COMPOSITION, IDS_PREVIOUS_COMPOS_CHT,
  362. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  363. 0, 0, (HKL)NULL, 0, -1},
  364. {IME_ITHOTKEY_UISTYLE_TOGGLE, IDS_UISTYLE_TOGGLE_CHT,
  365. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  366. 0, 0, (HKL)NULL, 0, -1},
  367. {IME_THOTKEY_IME_NONIME_TOGGLE, IDS_IME_NONIME_TOGGLE_CHT,
  368. MOD_LEFT,
  369. 0, 0, (HKL)NULL, 0, -1},
  370. {IME_THOTKEY_SHAPE_TOGGLE, IDS_SHAPE_TOGGLE_CHT,
  371. MOD_LEFT,
  372. 0, 0, (HKL)NULL, 0, -1},
  373. {IME_THOTKEY_SYMBOL_TOGGLE, IDS_SYMBOL_TOGGLE_CHT,
  374. MOD_VIRTKEY|MOD_CONTROL|MOD_ALT|MOD_SHIFT,
  375. 0, 0, (HKL)NULL, 0, -1},
  376. };
  377. //
  378. // Function Prototypes.
  379. //
  380. INT_PTR CALLBACK
  381. KbdLocaleAddDlg(
  382. HWND hwnd,
  383. UINT uMsg,
  384. WPARAM wParam,
  385. LPARAM lParam);
  386. INT_PTR CALLBACK
  387. KbdLocaleEditDlg(
  388. HWND hwnd,
  389. UINT uMsg,
  390. WPARAM wParam,
  391. LPARAM lParam);
  392. INT_PTR CALLBACK
  393. KbdLocaleChangeInputLocaleHotkey(
  394. HWND hwnd,
  395. UINT uMsg,
  396. WPARAM wParam,
  397. LPARAM lParam);
  398. INT_PTR CALLBACK
  399. KbdLocaleChangeThaiInputLocaleHotkey(
  400. HWND hwnd,
  401. UINT uMsg,
  402. WPARAM wParam,
  403. LPARAM lParam);
  404. INT_PTR CALLBACK
  405. KbdLocaleChangeMEInputLocaleHotkey(
  406. HWND hwnd,
  407. UINT uMsg,
  408. WPARAM wParam,
  409. LPARAM lParam);
  410. INT_PTR CALLBACK
  411. KbdLocaleChangeKeyboardLayoutHotkey(
  412. HWND hwnd,
  413. UINT uMsg,
  414. WPARAM wParam,
  415. LPARAM lParam);
  416. INT_PTR CALLBACK
  417. KbdLocaleHotKeyDlg(
  418. HWND hwnd,
  419. UINT uMsg,
  420. WPARAM wParam,
  421. LPARAM lParam);
  422. INT_PTR CALLBACK
  423. KbdLocaleSimpleHotkey(
  424. HWND hwnd,
  425. UINT uMsg,
  426. WPARAM wParam,
  427. LPARAM lParam);
  428. INT_PTR CALLBACK
  429. ToolBarSettingDlg(
  430. HWND hwnd,
  431. UINT uMsg,
  432. WPARAM wParam,
  433. LPARAM lParam);
  434. BOOL Locale_LoadLocales(HWND hwnd);
  435. BOOL IsEnabledTipOrMultiLayouts();
  436. HKL GetSubstituteHKL(
  437. REFCLSID rclsid,
  438. LANGID langid,
  439. REFGUID guidProfile);
  440. #endif // INPUTDLG_H