Привет, у меня проблема с приложением сенсорного экрана .NET в Win7 (клавиатура ПК не подключена). Я использую часть приложения в качестве окна терминала для внешнего устройства. Когда открывается окно терминала, я запускаю экранную клавиатуру, вызывая: -
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
string onScreenKeyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe");
oskProcess = System.Diagnostics.Process.Start(onScreenKeyboardPath);
После того, как я закончил с окном терминала, я хочу закрыть форму одним щелчком мыши на X формы, который затем автоматически закроет экранную клавиатуру. Поэтому я звоню: -
Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
foreach (Process onscreenProcess in oskProcessArray)
{
onscreenProcess.Kill();
onscreenProcess.Dispose();
}
Это работает отлично, ЗА ИСКЛЮЧЕНИЕМ случаев, когда последней нажатой клавишей была клавиша CTRL, ALT или SHIFT. Если это так, они остаются «застрявшими» даже после того, как клавиатура убита. Если я перезапущу экранную клавиатуру, они все равно будут выделены.
Если я сначала нажму красный X на клавиатуре, прежде чем закрыть форму, все будет хорошо. Но я хочу/нужно закрыть оба вместе одним щелчком мыши из моего кода. Итак, как мне очистить любые «застрявшие» клавиши при выходе из клавиатуры автоматически, или есть другой способ сделать это?
onscreenProcess.Kill();
попробуйтеonscreenProcess.CloseMainWindow();
... (не уверен, что это повлияет на вашу целевую платформу и/или целевое приложение, но это изящный способ попросить приложение закрыться). - person Idle_Mind   schedule 05.10.2015