1

我正在移植一个 WPF 应用程序以在 Windows 8 平板电脑上运行。

我想让 TextInputPanel 在文本框获得焦点时出现,并在失去焦点时消失。

让它出现没问题,但我似乎无法让它接近。

我已经在进程上尝试了 Kill 和 CloseMainWindow,但得到了 InvalidOperationException - 由于进程已退出,无法处理请求。

我尝试了 SendMessage 但没有。

有任何想法吗?

一些 WinForm 测试代码如下:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace VirtualKeyboard
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

        static uint WM_CLOSE = 0x0010;
        static uint WM_QUIT = 0x0012;

        public Form1()
        {
            InitializeComponent();
        }

        private Process _keyboardProcess;

        private void Open_Click(object sender, EventArgs e)
        {
            _keyboardProcess = Process.Start(@"C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe");
        }

        private void Close_Click(object sender, EventArgs e)
        {
            // tried all these
            //SendMessage(_keyboardProcess.Handle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
            //SendMessage(_keyboardProcess.Handle, WM_QUIT, IntPtr.Zero, IntPtr.Zero);
            //_keyboardProcess.Kill();
            //_keyboardProcess.CloseMainWindow();
        }

    }
}
4

1 回答 1

2

正如我在评论中提到的,TabTip 立即产生 2 个其他进程,然后退出调用进程。

遍历所有打开的进程并关闭一个名为 TabTip 的进程。这将关闭两个进程。

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace VirtualKeyboard
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void Open_Click(object sender, EventArgs e)
        {
            Process.Start(@"C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe");
        }

        private void Close_Click(object sender, EventArgs e)
        {
            Process[] processlist = Process.GetProcesses();

            foreach(Process process in processlist)
            {
                if (process.ProcessName == "TabTip")
                {
                    process.Kill();
                    break;
                }
            }
        }

    }
}
于 2013-03-01T02:14:04.697 回答