从另一个应用程序 C# 读取的列表框内容
本文关键字:列表 读取 另一个 应用程序 | 更新日期: 2023-09-27 18:35:34
这个旧的stackoverflow帖子问的问题与我几乎相同,但是使用Spy++我获得了控件句柄ID。 现在呢? :)
我不确定这个过程叫什么,我可以从 .net 应用程序获取另一个应用程序控件的内容,因此我在旧的谷歌机器上的结果没有取得多大成功。
我有一个 MFC 应用程序,其中包含使用 WPF C# 应用程序自动执行任务所需的数据的列表框。我宁愿不使用外部库,并且一旦我找到该过程并让我的 C# 应用程序了解相应的列表控件以执行我需要的操作,我认为它不会太耗费人力。
任何人都可以指出我应该查找的正确方向或提供一些代码来让我入门。在这一点上,我被困住了,我的小项目非常依赖这个。我也不想使用 OCR。
谢谢
灰
若要从 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;
}
这个问题的答案应该让你开始。谷歌P/Invoke
和FindWindow()
/GetWindowText()
系列方法。
希望有帮助。