平板下windows程序调用软键盘的办法
时间:2014-05-17 15:25:14
收藏:0
阅读:1105
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 =
(int)Registry.GetValue(keyName, "KeyboardLayoutPreference", 0);
var
regShowNumericKeyboard = regValue == 1;
// Note: Remove
this if do not want to control docked state.
var dockedRegValue
= (int)Registry.GetValue(keyName, "EdgeTargetDockedState", 1);
var
restoreDockedState = dockedRegValue == 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);
}
}
}
评论(0)