2 weixin 39824955 weixin_39824955 于 2017.09.01 10:57 提问

怎么获取一个窗体里面的控件的状态? 5C

现在想实现的是通过程序去获取一个指定的窗体里面的几个控件的状态、属性,
窗体程序不能增添代码,没提供接口给我去读取它里面控件的属性。网上查了一下,
提到了通过FineWindow(string a, string b)来做。
可是看了一下没搞明白怎么去做,望大神们提供一些解决方案,最好还是有代码。谢谢啦~!

3个回答

lcmsx
lcmsx   2017.09.01 11:17

你在使用FindWindow去获得窗体里面的控件,我猜测你是想获取其它进程里面的控件状态吧!
1、如果是本程序中的窗体的话,你可以使用(Window)System.Windows.Interop.HwndSource.FromHwnd(IntPtr 这个是你要获取控件的窗体的句柄).RootVisual 获得这个窗口的资源,然后再获取里面某个控件的属性就OK了,接下来你应该知道怎么写代码了吧。
2、如果是其它进程里面的控件,且你那个其它进程你确定是.NET编写的话,你可以使用ManagedSpy去获取。具体怎么用,你百度一下就知道了。
3、如果其它进程是非.NET进程,那么你就得使用 FindWindow了。这个的话,具体怎么获取我也不太清楚,你只有自己百度试试咯!

如果楼主觉得有帮助,望采纳。

weixin_39824955
weixin_39824955 刚刚差了一下,好像需要ManagedSpylib.dll 你有吗?
3 个月之前 回复
lcmsx
lcmsx   2017.09.01 14:26

这个网上很好找的。 https://github.com/ForNeVeR/ManagedSpy

这里下载,如果有用,麻烦采纳哟。

weixin_39824955
weixin_39824955 不知道怎么下.... 你能提供源程序么?
3 个月之前 回复
Amber_gys
Amber_gys   2017.09.01 17:11

可以使用GetFocus这个API函数获得焦点控件的句柄,再转换为Control即可。

[DllImport("user32.dll")]
private static extern IntPtr GetFocus();

public Control GetFocusedControl()
{
IntPtr hwnd = GetFocus();
Control ctl = Control.FromHandler(hwnd);
return ctl;
}

weixin_39824955
weixin_39824955 这好像不能获取到别的窗体的控件
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片