【问题标题】:Get text from Spy++ window从 Spy++ 窗口获取文本
【发布时间】:2012-09-13 08:21:21
【问题描述】:

我正在尝试使用 c++ 从 spy++ 中的“消息”窗口获取文本。

我尝试向窗口及其子窗口发送WM_GETTEXT,LB_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;
}

【问题讨论】:

  • 能否提供相应的代码?
  • 只是出于好奇,“将日志保存到文件...”菜单选项有什么问题?该控件可能是“所有者绘制”的控件,并且标准文本不必存在并且可用于您的消息。

标签: c++ text window spy++


【解决方案1】:

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

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

如果您在网上搜索“get text AfxWnd”,您会看到很多没有答案的问题。有些人诉诸于模拟 Ctrl+C 并获取剪贴板内容,但 Spy++ Messages 窗口似乎不支持 Ctrl+C。

所以,这里没有简单的 WinAPI 方法。

【讨论】:

  • @ssss,你最好自己挂接消息,如果这是你所追求的:(Using Hooks (MSDN)
  • 我试图用它来代替钩子(它不适用于 vmware),但似乎即使我得到文本它也不起作用,我想从 VMWare i 获取键盘消息以为 spy++ 收到它,但它没有。所以我想知道如何从列表框中获取文本来学习它。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多