当输入时会出现一个Candidate Window就是将所有同音字列出来的窗口,按上下键可以移动光标选字或词。我要在自己的程序中得到光标选中的字或词。移动光标时会发出IMN_CHANGECANDIDATE消息,我已经在hook中截获了,可是如何得到选中的字或词呀?

解决方案 »

  1.   

    不就是選詞嘛!
    我幫你up
    呵呵
    gz
      

  2.   

    是不是可以得到当前所选字的index 然后再在该组字中获得文字或词组.
      

  3.   

    给你一个链接,也许对你有帮助哦http://msdn.microsoft.com/library/default.asp?url=/library/en-us/appendix/hh/appendix/imeimes_0h2s.asp
      

  4.   

    我知道了,用findwindow()找到Candidate Window的窗口句斌,用spy++一層層的找到你要的那一欄,就可以得到了你想要的東西了,還有就是,要用消息來獲得字符,用別的方法行不通!
      

  5.   

    GetCapurePos或者差不多的函数在CWND类中获得位置,SetCap..设置位置或者查一下CWnd::GetCaretPos()
      

  6.   

    我查了一下有着两个函数是关于Candidate的,
    ImmGetNumCandidateList();
    ImmGetCandidateList();
    不过好像得到的都是数值方面的东东,没有字符串
      

  7.   

    呵呵,又是这种问题,怎么最近好像很多人对输入法感兴趣阿,如果早一年就好了,可以一起探讨探讨。
    关键在看你要得到的输入法是否本进程的,如果是则可以通过IMM接口得到候选窗口字串
    如果非本进程中,还是用屏幕取词做吧
      

  8.   

    是呀,好像鼠标取词中的fly window并不能导致那个窗口刷新。
      

  9.   

    有必要用hook吗?你自己创建的窗口,很容易得到窗口信息吧!窗口的显示也是你自己定。这样的话……
      

  10.   

    你需要把屏幕取词程序改一改,每次Invalidata整个窗口你就可以得到候选窗口中的一系列字串
    如:
    1.

    2.

    3.

    4.

    5.

    .....
    然后再根据你的需要从中选取吧
      

  11.   

    sinhighly:
        我得到了候选窗口的句柄,可是调用::InvalidateRect()总是失败。我试了试::GetWindowRect(),也是不成。
      

  12.   

    嗯,好像是不知道光标在哪个位置,不过你可以不用输入法的选字方式,
    比如在候选窗口出现时先用注册热键将上下箭头注册为热键,这样微软拼音输入法的选字操作就不起作用了,然后你再根据收到的热键响应自己控制选字InvalidateRect不行吗?你在后面再加一句UpdateWindow试试吧
      

  13.   

    一个不错的输入法编程网站http://wwsys.51.net/
      

  14.   

    study
    好象www.easthot.net上有个拼音输入法的源代码
      

  15.   

    我不是要输入法的代码。是要在自己的程序中得到微软拼音输入法的Candidate Window中光标选中的字或词
      

  16.   

    看来选字是不发消息的,也没必要发给谁…… 只是改变所选的字要发 WM_IME_NOTIFY.    你得到一个输入法鼠标下的字干什么?