用WPF做了一个小程序,跑在触摸设备上(触摸设备装的是Win7)。
每次点到类似TextBox(可输入的文本框)的控件时,自动弹出了Win7的虚拟键盘,如下图所示:
因为在右边已经做了自己的虚拟键盘,所以不需要这个了,但不知道如何将其临时禁用(之所以说临时是因为别的地方还需要用到这个虚拟键盘,只是在这里不用而已)
每次点击均会弹出,很碍眼。可以通过调用Win API禁用吗?还是有别的途径?
如果是调用Win API,在CSharp中该如何做?
回到桌面,鼠标指到屏幕右下角输入法图标(或键盘)。
右键点击,选择“设置”。
点击添加“按钮”。
在打开的框中拖动右边滚动条,选择一个所需的键盘,然后确定回到上一窗口,再次确定。
这时候,键盘添加了。若要删除,重复以上1~3,找到不需要的键盘点击选择,然后点击删除,确定便可。
呃,貌似不管用。
无论是写到Loaded、Initialized、Render等,还是直接写到TextBox的OnFocus事件中,照样弹出。
那你试试主动能不能调用这个虚拟键盘,要是不能的话那就是Osk.exe这个名字错了,
或者你把代码放在textbox中的焦点事件或单击事件中看看
主动调用是可以的,直接在Run中执行osk.exe也能调出虚拟键盘。
但禁用就不行了。
你给出的禁用代码看起来Close掉的并非事先弹出的那个键盘,而是直接创建了一个新的键盘实例然后再Close掉,与原先那个并没有关系。
是我写错了Close关闭不掉系统进程,你在事件中这样写
Process[] pro = Process.GetProcesses(); //获取所有系统进程
foreach (Process item in pro) // 遍历所有进程
{
if (item.ProcessName == "osk") // 判断你要关闭的是不是osk.exe 只要写osk就行这 个osk.exe就是虚拟键盘
{
item.Kill(); // 杀死进程
}
}
嗯,也没用。
在事件中写了日志,发现在GetProcesses()中根本没有检测到名为"osk"的进程 :(
不可能啊,我这个都行啊,首先你都说了你能主动调用虚拟键盘的,那么你的虚拟键盘就有个进程(在任务管理器的进程中可以看到,就是p.StartInfo.FileName = "Osk.exe";
中的osk.exe )那么你点击textbox出现虚拟键盘时那任务管理器中就会有一个虚拟键盘的进程,然后再通过其他事件写代码
(
Process[] pro = Process.GetProcesses();
foreach (Process item in pro)
{
if (item.ProcessName == "osk")
{
item.Kill();
}
}
)来杀死这个进程,就相当于你打开任务管理器找到osk.exe并结束进程是一个效果、
要是实在不行就把代码给我看看吧519306079@qq.com