当我们在给一个文本框输入内容时,当在键盘上按下一个键后,WINDOWS的消息KEYPRESS是如何产生的,由谁产生的,而后这个消息是依次由谁提供给谁,而后再提供给文本框,中间可以在哪一个环节将消息中传递的KEYASCII值由谁来更改,最后由谁将更改后的Keyasccii传给文本框。

解决方案 »

  1.   

    好长的问题,第一步当然是硬件,硬件与驱动程序通讯,第二步是驱动程序通知系统产生WM_KEYXXXX消息,系统根据当前活动的窗口将消息发给相关线程的消息队列,如果你想拦截消息的话,挂一个消息钩子就行了,不用问那么多的。
      

  2.   

    http://www.4oa.com/Article/html/6/32/466/2005/16428.html
      

  3.   


    有两个问题:
    1、“第二步是驱动程序通知系统产生WM_KEYXXXX消息”,消息不应当是驱动程序产生的吧,驱动程序应该只知道是按下了哪个键,将键值告诉WINDOWS系统,而后由WINODWS系统产生消息吧(是我猜测的,很可能不对)。
    2、拦截是在哪一步拦截,是在驱动程序通知系统时拦截,还是在系统将消息发送给当前活动窗体时拦截。
    3、系统是将消息直接发给当前窗口,还是直接发送到当前窗体的文本框。
      

  4.   

    、“第二步是驱动程序通知系统产生WM_KEYXXXX消息”,消息不应当是驱动程序产生的吧,驱动程序应该只知道是按下了哪个键,将键值告诉WINDOWS系统,而后由WINODWS系统产生消息吧(是我猜测的,很可能不对)。 
    ==============
    我上面好像没说是驱动程序产生消息的吧,而是由驱动程序通知系统产生相关的消息拦截是在哪一步拦截,是在驱动程序通知系统时拦截,还是在系统将消息发送给当前活动窗体时拦截。
    ============================
    如果你所做的仅是想拦截消息,挂消息钩子就行了,当然如果你想在驱动级处理也行,前提是你得会编写驱动程序。3、系统是将消息直接发给当前窗口,还是直接发送到当前窗体的文本框。
    =================
    这里有一个理解错误,系统是将消息发给当前前台线程的消息队列,并不是直接发给窗口,线程中用GetMessage来获取消息队列中的消息,再用DispatchMessage(&msg);进行分配,也就是决定由哪个窗口处理函数处理。
      

  5.   

    第一步是驱动程序获得按键信息,将其转交给操作系统,第二不,操作系统得到按键信息后,会根据当前焦点所在窗口句柄产生一个WM_KEY之类的消息,并把其放到消息队列中;第三步,接下来当前程序的窗口回调函数会从消息队列中获得该消息,并根据消息类别作出反映。 
      

  6.   

    这个题目有点大,不过了解一些确实挺好。我觉得吧,大概过程应该是这样的:
    按下键盘之后由硬件接收,可能是中断也可能是别的方式吧,譬如定时,轮询等,当然,中断方式更好些吧。
    硬件到系统这一步,必然是通过驱动,只有驱动才能跟系统底层交互。
    至于再接下来,系统应该做一些处理吧,类似TranslageMessage那种方式。
    然后,相应的窗口就接收到了。不知道对不对?