2

現在、ユーザーが電子メールを入力して画像をデジタルで取得できる画像ビューアを設計しています。私を悩ませているのは、オンスクリーンキーボードを閉じることです。このコードを使用して、Windows プロセスを開始します。

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

その後、VB InputBox を開いて電子メール アドレスの入力を求めます (アプリケーションはタッチ スクリーンに表示されるため、スクリーン キーボードを使用します)。このプロンプトの後、プロセスを自動的に閉じたいと思います。

次の方法でプロセスを閉じようとしました。

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 プロセスを呼び出すのはこれが初めてです。何か不足していますか?

事前にどうもありがとうございました!

4

4 に答える 4

4
    /// <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
于 2014-08-05T09:28:49.850 に答える
2

私もこれには困りました。何らかの理由でこれは機能しますが、開いているすべての TabTip プロセスを強制終了します。

            //Kill all on screen keyboards
            Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
            foreach (Process onscreenProcess in oskProcessArray)
            {
                onscreenProcess.Kill();
            }
于 2013-07-31T09:17:50.340 に答える
1

あなたができること:

            Process process = new Process();

            process.StartInfo.FileName = progFiles;//Filename
            process.Start();
            process.Close();
于 2013-05-30T11:30:00.913 に答える