如何正确关闭 C# winform 中的屏幕键盘进程?

2023-12-02

我目前正在设计一个图像查看器,允许用户输入电子邮件并以数字方式获取图像。令我困扰的部分是关闭屏幕键盘。我用这段代码来启动windows进程:

string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string keyboardPath = Path.Combine(progFiles, "TabTip.exe");
Process keyboardProc = Process.Start(keyboardPath);

之后,我打开 VB 输入框来提示输入电子邮件地址(我使用屏幕键盘,因为应用程序将显示在触摸屏上)。出现此提示后我想自动关闭该进程。

我尝试通过以下方式关闭该进程:

keyboardProc.Kill();
keyboardProc.Dispose();
keyboardProc.Close();
keyboardProc = null;

它们都不起作用,只是抛出异常:

An unhandled exception of type 'System.InvalidOperationException' occurred in System.dll
Additional information: Cannot process request because the process has exited.

我也尝试过通过ID识别进程并以这种方式关闭它,也不起作用。 我还看了一下:C#/.NET:关闭主窗口之外的另一个进程但也没有让它工作..:(

我对 C# 还很陌生,这是我第一次从代码调用 Windows 进程 - 我是否遗漏了什么?

预先非常感谢您!


    /// <summary>
    /// Show the On Screen Keyboard
    /// </summary>
    #region ShowOSK
    public static void ShowOnScreenKeyboard()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe");
        Process.Start(startInfo);
    }
    #endregion ShowOSK

    /// <summary>
    /// Hide the On Screen Keyboard
    /// </summary>
    #region HideOSK
    public static void HideOnScreenKeyboard()
    {
        uint WM_SYSCOMMAND = 274;
        uint SC_CLOSE = 61536;
        IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
        PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
    }
    #endregion HideOSK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确关闭 C# winform 中的屏幕键盘进程? 的相关文章

随机推荐