相关疑难解决方法(0)

在WinForms输入焦点上自动弹出平板触控键盘

当我在平板电脑模式下在Windows 10上运行WinForms(或Delphi,请参见最后)应用程序时,当输入框被聚焦时,触摸键盘不会自动弹出.

我相信这应该自动发生,无需任何额外的代码/设置.


对于测试,我有一个单一TextBox控件的最简单的VS 2015 WinForms桌面应用程序.

在此输入图像描述

它只是Visual Studio创建的默认Windows窗体应用程序C#项目.没有添加代码,没有更改属性.刚刚TextBox添加,通过从工具箱中删除(再次没有更改属性):

this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox1.Location = new System.Drawing.Point(64, 27);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 0;
Run Code Online (Sandbox Code Playgroud)

要验证我的假设是弹出应该是自动的:

  • 我试图notepad.exe在Windows 10上运行Windows XP版本.它会自动弹出触摸键盘.我怀疑Windows XP对触摸键盘有任何明确的支持.

  • 我也尝试了一些古老的MFC应用程序(例如2005年的FileZilla 2.2.15).它还会在所有输入框上弹出触摸键盘.同样,我很确定,MFC也没有明确支持触摸键盘.

  • 对于基于wxWidgets构建的应用程序(例如FileZilla 3.x)也是如此.


看起来WinForms中有一些东西会阻止自动弹出窗口.有趣的是,自动弹出功能:

  • for(editable)组合框(ComboBoxDropDownStyle = DropDown)
  • 用于密码模式下的文本框(TextBox.PasswordChar)
  • 用于富文本框(RichTextBox)
  • 当硬件键盘被"移除"时输入框具有焦点(我通过翻转联想瑜伽笔记本上的屏幕来测试),但从未过后.

我已经通过运行它看到了关于显式弹出窗口的所有提示TabTip.exe.例如:

大多数"解决方案"都提供如下代码:

var progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink"; …
Run Code Online (Sandbox Code Playgroud)

c# windows delphi touch winforms

39
推荐指数
4
解决办法
2万
查看次数

如何在C#WinForms中使用Windows屏幕键盘

  • VS 2010
  • 开发在64位操作系统上运行的32位应用程序(Windows 7,Windows 8 - 桌面应用程序)
  • C#
  • .NET 4.0
  • 的WinForms

osk.exe从应用程序启动Windows屏幕键盘()时发现了许多线程,但我遇到了一些问题.这似乎是因为我在64位操作系统上运行32位应用程序.我已经尝试过WooCaSh发布的代码: WinForms屏幕上的键盘

但是这三种不同的路径都不适合我.对于sysnative路径,Process.Start失败并显示 "无法找到指定的路径".对于system32osk.exe路径,我得到"无法启动屏幕键盘"错误对话框.

我发现了一个可能的解决方法在这里,这是一个小比我一直在寻找(由eryang后)更加复杂:http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/10ebc62f-e6d7 -4072-9fd1-ea3784a0966f /

  1. 有没有更简单或正确的方法来做到这一点?
  2. 我希望在平板电脑上运行我的应用程序会在用户选择文本框时自动启动屏幕键盘,但没有运气.这是正常的还是我错过了什么?我发现在桌面模式(我的应用程序是)时,键盘不会在Windows 8中自动启动:http://www.bleepingcomputer.com/forums/t/480250/keyboard-does-not-pop-up - 自动/显然它适用于Windows 7平板电脑,但我无法测试,因为我这里只有Windows 8平板电脑.

c# windows on-screen-keyboard 32bit-64bit winforms

18
推荐指数
3
解决办法
5万
查看次数

如何在winform和wpf中以编程方式鼠标移动,单击,右键单击和按键等?

如何在winform和wpf中以编程方式鼠标移动,单击,右键单击和按键等.如果可能的话,请帮我编写代码片段.

c# wpf winforms

14
推荐指数
1
解决办法
2万
查看次数

How to open the tablet-mode on-screen-keyboard in C#?

I want to start the new On-Screen-Keyboard (OSK) using code. You can find this one in the taskbar:

新OSK任务栏

(if not there you find it by right clicking the taskbar).

I have already tried the regular:

System.Diagnostics.Process.Start("osk.exe");
Run Code Online (Sandbox Code Playgroud)

But I want to start the other one (not in window mode). Here you see which OSK I want and which one not:

OSK wanted version distinction

How can I start that version? And how can I start it in a certain setting (if possible)?

c# on-screen-keyboard

7
推荐指数
1
解决办法
75
查看次数

在桌面下打开和关闭Windows 8触摸键盘tabtip

我需要从Windows 8(桌面winform .NET)下的程序中关闭tabtip键盘.我发现需要时打开它,运行TabTip.exe来显示Windows 8 Touch键盘,但我无法在需要时关闭它!我试图用process.kill来杀死这个过程,但是它没有用,有人知道怎么做了吗?

关心让 - 克劳德

.net windows keyboard

5
推荐指数
1
解决办法
5009
查看次数

当文本字段聚焦时,Windows 平板电脑触摸键盘不会弹出

当焦点进入 时TextField,触摸屏键盘不会出现。

我想这是因为 JavaFx 应用程序不符合 Metro 标准?

我找到了一种弹出键盘的方法:

public class Controller {

   public static void showVirtualKeyboard(
      ObservableValue<? extends Boolean> observable,
      Boolean                            oldState,
      Boolean                            hasFocus )
   {
      if( hasFocus ) {
         try {
            Runtime.getRuntime().exec(
               "cmd /c \"C:\\Program Files\\Common Files\\microsoft " +
               "shared\\ink\\tabtip.exe\"" );
         }
         catch( final Throwable t ) {
            LogHelper.severe( t );
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在任何情况下:

final class VisualAnalysis extends GridPane implements IView {

   private final TextField tech = new TextField();

   @Override
   public void setController( Controller ctrl …
Run Code Online (Sandbox Code Playgroud)

java tablet-pc windows-8 javafx-8

5
推荐指数
1
解决办法
1695
查看次数

在 Windows 上的自定义控件中处理任意文本输入的正确、现代方法是什么?WM_CHAR?注塑机?TSF?

我希望能够支持自定义 Windows 控件中的文本输入,就像 EDIT 和 Rich Edit 控件已经做的那样,但不对其中任何一个控件进行子类化。该控件当前使用 Direct2D 和 DirectWrite 绘制文本,并在带有平台更新的 Windows Vista SP1 或更高版本上运行(如果我决定需要更新的 Direct2D 和 DirectWrite 功能,我可能会将其更改为带有平台更新的 Windows 7 SP1 或更高版本,假设这些功能是在那里可用或仅在 Windows 8 上可用,但这是一个不同的问题......)

就其价值而言,在 OS XI 上我会使用NSTextInputClient,在 GTK+ 上我会使用GtkIMContext。我正在谈论的就是这样的事情。

显而易见的选择是使用WM_CHAR,如果我正确收集的话,如果窗口类是用 注册的RegisterClassW(),那么它本身就是 UTF-16 ,因此无论位置如何都应该“正常工作”。然而,WM_CHAR是由 生成的TranslateMessage(),并且它的文档说没有办法确定 a 是否WM_CHAR已生成,因为TranslateMessage()总是返回非零。我需要能够确定当前的键盘消息是否将由文本系统处理(因此应该被忽略);这尤其正确,因为所有非文本键都需要以独立于布局的方式处理(我已经有了)。

我还在 Windows 7 示例代码中看到了 IMM API 和文本服务框架。我不确定一个是否比另一个更好,而且他们似乎都做同样的事情。他们吗?

就 IMM 而言,有许多WM_IMM_xxx消息我不确定是否应该忽略,并且我发现的每个参考文献似乎都不同意我是否应该在 Unicode 窗口中处理它们。 ..此外,上述了解 IMM 是否会处理给定按键事件的问题仍然悬而未决;有办法吗?

TSF 有一个称为 ACP 的概念,它似乎允许我使用我想要的任何文本存储格式来存储我实际要使用的文本(即,不是正在进行的合成)。这是真的?我希望能够将文本存储为带有属性的 UTF-8,在绘图时转换为 …

winapi input text-services-framework ime directwrite

5
推荐指数
1
解决办法
982
查看次数

确定Windows 10 Touch键盘是可见还是隐藏

我试图找出Windows 10虚拟触摸键盘是否可见,以确定是否从我的应用程序打开它.以下代码已经工作正常,直到最新的Windows 10更新15063或可能在它之前.好像微软改变了窗口样式的东西,但我无法弄明白.

    public static bool IsKeyboardVisible()
    {
        IntPtr keyboardHandle = GetKeyboardWindowHandle();
        // Specifies we wish to retrieve window styles.
        int GWL_STYLE = -16;

        //The window is disabled. See http://msdn.microsoft.com/en-gb/library/windows/desktop/ms632600(v=vs.85).aspx.
        UInt32 WS_VISIBLE =               0x10000000;
        UInt32 WS_DISABLED =              0x08000000;
        UInt32 WS_POPUP =                 0x80000000;


        bool visible = false;
        bool disabled = false;

        if (keyboardHandle != IntPtr.Zero)
        {
            UInt32 style = GetWindowLong(keyboardHandle, GWL_STYLE);
            visible = ((style & WS_VISIBLE) == WS_VISIBLE);
            disabled = ((style & WS_DISABLED) == WS_DISABLED); // ref https://stackoverflow.com/questions/11065026/get-window-state-of-another-process
            log.InfoFormat("style:{0:X4} visible:{1} disabled:{2}", …
Run Code Online (Sandbox Code Playgroud)

c# windows winapi touch virtual-keyboard

4
推荐指数
1
解决办法
2318
查看次数

在 Windows 10 上从非管理员帐户启动触摸键盘 (Tabtip.exe)

我通过按下按钮从我的应用程序中以管理员帐户启动触摸键盘,如下所示:

 var progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
 var keyboardPath = Path.Combine(progFiles, "TabTip.exe");
 Process.Start(keyboardPath);
Run Code Online (Sandbox Code Playgroud)

但是,对于非管理员帐户,触摸键盘不会启动。

我尝试了各种技术(使用 ShellExecuteEx、CreateProcessWithLogonW、模拟等),但都没有成功。

是否有可能做到这一点?

c# uac windows-10

0
推荐指数
1
解决办法
4634
查看次数