研究了好久,拿SPY++看了半天,也没有搞清楚是怎么回事,不仅WM_GETTEXT/WM_SETTEXT,就连常用EM_****消息也是有去无回。
我猜是不是这几个编辑器把它们都给屏蔽掉了?
请教大家有没有办法通过发消息的方法拿到这些窗口中选中的TEXT?
我猜是不是这几个编辑器把它们都给屏蔽掉了?
请教大家有没有办法通过发消息的方法拿到这些窗口中选中的TEXT?
解决方案 »
- VC中MDI程序如何实现多个窗口滚动条的同步滚动
- 仿Win7菜单链接库
- 求教 急
- vc 单文本文档中数字变化怎样才能不闪?
- 如何自己构造一个recordset
- 控制台程序如何处理消息呢?
- VC如何按一个按钮弹出新的对话框,并且在新的对话框上又添加新的按钮实现功能。主要是后者。
- vc 如何实现读取outlook express 内的邮件?
- 关于WINVER not defined. Defaulting to 0x0501
- MFC中的CObject类的构造函数与析构函数的实现源码在哪里?
- 求助 Visual C++ 6.0 技术内幕(第五版)配套光盘的源码
- 公钥和私钥不是成对的吗,我为什么没有私钥文件!
刚才还查到,的确是这些窗口屏蔽了一些消息,这是不是意味着没有可能通过发消息拿到窗口中选中的TEXT了呢?另外:还发现Word之类的软件也不行
http://support.microsoft.com/default.aspx?scid=kb;en-us;82293
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好像还是不起作用阿。继续等待