Tag: code injection

将代码注入到没有自定义属性的所有方法和属性的最简单方法

在Stack Overflow上有很多关于AOP in .NET的问题和解答,经常提到PostSharp和其他第三方产品。 因此,在.NET和C#世界中似乎有相当多的AOP选项。 但是每个都有它们的限制,并且在下载了有希望的PostSharp后, 我在他们的文档中发现“方法必须是虚拟的”才能够注入代码 (编辑:请参阅ChrisWue的答案和我的评论 – 虚拟约束必须有我认为,其中一个竞争者。 我没有进一步研究这个陈述的准确性,但是它的分类性让我回到Stack Overflow。 所以我想回答这个非常具体的问题: 我想在我的项目中没有自定义的 每个方法和属性 (静态,密封,内部,虚拟,非虚拟,无关紧要) 注入简单的 “if(some-condition)Console.WriteLine”样式代码 注释 ,以便在运行时动态测试我的软件。 这个注入的代码不应该保留在发布版本中,它只是用于在开发期间进行动态测试(与线程相关)。 最简单的方法是什么? 我偶然发现Mono.Cecil ,它看起来很理想,除了你似乎必须编写你想在IL中注入的代码。 这不是一个大问题,使用Mono.Cecil很容易获得用C#编写的IL版本的代码。 但是,如果有更简单的东西,理想情况下甚至可以内置到.NET中(我仍然在.NET 3.5上),我想知道。 [更新:如果建议的工具不是.NET Framework的一部分,那么如果它是开源的,如Mono.Cecil,或者免费提供,那就太好了]

通过挂钩直接向另一个进程发送击键

我想知道,在摆弄了SendInput,SendKeys,PostMessage,SendMessage,SendNotifyMessage,keybd_event等等各种问题之后。 为了找到这个…尝试将键盘输入发送到另一个非前台进程是非常挑剔和不可靠的。 我尝试了一种SendInput的方法,我在其中欺骗Z顺序(保持当前窗口在顶部)并快速前进第三方窗口,发送输入,并重新前景我的窗口。 其中最终失败了,而且,不知何故,不确定为什么,设法同时也在我的窗口上触发击键而不是前景(导致在两个窗口之间发送和接收的无限循环,直到我设法关闭该过程)。 我尝试过SendMessage和PostMessage的不同组合。 一个用于向下,一个用于向上,因为同时使用向下和向上导致问题,例如PostMessage用于两者,导致密钥在接收窗口上复制。 或两者的SendMessage,这导致文本输入问题,但其他function正常。 用于keydown的SendMessage和用于keyUp的PostMessage适用于所有function,但可靠性率急剧下降,并且在关键事件中增加了延迟。 只有用于keydown的PostMessage和用于keyup的SendMessage的组合设法做了一些有用的事情,可能有5-10%的密钥注册失败率。 对于SentNotifyMessage也是如此(就可靠性而言,其行为与SendMessage基本相同)。 基本上,我已经结束了,我想知道直接在目标窗口中注入一个钩子,并做一些伏都教以这种方式向它发送击键,绕过消息队列等。这样做将会不会触发全局键事件,只会影响目标窗口。 唯一的问题是,当涉及到注射/挂钩等时,我是不可知的。所以我转向你,社区。 哇呢?