gpt4 book ai didi

c# - 从另一个应用程序 C# 中读取列表框内容

转载 作者:行者123 更新时间:2023-11-30 17:12:19 25 4
gpt4 key购买 nike

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

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

我有一个带有列表框的 MFC 应用程序,其中包含我需要使用 WPF C# 应用程序自动执行任务的数据。我宁愿不使用外部库,也不认为一旦我找到流程并让我的 C# 应用程序获取相应列表控件的可见性来执行我需要的操作,这将不会太费力。

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

谢谢,

Ember

最佳答案

要从 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;
}

关于c# - 从另一个应用程序 C# 中读取列表框内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com