是否可以从现有 DLL 中阻止消息框?
我正在使用 C# winforms 应用程序,我是项目中的 dll,当从该 dll 调用该函数时,我从中得到不需要的 MessageBox。是否可以阻止该 MessageBox?
I am working with C# winforms Application i am dll in my project when call that function from that dll i get unwanted MessageBox from that .Is it possible to block that MessageBox?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果到了紧要关头,您可以启动一个线程,使用 WinAPI 或库按标题杀死所有打开的窗口。
我会诉诸不太严厉的机制,例如首先更改 dll 或向正确的人员提出更改请求。
If push comes to shove, you can fire up a thread that kills off any open windows by title using WinAPI or libraries.
I'd resort to less harsh mechanisms like changing the dll first or putting a change req to the right people.
如果这是第三方 dll,则没有很好的选择来摆脱消息框。
但是,由于 C# 被编译为 IL,因此您可以查看字节代码并删除对
MessageBox.Show
的调用,或将其替换为对Trace.WriteLine
的调用。您可以使用 SDK 附带的ildasm.exe
/ilasm.exe
工具来执行此操作。There is no nice option to get rid of the message box if this is a third-party dll.
However, as C# is compiled to IL you can view the byte code and remove the call to
MessageBox.Show
or replace it with a call toTrace.WriteLine
. You can do this e.g. using theildasm.exe
/ilasm.exe
tools coming with the SDK.您可以使用十六进制编辑器、调试器或某些资源查看器研究该 dll,以了解如何创建对话框,然后订阅该 Windows 事件(如 OnCreate - 浏览 WinAPI 文档以获取有关 Windows 创建函数的信息)。在您的事件处理程序中尝试抑制对话框并查看 dll 函数是否对对话框未显示这一事实感到高兴
You can study that dll with hex-editor, debugger or some resource viewer to find out how dialog box is created and then subscribe to that Windows event (Like OnCreate - surf WinAPI docs for info on Windows creation functions). In your event handler try to suppress dialog box and see if dll function is happy about the fact that dialog wasn't shown
如果您的 dll 是托管代码,您可以反编译它并删除 MessageBox 调用,如 0xA3 建议的那样。如果您的 dll 是本机的,则可以使用 API 挂钩。您可以在此处找到 WinAPI 挂钩示例。它是 C++ 语言,但可以轻松转换为 C#。
If your dll is managed code you can decompile it and remove MessageBox call like 0xA3 suggested. If your dll is native you can use API hooking. Example of WinAPI hooking you can find here. It's in C++, but can be easily translated to C#.