研究了好久,拿SPY++看了半天,也没有搞清楚是怎么回事,不仅WM_GETTEXT/WM_SETTEXT,就连常用EM_****消息也是有去无回。
我猜是不是这几个编辑器把它们都给屏蔽掉了?
请教大家有没有办法通过发消息的方法拿到这些窗口中选中的TEXT?

解决方案 »

  1.   

    我用spy++监视到在这些窗口粘贴的时候,会有WM_IME_SETCONTEXT之类的消息出现,但是我去查帮助,发现这个只是控制输入法的阿,和这些都没有关系阿。
    刚才还查到,的确是这些窗口屏蔽了一些消息,这是不是意味着没有可能通过发消息拿到窗口中选中的TEXT了呢?另外:还发现Word之类的软件也不行
      

  2.   


    http://support.microsoft.com/default.aspx?scid=kb;en-us;82293
      

  3.   

    这个SPY不是万能的.不要指往它能给你做太多的事
      

  4.   

    得到窗口句柄的代码如下(是C#代码,但思想和VC实现没有什么区别)IntPtr ptr =Windows.API.GetForegroundWindow();
    lpPoint = new POINT();//得到Caret在屏幕上的位置
    if (ptr.ToInt32() != 0)
    {
      IntPtr targetThreadID = Windows.API.GetWindowThreadProcessId(ptr,IntPtr.Zero);
      IntPtr localThreadID = Windows.API.GetCurrentThreadId();
      if (localThreadID != targetThreadID)
       {
        //attach the local threadID to targetThreadID
        Windows.API.AttachThreadInput(localThreadID,targetThreadID,1);
        //get the position of caret
        ptr = Windows.API.GetFocus();
        if (ptr.ToInt32() != 0)
        {
          Windows.API.GetCaretPos(out lpPoint);
          Windows.API.ClientToScreen(ptr,ref lpPoint);
        }
        Windows.API.AttachThreadInput(localThreadID,targetThreadID,0);
      }
     }///从Caret的位置得到具有输入焦点控件handle
    handle = Windows.API.WindowFromPoint(point);差不多可以确定吧,因为我一边拿着SPY++盯着那个窗口,一边用VS.NET调试我的程序,呵呵,有几次我还手动的把窗口句柄写进Debug窗口中的handle变量中。所以,应该可以肯定这些句柄是正确的。
    现在我几乎可以确定了:VS.NET 的editor窗口 和 MSN的消息窗口屏蔽我上面提到的那些消息,因为我还发现如果用sendmessage发送一个keydown和keyup的过去,比如:CTRL+V,它们都是可以做出正确的反应的, 为什么要屏蔽呢,真可怜我的程序啊,居然最需要的地方,都用不了 :~(谢谢 laiyiling(最熟悉的陌生人) 提供的链接,但它提到的两条RESOLUTION好像还是不起作用阿。继续等待