Полное руководство: открытие экранной клавиатуры в C#

В определенных сценариях возникает необходимость предоставить пользователям экранную клавиатуру в вашем приложении C#. Эта функция особенно полезна в сенсорных устройствах, киосках или когда доступность является приоритетом. В этой статье мы рассмотрим различные способы открытия экранной клавиатуры на C# и предоставим вам практические примеры кода.

Метод 1: использование метода Process.Start()

using System.Diagnostics;
// ...
Process.Start("osk.exe");

Метод 2: выполнение процесса с помощью экранной клавиатуры

using System;
// ...
var onScreenKeyboardPath = Environment.ExpandEnvironmentVariables(@"%windir%\System32\osk.exe");
Process.Start(onScreenKeyboardPath);

Метод 3. Использование Windows API

using System;
using System.Runtime.InteropServices;
// ...
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private const uint WM_SYSCOMMAND = 0x0112;
private const int SC_CLOSE = 0xF060;
// ...
IntPtr oskHandle = FindWindow("OSKMainClass", "On-Screen Keyboard");
if (oskHandle != IntPtr.Zero)
{
    SetForegroundWindow(oskHandle);
    SendMessage(oskHandle, WM_SYSCOMMAND, (IntPtr)SC_CLOSE, IntPtr.Zero);
}

Метод 4. Использование API специальных возможностей

using System;
using System.Windows.Automation;
// ...
AutomationElement rootElement = AutomationElement.RootElement;
Condition condition = new PropertyCondition(AutomationElement.NameProperty, "On-Screen Keyboard");
AutomationElement oskElement = rootElement.FindFirst(TreeScope.Descendants, condition);
InvokePattern invokePattern = oskElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
invokePattern.Invoke();

В этой статье мы рассмотрели несколько способов открытия экранной клавиатуры в приложении C#. Мы рассмотрели использование метода Process.Start(), выполнение процесса экранной клавиатуры, использование Windows API и API специальных возможностей. В зависимости от ваших конкретных требований и среды, в которой работает ваше приложение, вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Включив экранную клавиатуру, вы улучшите взаимодействие с пользователем и сделаете свое приложение более доступным.