Показать сенсорную клавиатуру (TabTip.exe) в выпуске Windows 10 Anniversary

В Windows 8 и Windows 10 до обновления Anniversary можно было отобразить сенсорную клавиатуру, запустив

  C:  Program Files  Common Files  microsoft shared  ink   TabTip.exe  

Он больше не работает в обновлении Windows 10 Anniversary; процесс TabTip.exe запущен, но клавиатура не отображается.

Есть ли способ показать его программно?

ОБНОВЛЕНИЕ

Я нашел обходной путь – поддельный щелчок мышью по значку сенсорной клавиатуры на панели задач. Вот код в Delphi

 //Функция поиска окна значка в трее FindTrayButtonWindow: THandle; var ShellTrayWnd: THandle;  TrayNotifyWnd: THandle; begin Результат: = 0;  ShellTrayWnd: = FindWindow ('Shell_TrayWnd', ноль);  если ShellTrayWnd> 0, то начать TrayNotifyWnd: = FindWindowEx (ShellTrayWnd, 0, 'TrayNotifyWnd', nil);  если TrayNotifyWnd> 0, то начало Результат: = FindWindowEx (TrayNotifyWnd, 0, 'TIPBand', nil);  конец;  end; end;//Отправляем сообщения щелчка мыши в itTrayButtonWindow: = FindTrayButtonWindow; если TrayButtonWindow> 0, то начинаем PostMessage (TrayButtonWindow, WM_LBUTTONDOWN, MK_LBUTTON, $ 00010001);  PostMessage (TrayButtonWindow, WM_LBUTTONUP, 0, $ 00010001); end;  

ОБНОВЛЕНИЕ 2

Еще кое-что, что я нашел заключается в том, что установка этого раздела реестра восстанавливает старую функциональность при запуске TabTip.exe показывает сенсорную клавиатуру

  HKEY_LOCAL_MACHINE  SOFTWARE  Microsoft  TabletTip  1.7  EnableDesktopModeAutoInvoke = 1  

29

Хорошо, я перепроектировал, что делает проводник, когда пользователь нажимает эту кнопку на панели задач.

Обычно он создает экземпляр недокументированного интерфейса ITipInvocation и вызывает его Toggle (HWND) , передав окно рабочего стола в качестве аргумента. Как следует из названия, метод либо показывает, либо скрывает клавиатуру в зависимости от ее текущего состояния.

Обратите внимание, что проводник создает экземпляр ITipInvocation при каждом нажатии кнопки. Поэтому я считаю, что экземпляр не следует кэшировать. Я также заметил, что проводник никогда не вызывает Release () для полученного экземпляра. Я не слишком знаком с COM, но это похоже на ошибку.

Я тестировал это в Windows 8.1, Windows 10 и Windows 10 Anniversary Edition, и он отлично работает. Вот минимальный пример на C, в котором явно отсутствуют некоторые проверки на ошибки.

  #include  #include  #pragma hdrstop//4ce576fa-83dc-4F88-951c-9d0782b4e376DEFINE_GUID (CLSID_UIHostNoLaunch, 0x4CE576FA, 0x83DC, 0x4f88, 0x95, 0x1C, 0x9D, 0x07, 0x82, 0xB4, 0xE3, 0x76);//37c994e7_432b_4834_a2f7_dce1f13b834bDEFINE_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 WinMainstance, hPINSTANCE, HINSTANCE, HINSTANCE,  , int nCmdShow) {HRESULT час;  hr = CoInitialize (0);  ITipInvocation * подсказка;  hr = CoCreateInstance (CLSID_UIHostNoLaunch, 0, CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER, IID_ITipInvocation, (void **) & tip);  подсказка-> Переключить (GetDesktopWindow ());  подсказка-> Release ();  return 0;}  

Вот и версия C #:

  class Program {static void Main (string [] args)  {var uiHostNoLaunch = новый UIHostNoLaunch ();  var tipInvocation = (ITipInvocation) uiHostNoLaunch;  tipInvocation.Toggle (GetDesktopWindow ());  Marshal.ReleaseComObject (uiHostNoLaunch);  } [ComImport, Guid ("4ce576fa-83dc-4F88-951c-9d0782b4e376")] класс UIHostNoLaunch {} [ComImport, Guid ("37c994e7-432b-4834-a2f7-dce1f13b834b")] интерфейс [TypeInterfaceInterface)  ITipInvocation {void Toggle (IntPtr hwnd);  } [DllImport ("user32.dll", SetLastError = false)] static extern IntPtr GetDesktopWindow ();}  

Обновление: для @EugeneK комментарии, я считаю, что tabtip.exe является COM-сервером для рассматриваемого COM-компонента, поэтому, если ваш код получает REGDB_E_CLASSNOTREG , он, вероятно, должен запустить tabtip.exe и повторите попытку.

Улучшите этот ответ
отредактировано 10 марта ’17 в 21:07
ответил 01 дек. ’16 в 22:34
  • 1
    Это работает только для меня, если TabTip.exe запущен, без этого процесса он не работает с ‘Класс не зарегистрирован’ ошибка. – EugeneK 05 дек. ’16 в 19:36
  • 2
    Спасибо. Теперь я пытаюсь найти способ также определять и контролировать видимость. Старый “hwnd = FindWindow (” IPTip_Main_Window “, NULL)” больше не полностью эффективен. Проверка возвращенного HWND на нуль/видимость всегда возвращает истину. Однако «PostMessage (hwnd, WM_SYSCOMMAND, (int) SC_CLOSE, 0)» по-прежнему будет скрывать OSK. – Грег 02 янв., 17:52
  • 2
    @Greg, чтобы проверить, открыта ли клавиатура, я прочитал стиль окна. Клавиатура открыта, если выполняются все эти три условия: 1) FindWindow вернул ненулевое значение, 2) установлен WS_VISIBLE и 3) WS_DISABLED НЕ установлен. Я мог бы добавить пример кода позже – Торвин 02 января ’17 в 21:39
  • 3
    Проверка WS_DISABLED – это то, чего мне не хватало. Теперь ваше решение предлагает полный обходной путь! Чтобы показать, я создаю tabtip.exe, затем проверяю, не отображается ли он, и при необходимости вызываю ваш ITipInvocation :: Toggle. – Грег 02 янв., 23:06
  • 1
    @kayleeFrye_onDeck, отправьте отдельный вопрос – Торвин 10 окт., 17:44
| показать 12 дополнительных комментариев

Хорошо, я перепроектировал, что делает проводник, когда пользователь нажимает эту кнопку в на панели задач.

В основном он создает экземпляр недокументированного интерфейса ITipInvocation и вызывает его метод Toggle (HWND) , передача окна рабочего стола в качестве аргумента. Как следует из названия, метод либо показывает, либо скрывает клавиатуру в зависимости от ее текущего состояния.

Обратите внимание, что проводник создает экземпляр ITipInvocation при каждом нажатии кнопки. Поэтому я считаю, что экземпляр не следует кэшировать. Я также заметил, что проводник никогда не вызывает Release () для полученного экземпляра. Я не слишком знаком с COM, но это похоже на ошибку.

Я тестировал это в Windows 8.1, Windows 10 и Windows 10 Anniversary Edition, и он отлично работает. Вот минимальный пример на C, в котором явно отсутствуют некоторые проверки на ошибки.

  #include  #include  #pragma hdrstop//4ce576fa-83dc-  4F88-951c-9d0782b4e376DEFINE_GUID (CLSID_UIHostNoLaunch, 0x4CE576FA, 0x83DC, 0x4f88, 0x95, 0x1C, 0x9D, 0x07, 0x82, 0xB4, 0xE3, 0x76);//37c994e7_432b_4834_a2f7_dce1f13b834bDEFINE_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, hCmdLine)  hr = CoInitialize (0);  ITipInvocation * подсказка;  hr = CoCreateInstance (CLSID_UIHostNoLaunch, 0, CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER, IID_ITipInvocation, (void **) & tip);  подсказка-> Переключить (GetDesktopWindow ());  подсказка-> Release ();  return 0;}  

Вот и версия C #:

  class Program {static void Main (string [] args)  {var uiHostNoLaunch = новый UIHostNoLaunch ();  var tipInvocation = (ITipInvocation) uiHostNoLaunch;  tipInvocation.Toggle (GetDesktopWindow ());  Маршал. ReleaseComObject (uiHostNoLaunch);  } [ComImport, Guid ("4ce576fa-83dc-4F88-951c-9d0782b4e376")] класс UIHostNoLaunch {} [ComImport, Guid ("37c994e7-432b-4834-a2f7-dce1f13b834b")] интерфейс [TypeInterfaceInterface)  ITipInvocation {void Toggle (IntPtr hwnd);  } [DllImport ("user32.dll", SetLastError = false)] static extern IntPtr GetDesktopWindow ();}  

Обновление: для @EugeneK комментарии, я считаю, что tabtip.exe является COM-сервером для рассматриваемого COM-компонента, поэтому, если ваш код получает REGDB_E_CLASSNOTREG , он, вероятно, должен запускать tabtip.exe и повторите попытку.


6

Единственное работающее решение, которое я нашел, – это отправить PostMessage, как вы упомянули в ответе 1. Вот его версия C # на случай, если кому-то это понадобится.

   [DllImport ("user32.dll", CharSet = CharSet.Unicode)] частный статический extern IntPtr FindWindow (строка sClassName, строка sAppName); [DllImport ("user32.dll", CharSet = CharSet.Unicode)]  статический extern IntPtr FindWindowEx (IntPtr parentHandle, IntPtr childAfter, строка lclassName, строка windowTitle);  [DllImport ("User32.Dll", EntryPoint = "PostMessageA")] статический extern bool PostMessage (IntPtr hWnd, uint msg, int wParam, int lParam); var trayWnd = FindWindow ("Shell_TrayWnd", null); var nullIntPtr = new  IntPtr (0); если (trayWnd! = NullIntPtr) {var trayNotifyWnd = FindWindowEx (trayWnd, nullIntPtr, "TrayNotifyWnd", null);  если (trayNotifyWnd! = nullIntPtr) {var tIPBandWnd = FindWindowEx (trayNotifyWnd, nullIntPtr, "TIPBand", null);  if (tIPBandWnd! = nullIntPtr) {PostMessage (tIPBandWnd, (UInt32) WMessages.WM_LBUTTONDOWN, 1, 65537);  PostMessage (tIPBandWnd, (UInt32) WMessages.WM_LBUTTONUP, 1, 65537);  }}} общедоступное перечисление WMessages: int {WM_LBUTTONDOWN = 0x201, WM_LBUTTONUP = 0x202, WM_KEYDOWN = 0x100, WM_KEYUP = 0x101, WH_KEYBOARD_LL = 13, WH_MOUSE_LL = 14,}  

# >

Улучшите этот ответ
отредактировал 26 сен 2016 в 18:11
ответ дан 8 сен ’16 в 07:55
  • Спасибо mikesl, работал отлично. Просто отсутствует объявление для nullIntPtr, которое я создал с помощью var nullIntPtr = IntPtr.Zero; – Вода 26 сен 2016, 02:51
  • 2
    Хотя это работает, для этого требуется, чтобы значок в трее был доступен. К сожалению, это может быть скрыто пользователем. – JimmyBlu, 27 сен 2016, в 10:46
  • @mikesl, как можно использовать его, чтобы показать только клавиатуру телефона – Rawat 4 мая 2018, 20:51
  • Это не работает в Windows 8.0. TIPBand является дочерним элементом ReBarWindow32, а не TrayNotifyWnd. – Андерс 11 сен ’20 в 21:57
добавить комментарий |

Единственное работающее решение, которое я нашел, – это отправка PostMessage, как вы упомянули в ответе 1. Вот его версия для C #. на случай, если кому-то это понадобится.

  [DllImport ("user32.dll", CharSet = CharSet.Unicode)] private static extern IntPtr FindWindow (string sClassName, string sAppName); [  DllImport ("user32.dll", CharSet = CharSet.Unicode)] статический внешний IntPtr FindWindowEx (IntPtr parentHandle, IntPtr childAfter, строка lclassName, строка windowTitle);  [DllImport ("User32.Dll", EntryPoint = "PostMessageA")] статический extern bool PostMessage (IntPtr hWnd, uint msg, int wParam, int lParam); var trayWnd = FindWindow ("Shell_TrayWnd", null); var nullIntPtr = new  IntPtr (0); если (trayWnd! = NullIntPtr) {var trayNotifyWnd = FindWindowEx (trayWnd, nullIntPtr, "TrayNotifyWnd", null);  если (trayNotifyWnd! = nullIntPtr) {var tIPBandWnd = FindWindowEx (trayNotifyWnd, nullIntPtr, "TIPBand", null);  if (tIPBandWnd! = nullIntPtr) {PostMessage (tIPBandWnd, (UInt32) WMessages.WM_LBUTTONDOWN, 1, 65537);  PostMessage (tIPBandWnd, (UInt32) WMessages.WM_LBUTTONUP, 1, 65537);  }}} общедоступное перечисление WMessages: int {WM_LBUTTONDOWN = 0x201, WM_LBUTTONUP = 0x202, WM_KEYDOWN = 0x100, WM_KEYUP = 0x101, WH_KEYBOARD_LL = 13, WH_MOUSE_LL = 14,}  
6

Я обнаружил 4 ситуации при попытке открыть сенсорную клавиатуру в Windows 10 Anniversary Update

  1. Клавиатура видна – когда присутствует “IPTIP_Main_Window”, НЕ отключен и ЕСТЬ виден
  2. Клавиатура не видна – когда «IPTIP_Main_Window» присутствует, но отключено
  3. Клавиатура не видна – когда «IPTIP_Main_Window» присутствует, но НЕ отключен и NOT visible
  4. Клавиатура не видна – когда “IPTIP_Main_Window” НЕ присутствует

1 – ничего не делать

2 + 3 – активация через COM

4 – наиболее интересный сценарий. На некоторых устройствах запуск TabTip открывает сенсорную клавиатуру, на некоторых – нет. Таким образом, мы должны запустить процесс TabTip, дождаться появления окна «IPTIP_Main_Window», проверить его на видимость и активировать через COM, если необходимо.

Я делаю небольшую библиотеку для своего проекта, вы можете ее использовать – osklib

Улучшите этот ответ
ответил 4 апр. ’17 в 15:14
  • Я думаю, что различное поведение между отключением/открытием клавиатуры также связано с настройкой реестра EnableDesktopModeAutoInvoke. Спасибо за исследование и библиотеку! – r618 06 окт. ’17 в 19:02
добавить комментарий |

Я обнаружил 4 ситуации при попытке открыть сенсорную клавиатуру в Windows 10 Anniversary Update

  1. Клавиатура видна – когда присутствует “IPTIP_Main_Window”, НЕ отключен и IS виден
  2. Клавиатура не видна – когда «IPTIP_Main_Window» присутствует, но отключено
  3. Клавиатура не отображается – когда «IPTIP_Main_Window» присутствует, но НЕ отключен и НЕ visible
  4. Клавиатура не видна – когда “IPTIP_Main_Window” НЕ присутствует

1 – делать нечего

2 + 3 – активация через COM

4 – наиболее интересный сценарий. На некоторых устройствах запуск TabTip открывает сенсорную клавиатуру, на некоторых – нет. Поэтому мы должны запустить процесс TabTip, дождаться появления окна «IPTIP_Main_Window», проверить его на видимость и, если необходимо, активировать через COM.

Я делаю небольшую библиотеку для своего проекта, вы можете ее использовать – osklib


6

У меня тоже была такая же проблема. Это заняло у меня много времени и головной боли, но благодаря Алексею и Торвину я наконец-то заставил его работать на Win 10 1709. Сложностью была проверка видимости. Возможно, OSKlib Nuget можно обновить. Позвольте мне подвести итоги всего предложения (наверняка в моем коде теперь есть ненужные строки):

  using System; using System.Collections.Generic; using System.Linq; using System  .Text; использование System.Diagnostics; использование System.ComponentModel; использование Osklib.Interop; использование System.Runtime.InteropServices; использование System.Threading; пространство имен OSK {общедоступный статический класс OnScreenKeyboard {static OnScreenKeyboard () {var version = Environment.OSVersion.  Версия;  switch (version.Major) {case 6: switch (version.Minor) {case 2://Windows 10 (нормально) break;  } сломать;  по умолчанию: перерыв;  }} private static void StartTabTip () {var p = Process.Start (@ "C:  Program Files  Common Files  Microsoft Shared  ink  TabTip.exe");  int handle = 0;  while ((handle = NativeMethods.FindWindow ("IPTIP_Main_Window", ""))  0;  if (active) {//не проверять стиль - просто закройте NativeMethods.SendMessage (handle, NativeMethods.WM_SYSCOMMAND, NativeMethods.SC_CLOSE, 0);  } вернуть активный;  } public static bool IsOpen () {return GetIsOpen1709 () ??  GetIsOpenLegacy ();  } [DllImport ("user32.dll", SetLastError = false)] частный статический extern IntPtr FindWindowEx (родительский IntPtr, IntPtr после, строка className, заголовок строки = null);  [DllImport ("user32.dll", SetLastError = false)] частный статический внешний uint GetWindowLong (IntPtr wnd, int index);  частный статический бул?  GetIsOpen1709 () {//если есть окно верхнего уровня - клавиатура закрыта var wnd = FindWindowEx (IntPtr.Zero, IntPtr.Zero, WindowClass1709, WindowCaption1709);  если (wnd! = IntPtr.Zero) вернуть false;  var parent = IntPtr.Zero;  для (;;) {родительский = FindWindowEx (IntPtr.Zero, родительский, WindowParentClass1709);  if (parent == IntPtr.Zero) вернет ноль; //больше нет окон, состояние клавиатуры неизвестно//если это дочерний элемент окна WindowParentClass1709 - клавиатура открыта wnd = FindWindowEx (parent, IntPtr.Zero, WindowClass1709, WindowCaption1709);  если (wnd! = IntPtr.Zero) вернуть true;  }} private static bool GetIsOpenLegacy () {var wnd = FindWindowEx (IntPtr.Zero, IntPtr.Zero, WindowClass);  если (wnd == IntPtr.Zero) вернуть false;  var style = GetWindowStyle (wnd);  вернуть style.HasFlag (WindowStyle.Visible) &&! style.HasFlag (WindowStyle.Disabled);  } закрытая константная строка WindowClass = "IPTip_Main_Window";  частная константная строка WindowParentClass1709 = "ApplicationFrameWindow";  закрытая константная строка WindowClass1709 = "Windows.UI.Core.CoreWindow";  закрытая константная строка WindowCaption1709 = "Приложение для ввода текста Microsoft";  частное перечисление WindowStyle: uint {Disabled = 0x08000000, Visible = 0x10000000,} частное статическое WindowStyle GetWindowStyle (IntPtr wnd) {return (WindowStyle) GetWindowLong (wnd, -16);  }} [ComImport] [Guid ("37c994e7-432b-4834-a2f7-dce1f13b834b")] [InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] интерфейс ITipInvocation {void Toggle (IntPtr hwnd);  } внутренний статический класс NativeMethods {[DllImport ("user32. dll ", EntryPoint =" FindWindow ")] внутреннее статическое внешнее int FindWindow (строка lpClassName, строка lpWindowName); [DllImport (" user32.dll ", EntryPoint =" SendMessage ")] внутреннее статическое внешнее int SendMessage (int hWnd, uint Msg  , int wParam, int lParam); [DllImport ("user32.dll", EntryPoint = "GetDesktopWindow", SetLastError = false)] внутренний статический extern IntPtr GetDesktopWindow (); [DllImport ("user32.dll", EntryPoint = "GetWindowLong"  )] внутренняя статическая extern int GetWindowLong (int hWnd, int nIndex); внутренняя const int GWL_STYLE = -16; внутренняя const int GWL_EXSTYLE = -20; внутренняя const int WM_SYSCOMMAND = 0x0112; внутренняя const int SC_CLOSE = 0xF060; внутренняя const int WS_DISABLED =  0x08000000; внутренняя const int WS_VISIBLE = 0x10000000;}}  

Улучшите этот ответ
ответил 31 января ’18 в 14:54
  • Я тестировал и не обнаружил, что TapTip был открыт . Windows 10 Pro x64. ProcessExplorer: C: Windows SystemApps InputApp_cw5n1h2txyewy WindowsInternal.ComposableShell.Experiences.TextInput.InputApp.exe – Насенбаер, 20 февраля 2019 г., 18:28
добавить комментарий |

У меня тоже была такая же проблема. Это заняло у меня много времени и головной боли, но благодаря Алексею и Торвину я наконец-то заставил его работать на Win 10 1709. Сложностью была проверка видимости. Возможно, OSKlib Nuget можно обновить. Позвольте мне подвести итоги всего предложения (наверняка в моем коде теперь есть ненужные строки):

  using System; using System.Collections.Generic; using System.Linq; using System  .Text; использование System.Diagnostics; использование System.ComponentModel; использование Osklib.Interop; использование System.Runtime.InteropServices; использование System.Threading; пространство имен OSK {общедоступный статический класс OnScreenKeyboard {static OnScreenKeyboard () {var version = Environment.OSVersion.  Версия;  switch (version.Major) {case 6: switch (version.Minor) {case 2://Windows 10 (нормально) break;  } сломать;  по умолчанию: перерыв;  }} private static void StartTabTip () {var p = Process.Start (@ "C:  Program Files  Common Files  Microsoft Shared  ink  TabTip.exe");  int handle = 0;  while ((handle = NativeMethods.FindWindow ("IPTIP_Main_Window", ""))  0;  if (active) {//не проверять стиль - просто закройте NativeMethods.SendMessage (handle, NativeMethods.WM_SYSCOMMAND, NativeMethods.SC_CLOSE, 0);  } вернуть активный;  } public static bool IsOpen () {return GetIsOpen1709 () ??  GetIsOpenLegacy ();  } [DllImport ("user32.dll", SetLastError = false)] частный статический extern IntPtr FindWindowEx (родительский IntPtr, IntPtr после, строка className, заголовок строки = null);  [DllImport ("user32.dll", SetLastError = false)] частный статический внешний uint GetWindowLong (IntPtr wnd, int index);  частный статический бул?  GetIsOpen1709 () {//если есть окно верхнего уровня - клавиатура закрыта var wnd = FindWindowEx (IntPtr.Zero, IntPtr.Zero, WindowClass1709, WindowCaption1709);  если (wnd! = IntPtr.Zero) вернуть false;  var parent = IntPtr.Zero;  для (;;) {родительский = FindWindowEx (IntPtr.Zero, родительский, WindowParentClass1709);  if (parent == IntPtr.Zero) вернет ноль; //больше нет окон, состояние клавиатуры неизвестно//если это дочерний элемент окна WindowParentClass1709 - клавиатура открыта wnd = FindWindowEx (parent, IntPtr.Zero, WindowClass1709, WindowCaption1709);  если (wnd! = IntPtr.Zero) вернуть true;  }} private static bool GetIsOpenLegacy () {var wnd = FindWindowEx (IntPtr.Zero, IntPtr.Zero, WindowClass);  если (wnd == IntPtr.Zero) вернуть false;  var style = GetWindowStyle (wnd);  вернуть style.HasFlag (WindowStyle.Visible) &&! style.HasFlag (WindowStyle.Disabled);  } закрытая константная строка WindowClass = "IPTip_Main_Window";  частная константная строка WindowParentClass1709 = "ApplicationFrameWindow";  закрытая константная строка WindowClass1709 = "Windows.UI.Core.CoreWindow";  закрытая константная строка WindowCaption1709 = "Приложение для ввода текста Microsoft";  частное перечисление WindowStyle: uint {Disabled = 0x08000000, Visible = 0x10000000,} частное статическое WindowStyle GetWindowStyle (IntPtr wnd) {return (WindowStyle) GetWindowLong (wnd, -16);  }} [ComImport] [Guid ("37c994e7-432b-4834-a2f7-dce1f13b834b")] [InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] интерфейс ITipInvocation {void Toggle (IntPtr hwnd);  } внутренний статический класс NativeMethods {[DllImport ("user32.dll", EntryPoint = "FindWindow")] внутренний статический внешний int FindWindow (строка lpClassName, строка lpWindowName);  [DllImport ("user32.dll", EntryPoint = "SendMessage")] внутренний статический extern int SendMessage (int hWnd, uint Msg, int wParam, int lParam);  [DllImport ("user32. dll ", EntryPoint =" GetDesktopWindow ", SetLastError = false)] внутренний статический extern IntPtr GetDesktopWindow (); [DllImport (" user32.dll ", EntryPoint =" GetWindowLong ")] внутренний статический extern int GetWindowLong (int hWnd, int nIndex)  ; внутренняя константа int GWL_STYLE = -16; внутренняя константа int GWL_EXSTYLE = -20; внутренняя константа int WM_SYSCOMMAND = 0x0112; внутренняя константа int SC_CLOSE = 0xF060; внутренняя константа int WS_DISABLED = 0x08000000; внутренняя константа int WS_VISIBLE = 0}  

4

Есть еще некоторая загадка как сенсорная клавиатура становится видимой с помощью юбилейного обновления Windows 10. На самом деле у меня точно такая же проблема, и вот самая последняя информация, которую я нашел:

  • Windows 10 1607 работает в двух режимах: рабочий стол и планшет. В режиме рабочего стола TabTip.exe может вызываться, но не отображается. В режиме планшета все работает. rks нормально: TabTip.exe показывает себя при вызове. Таким образом, 100% рабочий обходной путь – это перевести компьютер в режим планшета, но кто хочет, чтобы его настольный компьютер/ноутбук работал в режиме планшета? Во всяком случае, не я!

  • Вы можете использовать ключ “ EnableDesktopModeAutoInvoke ” (HKCU, DWORD установлен в 1) и на некоторых На компьютерах под управлением 1607 он отлично работал в режиме рабочего стола. Но по неизвестным причинам он не работает на моей сенсорной панели HP.

Обратите внимание, что это значение реестра – «Показывать сенсорную клавиатуру на “режим рабочего стола, если нет подключенной клавиатуры” в параметрах Windows> touch

  • Вы можете использовать код Торвина, чтобы показать TabTip.exe (как уже упоминалось, TabTip.exe должен быть запущенным, когда вы делаете вещи COM), он работает нормально на некоторых компьютерах под управлением 1607 (включая мой тачпад HP! ура!) Но он ничего не будет делать на некоторых других компьютерах с той же сборкой Windows.

Пока что протестировано на 4 разных компьютерах, и я не могу добиться, чтобы что-то работало нормально на всех …

Улучшите этот ответ
отредактировано 13 марта ’17 в 16:16
13 марта ’17 в 16:11
добавить комментарий |

До сих пор остается загадкой, как сенсорная клавиатура становится видимой с помощью юбилейного обновления Windows 10. На самом деле у меня такая же проблема, и вот самая последняя информация, которую я нашел:

  • Windows 10 1607 работает в двух режимах: рабочий стол и планшет . В режиме рабочего стола TabTip.exe можно вызвать, но он не отображается. В режиме планшета все работает нормально: TabTip.exe показывает себя при вызове. Таким образом, 100% рабочий обходной путь – это перевести компьютер в режим планшета, но кто хочет, чтобы его настольный компьютер/ноутбук работал в режиме планшета? Во всяком случае, не я!

  • Вы можете использовать ключ “ EnableDesktopModeAutoInvoke ” (HKCU, DWORD установлен в 1) и на некоторых На компьютерах под управлением 1607 он отлично работал в режиме рабочего стола. Но по неизвестным причинам он не работает на моей сенсорной панели HP.

Обратите внимание, что это значение реестра – «Показывать сенсорную клавиатуру на «режим рабочего стола, если нет подключенной клавиатуры» в параметрах Windows> сенсорный

  • Вы можете использовать код Торвина для отображения TabTip.exe (как уже упоминалось, TabTip.exe должен быть запущенным, когда вы выполняете работу с COM), он отлично работает на некоторых компьютерах под управлением 1607 (включая мой тачпад HP! ура!) Но он ничего не будет делать на некоторых других компьютерах с той же сборкой Windows.

Пока что протестировано на 4 разных компьютерах, и я не могу добиться, чтобы что-то работало нормально на всех …


3

Кажется, проблема связана с настройкой ОС Windows. У меня возникла такая же проблема с приложением, которое я разрабатывала. В Windows 8 и 10 (до обновления) код, который вызывал клавиатуру, работал нормально, но после обновления не работал. Прочитав эту статью, я сделал следующее:

  1. Нажал Win + I, чтобы открыть приложение «Настройки»

  2. Нажатие на устройствах> Печатание

  3. Turned “ Автоматически отображать сенсорную клавиатуру в оконных приложениях, когда клавиатура не подключена к вашему устройство “ВКЛ.

    Сразу после этого клавиатура начинает отображаться и в Windows 10.

Улучшить этот ответ
отредактировал 20 июня ’20 в 9:12
Сообщество ♦
111 серебряных значков
ответил 09 марта ’17 в 13:40
  • Для меня это был Win + I , затем нажмите Простота доступа (горячая клавиша Win + U e>) под переключателем клавиатуры Включает экранную клавиатуру . - surfmuggle 2 апр. '17 в 7:13
добавить комментарий |

Проблема, похоже, связана с настройкой ОС Windows. У меня возникла такая же проблема с приложением, которое я разрабатывала. В Windows 8 и 10 (до обновления) код, который вызывал клавиатуру, работал нормально, но после обновления не работал. Прочитав эту статью, я сделал следующее:

  1. Нажал Win + I, чтобы открыть приложение «Настройки»

  2. Нажатие на устройствах> Печатание

  3. Turned “ Автоматически отображать сенсорную клавиатуру в оконных приложениях, когда клавиатура не подключена к вашему устройство “ВКЛ.

    Сразу после этого клавиатура начинает отображаться и в Windows 10.


3

Реализация IValueProvider/ITextProvider в вашем элементе управления – правильный способ добиться этого, как описано здесь: https://stackoverflow.com/a/43886052/1184950

Улучшите этот ответ
отредактировано 23 мая ’17 в 12:02
Сообщество ♦
111 серебряных значков
ответил 10 мая ’17 в 7:57
добавить комментарий |

Реализация IValueProvider/ITextProvider в вашем элементе управления – правильный способ добиться этого, как описано здесь: https://stackoverflow. com/a/43886052/1184950


2

Следующий код всегда будет работать, так как он использует последнюю версию MS Api
Я поместил его в dll (необходимо для проекта Delphi), но это простой C
Также полезно для получения размера клавиатуры и настройки макет приложения

 //*******************************  **********************************////ВОЗВРАТ ПРЯМОУГОЛЬНИК КЛАВИАТУРЫ ИЛИ ОПУСТИТЕ ОДИН, ЕСЛИ КЛАВИАТУРА НЕ ВИДИМО ////********************************************  ********************* RECT __stdcall GetKeyboardRect () {IFrameworkInputPane * inputPane = NULL;  RECT prcInputPaneScreenLocation = {0,0,0,0};  HRESULT hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);  if (SUCCEEDED (hr)) {hr = CoCreateInstance (CLSID_FrameworkInputPane, NULL, CLSCTX_INPROC_SERVER, IID_IFrameworkInputPane, (LPVOID *) & inputPane);  если (УСПЕШНО (час)) {hr = inputPane-> Местоположение (& prcInputPaneScreenLocation);  если (! УСПЕШНО (час)) {} inputPane-> Release ();  }} CoUninitialize ();  return prcInputPaneScreenLocation;}  

Улучшите этот ответ
ответил 24 июня ’18 в 9:20
  • Вы знаете, можно ли это сделать с помощью панели инструментов для диктовки? (WIN + H) – Бретт Сандерсон 30 сен., 20 сен., 17:12
добавить комментарий |

Следующий код всегда будет работать, так как он использует последнюю версию MS Api
Я поместил его в dll (необходимо для Delphi project), но это обычный C
Также полезно для получения размера клавиатуры и настройки макета приложения

 //**********  *************************************************  *******////ВОЗВРАЩАЕТ ПРЯМОУГОЛЬНИК КЛАВИАТУРЫ ИЛИ УДАЛЕНИЕ ОДНОГО, ЕСЛИ КЛАВИАТУРА НЕ ВИДИМО////***********************  ***************************************** RECT __stdcall GetKeyboardRect () {IFrameworkInputPane  * inputPane = NULL;  RECT prcInputPaneScreenLocation = {0,0,0,0};  HRESULT hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);  if (SUCCEEDED (hr)) {hr = CoCreateInstance (CLSID_FrameworkInputPane, NULL, CLSCTX_INPROC_SERVER, IID_IFrameworkInputPane, (LPVOID *) & inputPane);  если (УСПЕШНО (час)) {hr = inputPane-> Местоположение (& prcInputPaneScreenLocation);  если (! УСПЕШНО (час)) {} inputPane-> Release ();  }} CoUninitialize ();  return prcInputPaneScreenLocation;}  

0

Используйте этот метод:

  1. Создайте файл osk.bat и сохраните его в папке с программой, т.е. C: My Software osk.bat

  2. Введите этот osk. запустите следующий cmd:

    "C: Program Files Common Files Microsoft Shared Ink Tabtip.exe"

  3. Используйте сценарий Windows для запуска этого файла bat

    oWSH = CREATEOBJECT ("wscript.shell")

    oWSH.Run ("osk.bat", 0, .T.)

Улучшите этот ответ
отредактировал 7 февраля 2018 в 2:06
Alex Butenko
3,23833 золотых знака2929 серебряных знаков5050 бронзовых знаков
ответил 06 февраля 2018 в 16:46
добавить комментарий |

Используйте этот метод:

  1. Создайте файл osk.bat и сохраните его в папке с программой, т.е. C: My Software osk.bat

  2. Введите в этот osk.bat следующий cmd:

    "C: Program Files Common Files Microsoft Shared Ink Tabtip.exe"

  3. Используйте сценарий Windows для запуска этого файла летучей мыши

    oWSH = CREATEOBJECT ("wscript.shell")

    oWSH.Run ("osk.bat", 0, .T.)


0

Я пробовал несколько вещей, которые не работали. Но я обнаружил, что могу использовать сочетания клавиш Windows/Ctrl/O, чтобы открыть экранную клавиатуру.
Также есть пакет Nuget: Симулятор ввода Майкла Нунана.

Если вы устанавливаете NuGet-пакет InputSimulator в свой проект Winforms – тогда добавьте к событию такой код, как кнопку:

  private void button1_Click (object sender, EventArgs e) {  var simu = новый InputSimulator ();  simu.Keyboard.ModifiedKeyStroke (new [] {VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL}, VirtualKeyCode.VK_O);}  

Вам также потребуется добавить эти операторы using:

  с использованием WindowsInput; с использованием WindowsInput.Native;  

Запустите ваше приложение, и кнопка отобразит клавиатуру, а также снова нажмите ее, и она удалит его.

Я использую Windows 10 и vs 2019.

Улучшите этот ответ
отредактировано 8 ноября ’19 в 1:12
entreprenerds
83699 серебряных знаков1919 бронзовых знаков
ответил 7 ноября ’19 в 22:15
добавить комментарий |

Я пробовал несколько вещей, которые не работали. Но я обнаружил, что могу используйте сочетания клавиш Windows/Ctrl/O, чтобы открыть экранную клавиатуру.
Также есть пакет Nuget: Симулятор ввода Майкла Нунана.

Если вы установите InputSimulator NuGet в свой проект Winforms – затем добавьте к событию такой код, как кнопку:

  private void button1_Click (object sender, EventArgs e) {var simu = new InputSimulator (  ); simu.Keyboard.ModifiedKeyStroke (new [] {VirtualKeyCode.LWIN, VirtualKeyCode.CONTROL}, VirtualKeyCode.VK_O);}  

Вам также потребуется добавить эти операторы using:

  с использованием WindowsInput; с использованием WindowsInput.Native;  

Запустите приложение, и кнопка отобразит клавиатуру, а также снова нажмите ее и он удалит его.

Я использую Windows 10 и vs 2019.


-3

В Win10 Ver 1803, DesktopMode есть нет надежного способа
переключить «Сенсорную клавиатуру» на | выключить [ITipInvocation.Toggle ()];
и вы не можете надежно определить, “вверх” ли она (на экране)
[IFrameworkInputPane.Location ()]; обе процедуры терпят неудачу случайным образом .

Вместо этого убедитесь, что «TabTIP.EXE» и «…. InputApp.EXE»
запускаются только тогда, когда клавиатура находится «вверх» (на экране).

Для включения и выключения клавиатуры (из X.CPP в Jeff-Relf.Me/X.ZIP):

  if (WM  == WM_HOTKEY && C == 'K') {//Кнопка мыши переносит меня сюда.  Jeff-Relf.Me/g600.PNG if (KillProc = 1, Running (L "TabTIP.EXE"), KillProc = 1, Running (L "WindowsInternal.ComposableShell.Experiences.TextInput.InputApp.EXE"))// клавиатура была _On_ (т.е. ее процессы были запущены),//поэтому она была "выключена _Off_" (убита);  и мы закончили.  goto Готово; //Клавиатура была _Off_ (т.е.не запущены процессы). //Включите _On_: Launch (L "% CommonProgramFiles%/microsoft shared/ink/TabTIP.EXE");  Сон (99);  статическая константа GUID CLSID_UIHostNoLaunch = {0x4CE576FA, 0x83DC, 0x4f88, 0x95, 0x1C, 0x9D, 0x07, 0x82, 0xB4, 0xE3, 0x76};  статическая постоянная GUID IID_ITipInvocation = {0x37c994e7, 0x432b, 0x4834, 0xa2, 0xf7, 0xdc, 0xe1, 0xf1, 0x3b, 0x83, 0x4b};  статическая структура ITipInvocation: IUnknown {виртуальный переключатель HRESULT STDMETHODCALLTYPE (HWND wnd) = 0;  } * Tog;  Tog = 0, CoCreateInstance (CLSID_UIHostNoLaunch, 0, CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER, IID_ITipInvocation, (void **) & Tog); //Firefox и Chrome это необходимо: Tog?  Tog-> Toggle (GetDesktopWindow ()), Tog-> Release (): 0;  } - - - - - - - - - - - - -//Чтобы получить список процессов и уничтожить материал: #include  int KillProc; int Running (wchar * EXE) {int Найдено;  HANDLE PIDs, aProc;  PROCESSENTRY32 aPID = {sizeof APID};  PIDs = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);  Process32First (PID, & APID);  while (Найдено =! strCmpI (aPID.szExeFile, EXE), KillProc && Найдено && (aProc = OpenProcess (PROCESS_TERMINATE, 0, aPID.th32ProcessID), aProc? TerminateProcess (aProc, 9), CloseHandle (aProc): 0),!  Найдено && Process32Next (PIDs, & aPID));  KillProc = 0, CloseHandle (PID);  return Found;  } Запуск (wchar * Cmd) {wchar _Cmd [333];  статическая PROCESS_INFORMATION Stat;  статический STARTUPINFO SU = {sizeof SU};  SetEnvironmentVariable (L "__ compat_layer", L "RunAsInvoker");  ExpandEnvironmentStrings (Cmd, _Cmd, 333), Cmd = _Cmd;  если (CreateProcess (0, Cmd, 0,0,1,0,0,0, & SU, & Stat)) CloseHandle (Stat.hProcess), CloseHandle (Stat.hThread);  }//CoInitialize (0);  

Улучшите этот ответ
отредактировал 30 июля ’18 в 13:04
ответил 17 июля ’18 в 7:53
  • 3
    При публикации ответа, содержит код, пожалуйста, объясните, что делает код и как он отвечает на вопрос пользователя. Категорически не рекомендуется давать ответы, состоящие только из кода. – Джим Гаррисон, 26 июля 2018, 23:12
  • Проблема, которую задавали не менее трех раз на трех разных страницах, заключается в том, что переключатель клавиатуры (ITipInvocation.Toggle ()) НЕ (НЕ) всегда работает (Win10 настольная версия 1803). Я, и только я, предоставил решение. Мое решение хорошо протестировано, работает. Я прокомментировал код … ты читал комментарии, Джим? ! – Джефф Релф, 26 июля ’18 в 23:27
  • 5
    Вместо того, чтобы рассказывать обрывки, вам следует научиться принимать конструктивную критику от пользователей, которые имеют опыт работы с сайтом. Комментарии к коду не заменяют текстовое объяснение. Ваш опыт здесь значительно улучшится, если вы научитесь принимать советы, которые призваны помочь вам. – Ken White 27 июля ’18 в 0:48
  • Это временно заблокировано, пока обсуждается на мета. – user3956566 30 июл 2018, в 16:02
добавить комментарий |

В Win10 Ver 1803, DesktopMode нет надежного способа
включить “Сенсорную клавиатуру” | выключить [ ITipInvocation. Toggle ()];
и вы не можете надежно определить, находится ли он «вверху» (на экране)
[IFrameworkInputPane.Location ()]; обе процедуры терпят неудачу случайным образом .

Вместо этого убедитесь, что «TabTIP.EXE» и «…. InputApp.EXE»
запускаются только тогда, когда клавиатура находится «вверх» (на экране).

Для включения и выключения клавиатуры (из X.CPP в Jeff-Relf.Me/X.ZIP):

  if (WM  == WM_HOTKEY && C == 'K') {//Кнопка мыши переносит меня сюда.  Jeff-Relf.Me/g600.PNG if (KillProc = 1, Running (L "TabTIP.EXE"), KillProc = 1, Running (L "WindowsInternal.ComposableShell.Experiences.TextInput.InputApp.EXE"))// клавиатура была _On_ (т.е. ее процессы были запущены),//поэтому она была "выключена _Off_" (убита);  и мы закончили.  goto Готово; //Клавиатура была _Off_ (т.е.не запущены процессы). //Включите _On_: Launch (L "% CommonProgramFiles%/microsoft shared/ink/TabTIP.EXE");  Сон (99);  статическая константа GUID CLSID_UIHostNoLaunch = {0x4CE576FA, 0x83DC, 0x4f88, 0x95, 0x1C, 0x9D, 0x07, 0x82, 0xB4, 0xE3, 0x76};  статическая постоянная GUID IID_ITipInvocation = {0x37c994e7, 0x432b, 0x4834, 0xa2, 0xf7, 0xdc, 0xe1, 0xf1, 0x3b, 0x83, 0x4b};  статическая структура ITipInvocation: IUnknown {виртуальный переключатель HRESULT STDMETHODCALLTYPE (HWND wnd) = 0;  } * Tog;  Tog = 0, CoCreateInstance (CLSID_UIHostNoLaunch, 0, CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER, IID_ITipInvocation, (void **) & Tog); //Firefox и Chrome это необходимо: Tog?  Tog-> Toggle (GetDesktopWindow ()), Tog-> Release (): 0;  } - - - - - - - - - - - - -//Чтобы получить список процессов и уничтожить материал: #include  int KillProc; int Running (wchar * EXE) {int Found;  HANDLE PIDs, aProc;  PROCESSENTRY32 aPID = {sizeof APID};  PIDs = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);  Process32First (PID, & APID);  while (Найдено =! strCmpI (aPID.szExeFile, EXE), KillProc && Найдено && (aProc = OpenProcess (PROCESS_TERMINATE, 0, aPID.th32ProcessID), aProc? TerminateProcess (aProc, 9), CloseHandle (aProc): 0),!  Найдено && Process32Next (PIDs, & aPID));  KillProc = 0, CloseHandle (PID);  return Found;  } Запуск (wchar * Cmd) {wchar _Cmd [333];  статическая PROCESS_INFORMATION Stat;  статический STARTUPINFO SU = {sizeof SU};  SetEnvironmentVariable (L "__ compat_layer", L "RunAsInvoker");  ExpandEnvironmentStrings (Cmd, _Cmd, 333), Cmd = _Cmd;  если (CreateProcess (0, Cmd, 0,0,1,0,0,0, & SU, & Stat)) CloseHandle (Stat.hProcess), CloseHandle (Stat.hThread);  }//CoInitialize (0);  


Сенсорная клавиатура на экране входа в Windows 10

Мы используем Windows 10 в системе киоска. Обычно пользователь взаимодействует с системой через сенсорный экран, но при необходимости доступна клавиатура.

Мы включили «Автоматически отображать сенсорную клавиатуру в оконных приложениях, когда к вашему устройству не подключена клавиатура.. “в настройках набора текста и во время нормальной работы это то, что нам требуется. Каждый раз, когда пользователь использует сенсорный ввод для управления фокусировкой, принимает текст, отображается сенсорная клавиатура. Если он использует мышь или клавиатуру, она остается скрытой.

Однако на экране входа или экрана блокировки клавиатура не отображается. Хуже того, может быть показано вручную используя настройки Ease of Access, но это не то, что пользователю нужно делать при каждом входе в систему. Можно ли добиться того же поведения на экране входа в систему, что и позже в ОС?


1

Подключение клавиатуры изменит поведение Windows. Отключите клавиатуру и перезагрузитесь.

В качестве альтернативы вы можете попробовать следующее:

Улучшите этот ответ
ответил 15 января ’18 в 18:45
  • Спасибо за ваше предложение. Мы могли бы использовать это, если никакой другой вариант не материализуется. Однако мы обнаружили, что экранная клавиатура гораздо хуже работает с сенсорной клавиатурой. – Йенс 19 янв. ’18 в 20:52
добавить комментарий |

Подключение клавиатуры изменит поведение Windows. Отключите клавиатуру и перезагрузитесь.

В качестве альтернативы вы можете попробовать следующее:


1

В дополнение к перечисленным советам вы также можете включить режим планшета. При этом будет появляться экранная клавиатура каждый раз, когда потребуется ввод.

Чтобы включить режим планшета, откройте панель уведомлений (Win + A) и затем нажмите Режим планшета.

Улучшите этот ответ
ответ дан 18 янв. : 55
добавить комментарий |

В дополнение к перечисленным советам вы также можете включить режим планшета. При этом будет появляться экранная клавиатура каждый раз, когда потребуется ввод.

Чтобы включить режим планшета, откройте панель уведомлений (Win + A) и затем нажмите Режим планшета..


1

Попробуйте установить следующий флажок: Панель управления -> Простота доступа -> Центр специальных возможностей -> Изменить настройки входа [слева] -> Ввод без клавиатуры (экранная клавиатура): при входе .

source

Улучшите этот ответ
ответил 16 дек. ’20 в 0: 28
добавить комментарий |

Попробуйте установить следующий флажок: Панель управления -> Легкость доступа -> Центр специальных возможностей -> Изменить настройки входа [слева] -> Ввод без клавиатуры (экранная клавиатура): при входе .

source


0

Попробуйте следующее:

  • Установите режим планшета
  • Используйте regedit, чтобы перейти к HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Accessibility ATs osk
  • Проверьте, установлено ли для CopySettingsToLockedDesktop значение 1, и установите его, если нет
  • Перезагрузить
Улучшите этот ответ
ответил 23 января ’18 в 07:34
добавить комментарий |

Попробуйте это:

  • Установить режим планшета
  • Используйте regedit, чтобы перейти к HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Accessibility ATs osk
  • Проверьте, не CopySettingsToLockedDesktop установлен на 1, и если нет
  • Reboot

-1

В Windows 10 так много ошибок. Иногда нам нужно найти стороннее программное решение. Для вашей ситуации я рекомендую программное обеспечение под названием «Tabtip on-demand», хорошее программное обеспечение, разработанное швейцарским разработчиком. Вот обзор с их собственного сайта:

Tabtip On-Demand – отличный инструмент для мобильных пользователей с планшетным ПК, который добавляет отсутствующую функциональность клавиатуры «по требованию» в WIndows панель ввода. Он также может прокручивать веб-страницы и вставлять поля ввода в поле зрения, поэтому вводимый текст никогда не скрывается за клавиатурой.. Tabtip On-Demand также делает доступную клавиатуру щелчком мыши (необязательно) на рабочем столе, а также в современном пользовательском интерфейсе (Windows 8 и выше).

Так выглядит Tabtip например:

Я использую его сейчас, чтобы ввести этот ответ.

Лично я считаю, что это полезно; Вы можете забыть об этом, как только начнете. Вы всегда можете выполнить настройку, щелкнув значок в правом углу меню. Он имеет два режима: режим Tabtip и режим OSK. Однако не всегда он появляется в каком-то специальном текстовом поле (например, текстовом поле Google), тогда вам придется запускать клавиатуру вручную.

P.S. Он стоит всего 2 доллара, дешевый выбор.

Вот его официальный сайт. Да поможет вам 🙂 http://www.chessware.ch/tabtipod

Улучшите этот ответ
отредактировано 22 ноября ’18 в 7:07
Scott
18.6k1212 золотых знаков5757 серебряных знаков104104 бронзовых знака
ответил 22 ноя ’18 в 6:41
добавить комментарий |

В Windows 10 так много ошибок. Иногда нам нужно найти стороннее программное решение. Для вашей ситуации я рекомендую программное обеспечение под названием «Tabtip on-demand», хорошее программное обеспечение, разработанное швейцарским разработчиком. Вот обзор с их собственного сайта:

Tabtip On-Demand – отличный инструмент для мобильных пользователей с планшетным ПК, который добавляет отсутствующую функциональность клавиатуры «по требованию» в WIndows панель ввода. Он также может прокручивать веб-страницы и открывать поля ввода, поэтому вводимый текст никогда не скрывается за клавиатурой. Tabtip On-Demand также делает доступную клавиатуру щелчком мыши (необязательно) на рабочем столе, а также в современном пользовательском интерфейсе (Windows 8 и выше).

Так выглядит Tabtip например:

Я использую его сейчас, чтобы ввести этот ответ.

Лично я считаю это полезным; Вы можете забыть об этом, как только начнете. Вы всегда можете выполнить настройку, щелкнув значок в правом углу меню. Он имеет два режима: режим Tabtip и режим OSK. Однако не всегда он появляется в каком-то специальном текстовом поле (например, текстовом поле Google), тогда вам придется запускать клавиатуру вручную.

P.S. Он стоит всего 2 доллара, дешевый выбор.

Вот его официальный сайт. Да поможет вам 🙂 http://www.chessware.ch/tabtipod

Оцените статью
futurei.ru
Добавить комментарий