У меня есть экранная клавиатура Windows, реализованная в моих приложениях как таковая:
[ComImport, Guid("4ce576fa-83dc-4F88-951c-9d0782b4e376")]
class UIHostNoLaunch
{
}
[ComImport, Guid("37c994e7-432b-4834-a2f7-dce1f13b834b")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface ITipInvocation
{
void Toggle(IntPtr hwnd);
}
[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();
public static void ShowWindowsKeyboard()
{
var uiHostNoLaunch = new UIHostNoLaunch();
var tipInvocation = (ITipInvocation)uiHostNoLaunch;
tipInvocation.Toggle(GetDesktopWindow());
Marshal.ReleaseComObject(uiHostNoLaunch);
}
Клавиатура появляется с помощью функции переключения, мой вопрос: можете ли вы заставить клавиатуру появляться с определенной функцией и исчезать с помощью другой функции вместо использования переключения?
Например, textbox_OnGotFocus(EventArgs e) {некоторый код, вызывающий появление клавиатуры} textBox_OnLostFocus(EventArgs e) {какой-то код, из-за которого клавиатура исчезает}
Как насчет этого:
static readonly string OnScreenKeyboardProgramName = "osk";
public static void StartOnScreenKeyboard()
{
System.Diagnostics.Process.Start(OnScreenKeyboardProgramName);
}
public static void StopOnScreenKeyboard()
{
System.Diagnostics.Process[] processes =
System.Diagnostics.Process.GetProcessesByName(OnScreenKeyboardProgramName);
if (processes.Length > 0)
{
processes[0].Kill();
processes[0].WaitForExit();
processes[0].Dispose();
}
}