none
Sendkey方法的疑问 RRS feed

  • 问题

  • 用SendKey实现向另一个程序输入字符的时候,发现如果目标程序正打开输入法(这里使用的是微软拼音输入法2003),发送的小数点“.”会变成句号“。”,而且不会输入到程序中,而是挂在输入法待选字中。
    这个问题怎么解决呢?
    大家说说看有什么办法解决吗?

    例如,可否检测目标程序是否处在输入法状态?是否可以临时关闭目标程序的输入法?

    谢谢:)
    2009年3月20日 14:15

答案

  • 你好!
         你SendKey之前可以先通过ImeMode属性把输入法关闭! 

    周雪峰
    2009年3月21日 7:23
    版主
  • 你好!
         
    因为没有可用来激活另一个应用程序的托管方法,所以可以在当前应用程序中使用此类,或使用本机 Windows 方法(如 FindWindow 和 SetForegroundWindow)来强制聚焦到其他应用程序上。
         这个类只是发送按键而已,你说的情况他不能处理的!请考虑重新设计程序的结构!
        

    周雪峰
    2009年3月21日 15:40
    版主

全部回复

  • 你好!
         你SendKey之前可以先通过ImeMode属性把输入法关闭! 

    周雪峰
    2009年3月21日 7:23
    版主
  • 周雪峰 说:

    你好!
         你SendKey之前可以先通过ImeMode属性把输入法关闭! 


    周雪峰



    对于自己的VB程序当然可以用ImeMode属性,目标程序如果是其他程序,该怎么办呢?例如一个IE浏览器中的网页,一个Java程序中的文本框
    2009年3月21日 15:09
  • 你好!
         
    因为没有可用来激活另一个应用程序的托管方法,所以可以在当前应用程序中使用此类,或使用本机 Windows 方法(如 FindWindow 和 SetForegroundWindow)来强制聚焦到其他应用程序上。
         这个类只是发送按键而已,你说的情况他不能处理的!请考虑重新设计程序的结构!
        

    周雪峰
    2009年3月21日 15:40
    版主
  • 周雪峰 说:

    你好!
         
    因为没有可用来激活另一个应用程序的托管方法,所以可以在当前应用程序中使用此类,或使用本机 Windows 方法(如 FindWindow 和 SetForegroundWindow)来强制聚焦到其他应用程序上。
         这个类只是发送按键而已,你说的情况他不能处理的!请考虑重新设计程序的结构!
        


    周雪峰



    通过FindWindow\SetForegroundWindow和SendKey共同实现往其他程序输入字符,这点已经实现了。就是遇到目标程序处在输入法状态时有点问题
    2009年3月22日 2:39
  • 如果你的目标程序没有提供编程接口,你应该就没有办法获取或控制他的某些状态啊! 
    周雪峰
    2009年3月22日 5:33
    版主
  • 周雪峰 说:

    如果你的目标程序没有提供编程接口,你应该就没有办法获取或控制他的某些状态啊! 


    周雪峰



    那是,不过输入法对于目标程序来说,不是一个外部程序吗?不知道能否通过判断输入法的进程是不是挂接在目标程序来判断输入法是否打开了呢?这个只是猜想,呵呵


    Anyway,谢谢
    2009年3月22日 9:16