2012-09-13 65 views
2

我试图从使用C++的spy ++中的'Messages'窗口中获取文本。从Spy ++窗口中获取文本

我试图发送WM_GETTEXTLB_GETMESSAGE消息给窗口及其子,并且它不工作。

在记事本上测试的代码,它只是工作正常,所以如何做到这一点?我调用这个函数EnumChildWindows(spyHwnd,EnumChildProc,1); // spyHwnd是“消息”窗口

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) 
{ 
    TCHAR text[40]; 
    int length = 0; 
    int index = 5; 
    length = SendMessage(hwnd,LB_GETTEXT,index,(LPARAM)text);//or WM_GETTEXT & maxLength=40 

    return true; 
} 
+0

你能提供相应的代码吗? –

+1

只是出于好奇,“保存日志到文件...”菜单选项有什么问题?该控件可能是一个“所有者绘制”的标准文本,不一定要存在并可用于您的消息。 –

回答

0

你要找的窗口中有一个“AfxWnd80u”类的句柄。我很确定它是所有者绘制的。它似乎没有收到任何与涂料和鼠标相关的消息。 所有者绘制意味着Spy ++将文本存储在内部的某处并手动绘制窗口画布。

如果在同一个列表中打开“消息属性”窗口,您可以看到正在使用的标准列表框控件。它显然有不同的行为 - 选择看起来不一样,滚动更流畅(这是一个可怜的证据,因为这些东西都可以自定义,但还是有点说服力 - ?为什么你会在一个应用程序做不同的事情)

如果您搜索网页为“获取文本AfxWnd”,你可以看到很多没有答案的问题。有些人使用模拟Ctrl + C和获取剪贴板内容,但Spy ++ Messages窗口似乎不支持Ctrl + C。

因此,在这里不容易的WinAPI方式。

+0

谢谢,我认为这是一个死路一条。 –

+0

@ssss,你最好是自己挂上消息,如果这就是你之后:[(使用钩子(MSDN)](http://msdn.microsoft.com/en-us/library/windows/desktop /ms644960(v=vs.85).aspx)。 –

+0

我试图做它作为替换钩(这不适用于vmware),但它似乎即使我得到的文本,它将无法正常工作,我想从VMWare获取键盘消息我认为间谍++接收它,但它没有。所以我想知道如何从列表框中获取文本来学习它。 –