wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Windows 10周年纪念版中显示触摸键盘(TabTip.exe)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Windows 8和Windows 10周年纪念更新之前,可以通过启动来显示触摸键盘 C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe 它不再适用于Windows 10周年纪念更新; TabTip.exe进程正在运行,但键盘未显示。 有没有办法以编程方式显示? updatE 我发现一个解决方法 – 假鼠标点击系统托盘中的触
在Windows 8和Windows 10周年纪念更新之前,可以通过启动来显示触摸键盘
C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe

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

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

updatE

我发现@L_607_5@解决方法 – 假鼠标点击系统托盘中的触摸键盘图标。这里是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,'TrayNotifyWnd',nil);
    if TrayNotifyWnd > 0 then
    begin
      Result := FindWindowEx(TrayNotifyWnd,'TIPBand',nil);
    end;
  end;
end;

// Post mouse click messages to it
TrayButtonWindow := FindTrayButtonWindow;
if TrayButtonWindow > 0 then
begin
  Postmessage(TrayButtonWindow,WM_LBUTTONDOWN,MK_LBUTTON,$00010001);
  Postmessage(TrayButtonWindow,WM_LBUTTONUP,$00010001);
end;

更新2

我发现另一件事是,当启动TabTip.exe显示触摸键盘时,设置此注册表项可恢复旧功能

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TabletTip\1.7\EnableDesktopModeAutoInvoke=1
@H_502_22@ 好的,当用户按下系统托盘中的那个按钮时,我反向设计了什么浏览器。

基本上它创建@L_607_5@未记录的接口ITipInvocation的实例,并调用其Toggle(HWND)方法,将桌面窗口作为参数传递。顾名思义,该方法根据其当前状态显示或隐藏键盘

请注意,浏览器会在每个按钮点击创建@L_607_5@ITipInvocation实例。所以我相信实例不应该被缓存。我也注意到,资源管理器从未在获取的实例上调用Release()。我不太熟悉COM,但这看起来像@L_607_5@bug。

我在Windows 8.1,Windows 10和Windows 10周年纪念版,它的工作完美。这是C中的@L_607_5@最小例子,显然没有一些错误检查。

#include <initguid.h>
#include <Objbase.h>
#pragma hdrstop

// 4ce576fa-83dc-4F88-951c-9d0782b4e376
DEFINE_GUID(CLSID_UIHostNoLaunch,0x4CE576FA,0x83DC,0x4f88,0x95,0x1C,0x9D,0x07,0x82,0xB4,0xE3,0x76);

// 37c994e7_432b_4834_a2f7_dce1f13b834b
DEFINE_GUID(IID_ITipInvocation,0x37c994e7,0x432b,0x4834,0xa2,0xf7,0xdc,0xe1,0xf1,0x3b,0x83,0x4b);

struct ITipInvocation : IUnkNown
{
    virtual HRESULT STDMETHODCALLTYPE Toggle(HWND wnd) = 0;
};

int WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    HRESULT hr;
    hr = CoInitialize(0);

    ITipInvocation* tip;
    hr = CoCreateInstance(CLSID_UIHostNoLaunch,CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER,IID_ITipInvocation,(void**)&tip);
    tip->Toggle(GetDesktopWindow());
    tip->Release();
    return 0;
}

这是C#版本:

class Program
{
    static void Main(String[] args)
    {
        var uiHostNoLaunch = new UIHostNoLaunch();
        var tipInvocation = (ITipInvocation)uiHostNoLaunch;
        tipInvocation.Toggle(GetDesktopWindow());
        Marshal.ReleaseComObject(uiHostNoLaunch);
    }

    [ComImport,Guid("4ce576fa-83dc-4F88-951c-9d0782b4e376")]
    class UIHostNoLaunch
    {
    }

    [ComImport,Guid("37c994e7-432b-4834-a2f7-dce1f13b834b")]
    [InterfaCEType(ComInterfaCEType.InterfaceIsIUnkNown)]
    interface ITipInvocation
    {
        void Toggle(IntPtr hwnd);
    }

    [DllImport("user32.dll",SetLastError = falsE)]
    static extern IntPtr GetDesktopWindow();
}

更新:每个@EugeneK注释,我相信tabtip.exe是COM组件的COM服务器,所以如果您的代码获得REGDB_E_CLASsnoTREG,它应该可能运行tabtip.exe并重试。

大佬总结

以上是大佬教程为你收集整理的在Windows 10周年纪念版中显示触摸键盘(TabTip.exe)全部内容,希望文章能够帮你解决在Windows 10周年纪念版中显示触摸键盘(TabTip.exe)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。