相关疑难解决方法(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万
查看次数

在Windows 10周年纪念版中显示触摸键盘(TabTip.exe)

在周年纪念更新之前的Windows 8和Windows 10中,可以通过启动来显示触摸键盘

C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe
Run Code Online (Sandbox Code Playgroud)

它不再适用于Windows 10周年更新; 该TabTip.exe进程正在运行,但键盘没有显示.

有没有办法以编程方式显示它?

UPDATE

我找到了一个解决方法 - 在系统托盘中点击触摸键盘图标上的假鼠标.这是Delphi中的代码

// Find tray icon window
function FindTrayButtonWindow: THandle;
var
  ShellTrayWnd: THandle;
  TrayNotifyWnd: THandle;
begin
  Result := 0;
  ShellTrayWnd := FindWindow('Shell_TrayWnd', nil);
  if ShellTrayWnd > 0 then
  begin
    TrayNotifyWnd := FindWindowEx(ShellTrayWnd, 0, 'TrayNotifyWnd', nil);
    if TrayNotifyWnd > 0 then
    begin
      Result := FindWindowEx(TrayNotifyWnd, 0, 'TIPBand', nil);
    end;
  end;
end;

// Post mouse click messages to it
TrayButtonWindow := FindTrayButtonWindow;
if TrayButtonWindow > 0 then …
Run Code Online (Sandbox Code Playgroud)

windows winapi touch windows-10 windows-10-desktop

32
推荐指数
5
解决办法
4万
查看次数

标签 统计

touch ×2

windows ×2

c# ×1

delphi ×1

winapi ×1

windows-10 ×1

windows-10-desktop ×1

winforms ×1