c# 更改弹窗MessageBox按钮文字
(附件下载所需积分是系统自动调整的,没法改为低分。。。。够贱)
链接:https://pan.baidu.com/s/1zQ0AryH1e_F2sDhQkNU_tg
提取码:5aru
https://download.csdn.net/download/jwb7832007/12521690
需要用到hook,具体hook类在附件里,此hook类也是网上扒来的,忘了地址了。。。。否则作为尊重应该贴上原文地址的。。。
原hook类写了有键鼠hook,MessageBox 是我后添加的,如果有其他hook也可以参照我的方式自己添加。
详解自定义hook:(以下都是hook类里有的,不需要再复制添加)
具体调用方式在末尾的第二个代码段内有,复制过去就可以用
首先定义一个事件,在写对应的钩子回调函数,在函数内触发事件即可,至于事件的具体执行什么动作则在外部定义hook时设置,和注册控件的事件一样的。
下面就是一个自定义hook所需要添加的完整代码
Hook.cs:
/// <summary>/// 弹窗钩子/// </summary>private int msboxHook = 0;/// <summary>/// 弹窗钩子回调函数/// </summary>private HookProc mboxHook;
/// <summary>/// 定义一个自定义的事件 /// </summary>public event EventHandler<MessageBoxEventArgs> OnMessageBoxShow;public class MessageBoxEventArgs{public MessageBoxEventArgs() { }public MessageBoxEventArgs(IntPtr _hChildWnd){hChildWnd = _hChildWnd;}public IntPtr hChildWnd;}/// <summary>/// 安装弹窗钩子/// </summary>/// <param name="type"></param>public void InstallMessageBoxHook(){InstallMessageBoxHook(HookType.WH_CBT);}/// <summary>/// 安装弹窗钩子/// </summary>/// <param name="type"></param>public void InstallMessageBoxHook(HookType type){if (msboxHook == 0){mboxHook = new HookProc(DefaultMessageBoxHookProc);msboxHook = Win32Api_Hook.SetWindowsHookEx(type,mboxHook,Win32Api_Hook.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName),Win32Api_Hook.GetCurrentThreadId()//自身线程,如果是0则表示全局);if (msboxHook == 0)UninstallMessageBoxHook();}}/// <summary>/// 卸载弹窗钩子/// </summary>public void UninstallMessageBoxHook(){UninstallHook(ref msboxHook);}/// <summary>/// 这是一个钩子回调函数,参数都是统一的/// </summary>private int DefaultMessageBoxHookProc(int nCode, int wParam, IntPtr lParam){IntPtr hChildWnd;// msgbox is "child"// notification that a window is about to be activated// window handle is wParamif (nCode == 5)//HCBT_ACTIVATE = 5 {// set window handles of messageboxhChildWnd = (IntPtr)wParam;//to get the text of yes button//自定义事件,在外部调用时通过注册事件执行对应逻辑即可OnMessageBoxShow.Invoke(this, new MessageBoxEventArgs(hChildWnd));//return (IntPtr)1; //直接返回了,该消息就处理结束了return Win32Api_Hook.CallNextHookEx(msboxHook, nCode, wParam, lParam);// otherwise, continue with any possible chained hooks; //返回,让后面的程序处理该消息}
具体调用方式
private void checkBox_pause_CheckedChanged(object sender, EventArgs e){BeginInvoke(new Action(() =>{if (!checkBox_pause.Checked){Properties.Settings.Default.pause = false;Properties.Settings.Default.pauseWorker = false;Logger.Log("已取消暂停,恢复运行");return;}Action<DialogResult> handle = (dialogResult) => {if (dialogResult == DialogResult.Yes){Properties.Settings.Default.pause = true;Logger.Warn("已暂停,将暂停开启新线程和已开启的工作线程");}else if (dialogResult == DialogResult.No){Properties.Settings.Default.pauseWorker = true;Logger.Warn("已暂停开启新线程,已开启线程将继续运行直到完成");}};HookMessageBoxShow($"(Y)暂停整个程序\r\n(N)暂停开启新线程,已开启线程会继续执行", "暂停", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information,"暂停(Y)", "暂停开新(N)", "", handle);}));}/// <summary>/// 带返回值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="text"></param>/// <param name="caption"></param>/// <param name="buttons"></param>/// <param name="icon"></param>/// <param name="yesText"></param>/// <param name="noText"></param>/// <param name="cancelText"></param>/// <param name="handleResult"></param>/// <returns></returns>public T HookMessageBoxShow<T>(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon = MessageBoxIcon.Information,string yesText = "",string noText = "",string cancelText = "",Func<DialogResult,T> handleResult = null){//hook 修改弹出窗按钮 文本var hook = new HookINCS.Hook();hook.OnMessageBoxShow += (s, mbe) =>{IntPtr hChildWnd = mbe.hChildWnd;int result;if (!string.IsNullOrEmpty(yesText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 6) != 0)//IDYES = 6{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 6, $"{yesText}");//在Project.Resources里自定义文本}if (!string.IsNullOrEmpty(noText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 7) != 0)//IDNO = 7{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 7, $"{noText}");}if (!string.IsNullOrEmpty(cancelText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 2) != 0)//IDCANCEL = 2{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 2, $"{cancelText}");}};hook.InstallMessageBoxHook();DialogResult dialogResult = MessageBox.Show(text, caption, buttons, icon);if (handleResult == null){//卸载钩子hook.UninstallMessageBoxHook();return default;}//卸载钩子hook.UninstallMessageBoxHook();return handleResult(dialogResult);}/// <summary>/// 不带返回值/// </summary>/// <param name="text"></param>/// <param name="caption"></param>/// <param name="buttons"></param>/// <param name="icon"></param>/// <param name="yesText"></param>/// <param name="noText"></param>/// <param name="cancelText"></param>/// <param name="handleResult"></param>public void HookMessageBoxShow(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon = MessageBoxIcon.Information,string yesText = "", string noText = "", string cancelText = "", Action<DialogResult> handleResult = null){//hook 修改弹出窗按钮 文本var hook = new HookINCS.Hook();hook.OnMessageBoxShow += (s, mbe) =>{IntPtr hChildWnd = mbe.hChildWnd;int result;if (!string.IsNullOrEmpty(yesText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 6) != 0)//IDYES = 6{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 6, $"{yesText}");//在Project.Resources里自定义文本}if (!string.IsNullOrEmpty(noText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 7) != 0)//IDNO = 7{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 7, $"{noText}");}if (!string.IsNullOrEmpty(cancelText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 2) != 0)//IDCANCEL = 2{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 2, $"{cancelText}");}};hook.InstallMessageBoxHook();DialogResult dialogResult = MessageBox.Show(text, caption, buttons, icon);if (handleResult != null)handleResult(dialogResult);//卸载钩子hook.UninstallMessageBoxHook();}
c# 更改弹窗MessageBox按钮文字相关推荐
- html更改表单按钮文字,HTML进阶应用技巧(十)用好表单的按钮
一.制作常规按钮 制作按钮非常简单,在标记中把type参数设置为:type="submit"就获得一个提交按钮,如本例的"提交"按钮:在 标记中把type参数设 ...
- 修改 messagebox 按钮文字
HHOOK hHook; LRESULT __stdcall CBTHookProc( long nCode,WPARAM wParam,LPARAM lParam) ...
- 【easyUI】easyUI Confirm使用方法及配置文字以及回调以及【更改源码】扩展功能修改按钮文字;
[easyUI]easyUI Confirm使用方法及配置文字以及回调以及[更改源码]扩展功能修改按钮文字: 基本使用 $.messager.confirm(title,msg,fn) param: ...
- 更改Windows系统下的MessageBox按钮显示内容
在实际开发中,可能会碰到这样一个场景:使用Windows系统下的MessageBox给出提示信息时,按钮的显示内容是Windows已经设定好的,无法更改.比如,在中文系统下,IDOK对应的按钮内容为& ...
- 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )
文章目录 一.安装 MFC 开发组件 二.创建 MFC 应用 三.MFC 应用窗口编辑 四.为按钮添加点击事件 五.修改按钮文字 六.打开系统其它应用 七.博客源码 一.安装 MFC 开发组件 打开 ...
- 如何更改微调器的文字大小和文字颜色?
本文翻译自:How to change spinner text size and text color? In my Android application, I am using spinner, ...
- vc设置按钮文字颜色
设置按钮文字颜色使用 CMFCBUTTON即可 在OnInitDialog函数加入如下内容即可 ((CMFCButton*)GetDlgItem(IDC_MFCBUTTON1))->SetTex ...
- php点击按钮变文字,点击按钮文字变成input框,点击保存变成文字的实现
下面为大家带来一篇点击按钮文字变成input框,点击保存变成文字的实现代码.内容挺不错的,现在分享给大家,也给大家做个参考. 点击按钮文字变成input框,点击保存变成文字的实现代码 点击按钮文字变成 ...
- 练习:----点击按钮文字变颜色
点击按钮文字变颜色 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
最新文章
- c语言储存10的500,c语言程序基础练习题500道
- OO第一单元作业总结
- 清单文件中android support,Android FileProvider 配置
- android dialog 自定义布局,如何设置AlertDialog的自定义布局?
- [html] 如何使用html5进行图片压缩上传?
- 大数据算法 十大经典算法
- jeDate实现日期联动
- hive_实现ip的十进制和点分十进制(xxx.xxx.xxx.xxx)之间的相互转换
- Autel Maxisys Elite Common FAQs
- 教师用计算机使用制度,计算机教室使用制度(5篇范例)
- 计算机网络设备接地规范,网络机房防雷接地的四种方式及静电要求
- 互联网架构设计 (高并发高可用性)
- linux查询网络uuid,【山外问道】Linux UUID的查询方法
- ActivityManagerService架构剖析开篇
- 微信小程序云开发之云函数使用
- 非居民账户(NRA)和OSA
- 教师资格证的面试科目
- 2022年双循环行业研究报告
- IM学习-Openfire管理界面(四)
- 三十二楼层选几层最好_特大事件!1-32高楼层选最佳楼层 32层的电梯楼买房子几楼最好 黄金楼层...
热门文章
- 2021年塔式起重机司机考试总结及塔式起重机司机证考试
- 快捷回复软件有哪些,哪些快捷回复软件可提高卖家的效率
- 钱兔无量!年终锦鲤大礼包欢迎你来拿!
- 面向对象与魔兽争霸(转载)
- 宁波银行一面面经-2019秋招
- anaconda的python如何降级_如何使用Anaconda将IPython4降级为3
- 创造与魔法java语言_创造与魔法战宠技能详解 战宠技能汇总
- 1688搜索工厂数据API接口-(item_search_factory-按关键字搜索工厂数据API接口)
- Android开发之使用MediaRecorder录制声音
- 基于3s和地学知识的MH370搜救方案编制