问题
I want to start the new On-Screen-Keyboard (OSK) using code. You can find this one in the taskbar:
(if not there you find it by right clicking the taskbar).
I have already tried the regular:
System.Diagnostics.Process.Start("osk.exe");
But I want to start the other one (not in window mode). Here you see which OSK I want and which one not:
How can I start that version? And how can I start it in a certain setting (if possible)?
回答1:
By starting a process in command-line
I believe you want to start the following process in Windows 10, as suggested here:
"C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe"
As suggested by @bernard-vander-beken, it's better to use
Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles)
to produce the "C:\Program Files\Common Files\"
part of the path to fit different install locations.
Through an API
The previous command-line seems to work in inconsistent ways, in particular it doesn't work twice if the tabtip.exe
process is already running.
I found this snippet by @torvin on this thread, which you can use to programmatically show the on-screen keyboard after you've started the tabtip.exe
using the command-line solution, otherwise it fails with a COM
exception.
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();
}
来源:https://stackoverflow.com/questions/58747008/how-to-open-the-tablet-mode-on-screen-keyboard-in-c