这个旧的stackoverflow post问我几乎相同的问题,但是使用Spy ++我已经获得了控件句柄ID。怎么办? :)
我不确定这个进程是什么,我可以从.net应用程序获取另一个应用程序控件的内容,因此我在旧的谷歌机器上的结果没有太大的成功。
我有一个带有列表框的MFC应用程序,其中包含使用WPF C#应用程序自动执行任务所需的数据。我宁愿不使用外部库,也不要认为一旦我找到这个过程并且我的C#应用程序可以看到相应的列表控件来完成我需要的工作,就不会太费力了。
任何人都可以指出我正确的方向,我应该查找什么或提供一些代码,让我开始。在这一点上,我被困住了,我的小项目非常依赖于此。我也不想使用OCR。
谢谢,
Ash
答案 0 :(得分: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;
}
答案 1 :(得分:0)
This question的回答应该让你开始。 Google P/Invoke
和FindWindow()
/ GetWindowText()
系列方法。
希望有所帮助。