【问题标题】:Keyboard on the screen in WinFormsWinForms 屏幕上的键盘
【发布时间】:2012-03-07 02:20:34
【问题描述】:

我开发了一个在触摸屏计算机上使用的 Windows 窗体应用程序。当用户单击输入框(文本框)时是否可以显示键盘?我该怎么做?

【问题讨论】:

标签: c# winforms keyboard touchscreen


【解决方案1】:

您知道 Windows 有屏幕键盘吗?

在 Windows 7 中,它是所有程序 > 附件 > 轻松访问 > 屏幕键盘。

如果你愿意,你可以自己写,但是当我不想拿起键盘时,我一直使用 Windows。

您可以创建一个快捷方式:

位置是%windir%\system32\osk.exe

所以要启动它,在 TextBox_Click 事件(或任何你想触发的事件)中

// 应该可以,我没有测试过。 System.Diagnostics.Process.Start("c:\Windows\System32\osk.exe");

只是一个更新:在我的工作机器上,我尝试运行该代码时出错(我将其构建为测试),我不得不将 osk.exe 复制到另一个目录,然后启动它,它就可以工作了。

    /// <summary>
    /// Test to show launching on screen board (osk.exe).
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void textBox1_Click(object sender, EventArgs e)
    {
        try
        {
            Process.Start(@"c:\Temp\OSK.exe");
        }
        catch (Exception error)
        {
            string err = error.ToString();
        }
    }

这段代码有效。

【讨论】:

  • 我会说使用内置的 Windows 屏幕键盘可能有点容易出错,因为它允许用户发送可能不是预期的各种击键在应用程序中。在这种情况下,定制屏幕键盘会更安全。
【解决方案2】:

您的示例为我显示 错误

“无法启动屏幕键盘”

我发现这段代码运行良好,没有任何错误:

static void StartOSK()
{
  string windir = Environment.GetEnvironmentVariable("WINDIR");
  string osk = null;

  if (osk == null)
  {
    osk = Path.Combine(Path.Combine(windir, "sysnative"), "osk.exe");
    if (!File.Exists(osk))
      osk = null;
  }

  if (osk == null)
  {
    osk = Path.Combine(Path.Combine(windir, "system32"), "osk.exe");
    if (!File.Exists(osk))
    {
      osk = null;
    }
  }

  if (osk == null)
    osk = "osk.exe";

  Process.Start(osk);
}

【讨论】:

    【解决方案3】:

    我认为您必须创建一个新表单来创建键盘并在文本框单击中启动此表单

    【讨论】:

      【解决方案4】:

      我认为你可以使用。 System.Diagnostics.process.start

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        • 2013-03-11
        • 2013-09-22
        • 1970-01-01
        相关资源
        最近更新 更多