I have found many threads on launching the Windows on-screen keyboard (osk.exe
) from an application, but I am running into some problems. It appears to be because I am running a 32-bit app on a 64-bit OS. I've tried the code posted by WooCaSh here:
Keyboard on the screen in WinForms
But none of the three different paths work for me. For the sysnative
path, Process.Start
fails with "Cannot find the path specified." For the system32
and osk.exe
paths, I get the "Could not start the on-screen keyboard" error dialog.
I found a possible workaround here, which is a little more complicated than what I was looking for (post by eryang): http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/10ebc62f-e6d7-4072-9fd1-ea3784a0966f/
The fastest way to open the on-screen keyboard in Windows 10 is the shortcut [Windows] + [Ctrl] + [O]. This way, the on-screen keyboard can be activated immediately if a physical keyboard is available or intact.
Select “Control Panel.” In the Control Panel window, click “Ease of Access,” click “Ease of Access Center,” and then click “Start On-Screen Keyboard.” You can pin the keyboard to your taskbar to access it more easily in the future, if you like.
I am now launching the "Touch Keyboard" as opposed to the "On-Screen Keyboard" (which is the keyboard I wanted on Windows 8 anyway) with:
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string keyboardPath = Path.Combine(progFiles, "TabTip.exe");
this.keyboardProc = Process.Start(keyboardPath);
This works on my Win7 and Win8, regardless of my 32-bit app on 64-bit OS. However, I still have the problem of programmatically closing the keyboard when I'm done. The process, this.keyboardProc
, does not seem to get the handle, and immediately has property HasExited = true
. This means my attempts to close or kill it fail.
According to this thread, if the user manually opens the keyboard (or I programmatically launch it), the keyboard will not automatically close/hide when the text field loses focus: Windows 8 - How to Dismiss Touch Keyboard? I tried the workaround of setting the focus to a hidden button, but since I launched the keyboard myself, it doesn't close automatically.
I had trouble closing the on screen keyboard. You can start the Touch Keyboard with
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string onScreenKeyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe");
onScreenKeyboardProc = System.Diagnostics.Process.Start(onScreenKeyboardPath);
and close all keyboards with
//Kill all on screen keyboards
Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
foreach (Process onscreenProcess in oskProcessArray)
{
onscreenProcess.Kill();
}
For some reason onScreenKeyboardProc.Kill() or .Close() doesn't work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With