现在我所在项目是做一个软件键盘,现在遇到一个问题,问题是这样的:
1。在这个软件键盘里面,安装了一个全局钩子,以捕获WM_SETFOCUS消息,钩子捕获到这个消息之后,就判断这个窗口是否是可输入的窗口,也就是我发送WM_IME_CHAR消息,这个窗口能不能把我发送的文字显示出来,但问题是,得用什么方法来判断一个窗口是可输入的呢?,打个比方:Edit可以,按钮不可以接受输入。
2。在Word或者在Excel里面用VBA做了一个UserForm,再这个UserForm里面放了几个文本输入框,怎样当我已经得到了UserForm的句柄的前提下,给在这个UserForm中当前有输入焦点的文本输入框用程序输入文字。比如通过发送WM_IME_CHAR消息。先谢谢大家了!!!!!

解决方案 »

  1.   

    1。use GetClassName to check it,my example
    char temp[100]; GetClassName(hWnd, temp, sizeof(temp)); 
    long l =GetWindowLong(hWnd, GWL_STYLE);
    if(l & ES_PASSWORD)   //普通密码输入框
    return 1;
     
    if(!strcmp(temp,_T("Edit")))// Edit输入框
    return 2;
    else if(!strcmp(temp,_T("ComboBox")))//ComboBox
    return 3;
    else if(!strcmp(temp,_T("ListBox")))//ListBox
    return 4;
    else 
    return 0;
    2.get parent hwnd ,then you can use EnumChildWindow to get child window handle.
      

  2.   

    第二总方法是不行的,因为UseForm中的Edit框并不是以ChildWindow出现的,就算是,
    也无法得到当前有焦点的窗口。
    第一种方法也不太好,总不能把所有空间都判断以下吧?再说,有些应用程序根本不是用标准空间来提供输入的,比如,Word, UE等.