C#中对别的进程主窗体的控件扫描

时间:2022-08-30 18:08:48
能不能在不同进程下来枚举所有的别的进程主窗口的控件?(别的窗口程序可能是非.net程序)
比如我列出所有的进程,当我选择某个进程时,然后列出所有这个进程主窗口下的子窗口。然后获得子窗体的属性集合(就象spy++那样),该怎么做?
还有我也想用最开始说的那样,先列出主窗口的控件,然后获得控件的句柄。
两种方法我都想知道是否可行,怎么做。
注:两种方法都要在C#.NET下开发,而且另外的进程编写的语言都不知道

14 个解决方案

#1


如果你不会API,windows消息机制,你还是先了解一下先吧。C#干不了全部。

#2


无法获得别的进程的控件,我用自己写的WINSPY得到另一进程的控件句柄,但无法得到控件本身
用Control.FromHandle返回的是NULL
要得到别的进程控件的标题,类名简单,就是先得到指定窗口句柄,然后用EnumChildWindows
public delegate bool CallBack(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.Dll")]
public static extern bool EnumChildWindows(IntPtr hWndParent,CallBack pfn, IntPtr lParam); 
只要在你的CALLBACK中使用API的GetWindowText,GetClassName就行了,哈哈要不要把我的代码全给你呢?

#3


哈哈,多谢谢一把手。
我的编程只需要控件的句柄,因为编程的时候我不能确定要发消息给哪子窗口,所以我要列出窗口标题给用户选择。我开始是不太想用API,觉得很麻烦。
多谢你的回答,嘿嘿,我对你的WINSPY的代码很感兴趣,不知道你是怎么获得别的进程的控件集合的

#4


MARK

#5


#6


还有,昨天我对一个进程的主窗口进行EnumChildWindows的枚举,怎么有时候能枚举到7个,有时候怎么1个也找不到,请问可能是什么原因呢?和EnumChildWindows有关系吗?
我是先GetProcesses(),然后找出我要的进程,再handle=por.Handle获得句柄,
再EnumChildWindows(handle,callback,IntPtr.Zero,0)

#7


我用spy++查看那个进程的主窗口,竟然没有发现它的子窗口,但是那个窗口名名有好多按钮个输入框的呀!!

#8


还是用我的WINSPY吧,现在功能不是很多,反正能实现你的要求,留下QQ
我送你代码,反正我送给好多网友了,我没空间,只能用QQ给你,不要信箱,我不写信的

#9



感谢呀
我的MSN:zsuyb@hotmail.com
你的?

#10


[up]

#11


学习ing

#12


朋友,我没MSN啊,很早前用的那个忘了密码了,给个QQ吧
谁有空间也可以说一下,我放上去,以免大家重复开发
不过拒绝信箱

#13


给我QQ号,收到代码且你自己看就明白了,代码中用了好多API,今晚我改了一下,也可以得到密码框的内容了,其实就是把原来getwindowtext换成sendmessage

#14


恩。多谢了
QQ:22261318

#1


如果你不会API,windows消息机制,你还是先了解一下先吧。C#干不了全部。

#2


无法获得别的进程的控件,我用自己写的WINSPY得到另一进程的控件句柄,但无法得到控件本身
用Control.FromHandle返回的是NULL
要得到别的进程控件的标题,类名简单,就是先得到指定窗口句柄,然后用EnumChildWindows
public delegate bool CallBack(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.Dll")]
public static extern bool EnumChildWindows(IntPtr hWndParent,CallBack pfn, IntPtr lParam); 
只要在你的CALLBACK中使用API的GetWindowText,GetClassName就行了,哈哈要不要把我的代码全给你呢?

#3


哈哈,多谢谢一把手。
我的编程只需要控件的句柄,因为编程的时候我不能确定要发消息给哪子窗口,所以我要列出窗口标题给用户选择。我开始是不太想用API,觉得很麻烦。
多谢你的回答,嘿嘿,我对你的WINSPY的代码很感兴趣,不知道你是怎么获得别的进程的控件集合的

#4


MARK

#5


#6


还有,昨天我对一个进程的主窗口进行EnumChildWindows的枚举,怎么有时候能枚举到7个,有时候怎么1个也找不到,请问可能是什么原因呢?和EnumChildWindows有关系吗?
我是先GetProcesses(),然后找出我要的进程,再handle=por.Handle获得句柄,
再EnumChildWindows(handle,callback,IntPtr.Zero,0)

#7


我用spy++查看那个进程的主窗口,竟然没有发现它的子窗口,但是那个窗口名名有好多按钮个输入框的呀!!

#8


还是用我的WINSPY吧,现在功能不是很多,反正能实现你的要求,留下QQ
我送你代码,反正我送给好多网友了,我没空间,只能用QQ给你,不要信箱,我不写信的

#9



感谢呀
我的MSN:zsuyb@hotmail.com
你的?

#10


[up]

#11


学习ing

#12


朋友,我没MSN啊,很早前用的那个忘了密码了,给个QQ吧
谁有空间也可以说一下,我放上去,以免大家重复开发
不过拒绝信箱

#13


给我QQ号,收到代码且你自己看就明白了,代码中用了好多API,今晚我改了一下,也可以得到密码框的内容了,其实就是把原来getwindowtext换成sendmessage

#14


恩。多谢了
QQ:22261318