none
WPF 软键盘 RRS feed

  • 问题

  • 现在使用WPF开发了一个自己的软键盘,希望能像微软的软键盘一样,在可输入的状态下出现,不可输入的状态就消失,请问如何实现


    • 已编辑 Ocean He 2012年9月22日 7:31
    2012年9月22日 7:31

答案

  • 你好 Ocean,

    你想要你的WPF软件盘当用户在其他app中有输入事件时弹出,对么? 我想你需要的是一个 global keyboard hooks,看一下以下链接:http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

    在其他app出发keyboard时监听到event,然后弹出window。

    希望对你有所帮助。 


    Annabella Luo[MSFT]
    MSDN Community Support | Feedback to us

    2012年9月25日 3:56
    版主
  • 你好,Ocean

    我想首先我们要重新梳理下你的问题,你是想做一个给所有windows桌面程序用的软键盘,还是只是给自己的WPF程序做一个软键盘的control?

    如果你是给自己的WPFapp做的这样一个软键盘,那我们很容易实现你的要求,只要在TextBox或是其他可输入控件Focused的时候弹出软键盘即可。

    但是如果你针对Windows用户的所有程序做的在输入前就弹出的这样一个软键盘,我认为这是不可能完成的,

    你所说的Windows Phone程序中,在可输入控件focused以后,软键盘便会自动弹出,这是肯定的,但是软键盘的弹出是framework所控制的,就是说在Windows Phone的程序中,在可输入控件获得焦点后,framework会自动为该控件弹出软键盘。这些都是在当前程序中完成的,并不涉及到另一个程序。并且Windows Phone中的app是较为固定的类型,例如Silverlight,都是通过framework自动调用内部的软键盘,让软键盘在可输入控件获得焦点时就弹出。

    而如果是在Windows中(不包括Windows8),WPF软键盘不可能知道所有各式各样的桌面程序中,当前程序focused on的是不是一个可输入控件,如果你的WPFapp通过一些途径获取别的app的输入控件,那你的这个WPFapp就有是木马病毒的嫌疑(我个人理解哈)。所以我认为监听键盘输入事件是比较合理的做法。

    另外,注意到Windows8也支持触摸屏模式,那Windows8种也将涉及到自定义的输入法的问题,在Windows8中,貌似有一个InputPaneFramework 个,可以向自定义输入法发送用户进入输入状态的信息,使得自定义的输入法可以提前显示。这部分我也不是很清晰,不过提供给你做为一个参考。         希望对你有所帮助。


    Annabella Luo[MSFT]
    MSDN Community Support | Feedback to us

    2012年9月26日 5:51
    版主

全部回复

  • 是不是说的不够清楚,怎么没人回答的

    2012年9月25日 0:38
  • 你好 Ocean,

    你想要你的WPF软件盘当用户在其他app中有输入事件时弹出,对么? 我想你需要的是一个 global keyboard hooks,看一下以下链接:http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

    在其他app出发keyboard时监听到event,然后弹出window。

    希望对你有所帮助。 


    Annabella Luo[MSFT]
    MSDN Community Support | Feedback to us

    2012年9月25日 3:56
    版主
  • 你好,我测试了你给的代码,可能是我说的不明白,我现在是要用户将焦点移到一个可输入的的地方就要弹出我的键盘,从而使用我的键盘进行输入,如不是捕获用户的键盘输入事件,就像微软的软件一样,当有触摸屏事件时就会弹出来了,请问如何解决

    2012年9月25日 11:34
  • 你好,Ocean

    我想首先我们要重新梳理下你的问题,你是想做一个给所有windows桌面程序用的软键盘,还是只是给自己的WPF程序做一个软键盘的control?

    如果你是给自己的WPFapp做的这样一个软键盘,那我们很容易实现你的要求,只要在TextBox或是其他可输入控件Focused的时候弹出软键盘即可。

    但是如果你针对Windows用户的所有程序做的在输入前就弹出的这样一个软键盘,我认为这是不可能完成的,

    你所说的Windows Phone程序中,在可输入控件focused以后,软键盘便会自动弹出,这是肯定的,但是软键盘的弹出是framework所控制的,就是说在Windows Phone的程序中,在可输入控件获得焦点后,framework会自动为该控件弹出软键盘。这些都是在当前程序中完成的,并不涉及到另一个程序。并且Windows Phone中的app是较为固定的类型,例如Silverlight,都是通过framework自动调用内部的软键盘,让软键盘在可输入控件获得焦点时就弹出。

    而如果是在Windows中(不包括Windows8),WPF软键盘不可能知道所有各式各样的桌面程序中,当前程序focused on的是不是一个可输入控件,如果你的WPFapp通过一些途径获取别的app的输入控件,那你的这个WPFapp就有是木马病毒的嫌疑(我个人理解哈)。所以我认为监听键盘输入事件是比较合理的做法。

    另外,注意到Windows8也支持触摸屏模式,那Windows8种也将涉及到自定义的输入法的问题,在Windows8中,貌似有一个InputPaneFramework 个,可以向自定义输入法发送用户进入输入状态的信息,使得自定义的输入法可以提前显示。这部分我也不是很清晰,不过提供给你做为一个参考。         希望对你有所帮助。


    Annabella Luo[MSFT]
    MSDN Community Support | Feedback to us

    2012年9月26日 5:51
    版主