3

这篇旧的 stackoverflow帖子问的问题与我的问题几乎相同,但是使用 Spy++ 我已经获得了控件句柄 ID。怎么办?:)

我不确定这个过程叫什么,我可以从 .net 应用程序获取另一个应用程序控件的内容,因此我在旧谷歌机器上的结果没有多大成功。

我有一个带有列表框的 MFC 应用程序,其中包含使用 WPF C# 应用程序自动执行任务所需的数据。我宁愿不使用外部库,并且一旦我找到该过程并让我的 C# 应用程序查看相应的列表控件来执行我需要的操作,我不认为它会太费力。

任何人都可以请我指出我应该查找的正确方向或提供一些代码让我开始。在这一点上,我被困住了,我的小项目非常依赖于此。我也不想使用 OCR。

谢谢,

4

2 回答 2

2

要从 Win32 ListBox 控件中获取文本,您必须使用专门针对该控件的消息和函数,这是一个参考:

http://msdn.microsoft.com/en-us/library/windows/desktop/ff485971%28v=vs.85%29.aspx

在您的情况下,您应该首先查看列表框中有多少项目LB_GETCOUNT,然后为每个项目获取文本LB_GETTEXT

这是将返回列表中的项目的方法,参数是 ListBox 控件窗口句柄:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, StringBuilder lParam); 
const int LB_GETCOUNT = 0x018B;
const int LB_GETTEXT = 0x0189;

private List<string> GetListBoxContents(IntPtr listBoxHwnd)
{
  int cnt = (int)SendMessage(listBoxHwnd, LB_GETCOUNT, IntPtr.Zero, null);
  List<string> listBoxContent = new List<string>();
  for (int i = 0; i < cnt; i++)
  {
    StringBuilder sb = new StringBuilder(256);
    IntPtr getText = SendMessage(listBoxHwnd, LB_GETTEXT, (IntPtr)i, sb);
    listBoxContent.Add(sb.ToString());
  }
  return listBoxContent;
}
于 2012-05-28T12:04:41.680 回答
0

这个问题的答案应该让你开始。谷歌P/InvokeFindWindow()/GetWindowText()系列方法。

希望有帮助。

于 2012-05-28T09:50:21.483 回答