首页 > 代码库 > 平板下windows程序调用软键盘的办法

平板下windows程序调用软键盘的办法



http://stackoverflow.com/questions/21140852/start-tabtip-with-numpad-view-open         
 
 
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 
 
        private static void KillTabTip()
        {
            // Kill the previous process so the registry change will take effect.
            var processlist = Process.GetProcesses();
 
            foreach (var process in processlist.Where(process => process.ProcessName == "TabTip"))
            {
                process.Kill();
                break;
            }
        }
 
        public static void ShowTouchKeyboard(bool isVisible, bool numericKeyboard)
        {
            if (isVisible)
            {
                const string keyName = "HKEY_CURRENT_USER\\Software\\Microsoft\\TabletTip\\1.7";
 
                var regValue = http://www.mamicode.com/(int)Registry.GetValue(keyName,"KeyboardLayoutPreference", 0);
                var regShowNumericKeyboard = regValue =http://www.mamicode.com/= 1;
 
                // Note: Remove this if do not want to control docked state.
                var dockedRegValue = http://www.mamicode.com/(int)Registry.GetValue(keyName,"EdgeTargetDockedState", 1);
                var restoreDockedState = dockedRegValue =http://www.mamicode.com/= 0;
 
                if (numericKeyboard && regShowNumericKeyboard == false)
                {
                    // Set the registry so it will show the number pad via the thumb keyboard.
                    Registry.SetValue(keyName, "KeyboardLayoutPreference", 1, RegistryValueKind.DWord);
 
                    // Kill the previous process so the registry change will take effect.
                    KillTabTip();
                }
                else if (numericKeyboard == false && regShowNumericKeyboard)
                {
                    // Set the registry so it will NOT show the number pad via the thumb keyboard.
                    Registry.SetValue(keyName, "KeyboardLayoutPreference", 0, RegistryValueKind.DWord);
 
                    // Kill the previous process so the registry change will take effect.
                    KillTabTip();
                }
 
                // Note: Remove this if do not want to control docked state.
                if (restoreDockedState)
                {
                    // Set the registry so it will show as docked at the bottom rather than floating.
                    Registry.SetValue(keyName, "EdgeTargetDockedState", 1, RegistryValueKind.DWord);
 
                    // Kill the previous process so the registry change will take effect.
                    KillTabTip();
                }
 
                Process.Start("c:\\Program Files\\Common Files\\Microsoft Shared\\ink\\TabTip.exe");
            }
            else
            {
                var win8Version = new Version(6, 2, 9200, 0);
 
                if (Environment.OSVersion.Version >= win8Version)
                {
                    const int wmSyscommand = 274;
                    const uint scClose = 61536;
                    IntPtr keyboardWnd = FindWindow("IPTip_Main_Window", null);
                    PostMessage(keyboardWnd, wmSyscommand, (int)scClose, 0);
                }
            }
        }