触屏键盘
private const Int32 WM_SYSCOMMAND = 274;
private const UInt32 SC_CLOSE = 61536;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);
[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);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int RegisterWindowMessage(string lpString);
//显示屏幕键盘
public static int ShowInputPanel()
{
try
{
dynamic file = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe";
if (!System.IO.File.Exists(file))
return -1;
Process.Start(file);
//return SetUnDock(); //不知SetUnDock()是什么,所以直接注释返回1
return 1;
}
catch (Exception)
{
return 255;
}
}
//隐藏屏幕键盘
public static void HideInputPanel(){
IntPtr TouchhWnd = new IntPtr(0);
TouchhWnd = FindWindow("IPTip_Main_Window", null);
if (TouchhWnd == IntPtr.Zero)
return;
PostMessage(TouchhWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
调用Windows osk悬浮键盘
public static bool isShowNumBoard = false;
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
public static IntPtr ptr = new IntPtr();
public static void ShowScreenKeyboard()
{
try
{
//判断软键盘是否进程是否已经存在,如果不存在进行调用
Process[] pro = Process.GetProcessesByName("osk");
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
//键盘如果已经打开则重新打开,防止最小化无法显示
if (pro != null && pro.Length > 0)
{
Process kbpr = pro[0];
kbpr.Kill();
if (isWow64FsRedirectionDisabled)
{
Process.Start(@"C:\WINDOWS\system32\osk.exe");
Wow64RevertWow64FsRedirection(ptr);
}
return;
}
if (isWow64FsRedirectionDisabled)
{
Process.Start(@"C:\WINDOWS\system32\osk.exe");
Wow64RevertWow64FsRedirection(ptr);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
OKS的需要本机下个输入法,不然只能输入26位英文字母。无法拼写汉字