惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
S
Securelist
P
Proofpoint News Feed
D
DataBreaches.Net
Cisco Talos Blog
Cisco Talos Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Project Zero
Project Zero
A
About on SuperTechFans
罗磊的独立博客
WordPress大学
WordPress大学
月光博客
月光博客
Latest news
Latest news
C
Cyber Attacks, Cyber Crime and Cyber Security
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
AI
AI
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Help Net Security
Help Net Security
T
Tor Project blog
V
Vulnerabilities – Threatpost
C
Cisco Blogs
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MyScale Blog
MyScale Blog
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
Forbes - Security
Forbes - Security
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
T
Threat Research - Cisco Blogs
B
Blog RSS Feed
博客园 - 叶小钗
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Simon Willison's Weblog
Simon Willison's Weblog
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic

博客园 - 说不得

折腾了两天的跨站脚本提交问题,与IIS7有关 MongoDB 服务启动时指定dbpath DataGridView绑定行号 【转帖】三种决不能放进数据库的东西 Func<T, TResult>的一个使用场合 没别的,来张截图好了 SqlBulkCopy使用心得 使用两个信号量实现主线程和线程池同步 VS2010 出现错误提示“Error Creating Control - Object reference not set to an instance of an objec” 的解决方法 SQLite.Net操作类 Win7 下使用 SQLite Expert 操作C盘下的数据库发生错误:Attempt to write a readonly database. C#查找某一窗口并按钮 再见,Google 计算两张黑白图片的相似度 使用c#把一个32位整数按位相加最快的方法是什么? 关于变量在循环内声明还是在循环外声明 轻量级分页控件 安装sqlserver2008时出现“Rule "Previous releases of Microsoft Visual Studio 2008" failed.”错误的解决办法 最近见过的垃圾代码 - 说不得 - 博客园
使用ManagedSpyLib监视.net程序中控件属性的变化
说不得 · 2010-03-18 · via 博客园 - 说不得

手头的需求是这样的:

现有一个.net程序,界面上某个控件的Text属性值会变化,需要另外写一个程序去监视这个值的变化。

如果是个C++程序员,这个需求一定很简单,挂上钩子就OK了。

不过我想用.net程序实现。

在拜了无数遍Google大神之后,我找到了这个东西—ManagedSpy,这个东西有个类库ManagedSpyLib是托管C++写的,其中有个类叫做ControlProxy,作用就是允许你访问其他进程中的控件。

有这么好的东西就先拿来试试,看看能不能达到我们的需求。

实验步骤如下:

准备一个程序,来表示界面上某个控件Text属性的变化,这就很简单了,窗体上拖个按钮,每按一次按钮,窗体的Text值就会自加1

嘿嘿,已经按了很多次了

接下来依葫芦画瓢,根据那个ManagedSpy中的例子,自己写个程序调用ManagedSpyLib中的方法来实现开头的功能。

界面很简单,按“开始记录”就会把Text的变化显示在下面的ListBox

开始记录按钮的事件处理函数这样写:

IntPtr handle = IntPtr.Zero;
//获取所有进程
Process[] processes = Process.GetProcesses();
//根据进程名字定位到需要监视的进程
foreach (Process process in processes.Where(process => process.ProcessName == "WindowsFormsApplication2"))
{
    
//拿到进程主窗体句柄
    handle = process.MainWindowHandle;
    
break;
}
//使用ControlProxy的方法取得主窗体实例
proxy = ControlProxy.FromHandle(handle);
//根据实例中所有支持的事件的名字找到需要的事件订阅之
foreach(EventDescriptor ed in proxy.GetEvents().Cast<EventDescriptor>().Where(ed => ed.Name == "TextChanged"))
{
    proxy.SubscribeEvent(ed);
}
//挂上事件处理函数
proxy.EventFired += ProxyEventFired;

光拿到事件还不行啊,我们必须得到属性值,所以事件处理函数ProxyEventFired中还要进行处理

//使用GetValue方法可以很容易的办到这个事情
lbRecords.Items.Insert(0, proxy.GetValue("Text"));

程序写完了,根据运行结果,完全可以实现我们的需求。

PSManagedSpyLib是托管C++写的,理论上完全可以转化为C#代码,不过现在还没有时间,以后再弄吧。

其实我上面写的那些东西在这里都已经写的很清楚了,我只不过是取了其中的部分用法写了这篇文章。