我必须访问本机 c++-mfc 应用程序中的自定义控件。我需要阅读控件的内容。该控件由两个按钮和按钮之间的标签组成。该标签包含一个月和一年,通过按钮我可以在一个月前或将来导航。有没有办法读取这个控件中的文本并访问这两个按钮?
我已经能够访问控件所在的窗口。因此,我使用的是我公司提供的框架。但是使用这个框架是不可能获得上述控件中的文本和按钮的。
我必须访问本机 c++-mfc 应用程序中的自定义控件。我需要阅读控件的内容。该控件由两个按钮和按钮之间的标签组成。该标签包含一个月和一年,通过按钮我可以在一个月前或将来导航。有没有办法读取这个控件中的文本并访问这两个按钮?
我已经能够访问控件所在的窗口。因此,我使用的是我公司提供的框架。但是使用这个框架是不可能获得上述控件中的文本和按钮的。
您必须通过它们的窗口句柄访问控件。因此,您必须获取本机应用程序窗口的窗口句柄,然后尝试找到标签和按钮的窗口句柄(FindWindow
WinAPI 函数)。然后您可以将相应的窗口消息发送到窗口以获取文本或“按下”按钮。
您需要使用FindWindow
和GetWindowText
来自 win32 API(来自pinvoke):
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
仅按标题查找窗口。请注意,您必须IntPtr.Zero
作为第一个参数传递:
[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
您也可以致电FindWindow(default(string), lpWindowName)
或FindWindow((string)null, lpWindowName)
(来自 msdn)将指定窗口的标题栏(如果有)的文本复制到缓冲区中。如果指定的窗口是控件,则复制控件的文本
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);