当我在平板电脑模式下在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中有一些东西会阻止自动弹出窗口.有趣的是,自动弹出功能:
ComboBox带DropDownStyle = DropDown)TextBox.PasswordChar)RichTextBox)我已经通过运行它看到了关于显式弹出窗口的所有提示TabTip.exe.例如:
大多数"解决方案"都提供如下代码:
var progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink"; …Run Code Online (Sandbox Code Playgroud) 在周年纪念更新之前的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)