(附件下载所需积分是系统自动调整的,没法改为低分。。。。够贱)

链接: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按钮文字相关推荐

  1. html更改表单按钮文字,HTML进阶应用技巧(十)用好表单的按钮

    一.制作常规按钮 制作按钮非常简单,在标记中把type参数设置为:type="submit"就获得一个提交按钮,如本例的"提交"按钮:在 标记中把type参数设 ...

  2. 修改 messagebox 按钮文字

    HHOOK   hHook; LRESULT   __stdcall   CBTHookProc(   long   nCode,WPARAM   wParam,LPARAM   lParam)    ...

  3. 【easyUI】easyUI Confirm使用方法及配置文字以及回调以及【更改源码】扩展功能修改按钮文字;

    [easyUI]easyUI Confirm使用方法及配置文字以及回调以及[更改源码]扩展功能修改按钮文字: 基本使用 $.messager.confirm(title,msg,fn) param: ...

  4. 更改Windows系统下的MessageBox按钮显示内容

    在实际开发中,可能会碰到这样一个场景:使用Windows系统下的MessageBox给出提示信息时,按钮的显示内容是Windows已经设定好的,无法更改.比如,在中文系统下,IDOK对应的按钮内容为& ...

  5. 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )

    文章目录 一.安装 MFC 开发组件 二.创建 MFC 应用 三.MFC 应用窗口编辑 四.为按钮添加点击事件 五.修改按钮文字 六.打开系统其它应用 七.博客源码 一.安装 MFC 开发组件 打开 ...

  6. 如何更改微调器的文字大小和文字颜色?

    本文翻译自:How to change spinner text size and text color? In my Android application, I am using spinner, ...

  7. vc设置按钮文字颜色

    设置按钮文字颜色使用 CMFCBUTTON即可 在OnInitDialog函数加入如下内容即可 ((CMFCButton*)GetDlgItem(IDC_MFCBUTTON1))->SetTex ...

  8. php点击按钮变文字,点击按钮文字变成input框,点击保存变成文字的实现

    下面为大家带来一篇点击按钮文字变成input框,点击保存变成文字的实现代码.内容挺不错的,现在分享给大家,也给大家做个参考. 点击按钮文字变成input框,点击保存变成文字的实现代码 点击按钮文字变成 ...

  9. 练习:----点击按钮文字变颜色

    点击按钮文字变颜色 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

最新文章

  1. c语言储存10的500,c语言程序基础练习题500道
  2. OO第一单元作业总结
  3. 清单文件中android support,Android FileProvider 配置
  4. android dialog 自定义布局,如何设置AlertDialog的自定义布局?
  5. [html] 如何使用html5进行图片压缩上传?
  6. 大数据算法 十大经典算法
  7. jeDate实现日期联动
  8. hive_实现ip的十进制和点分十进制(xxx.xxx.xxx.xxx)之间的相互转换
  9. Autel Maxisys Elite Common FAQs
  10. 教师用计算机使用制度,计算机教室使用制度(5篇范例)
  11. 计算机网络设备接地规范,网络机房防雷接地的四种方式及静电要求
  12. 互联网架构设计 (高并发高可用性)
  13. linux查询网络uuid,【山外问道】Linux UUID的查询方法
  14. ActivityManagerService架构剖析开篇
  15. 微信小程序云开发之云函数使用
  16. 非居民账户(NRA)和OSA
  17. 教师资格证的面试科目
  18. 2022年双循环行业研究报告
  19. IM学习-Openfire管理界面(四)
  20. 三十二楼层选几层最好_特大事件!1-32高楼层选最佳楼层 32层的电梯楼买房子几楼最好 黄金楼层...

热门文章

  1. 2021年塔式起重机司机考试总结及塔式起重机司机证考试
  2. 快捷回复软件有哪些,哪些快捷回复软件可提高卖家的效率
  3. 钱兔无量!年终锦鲤大礼包欢迎你来拿!
  4. 面向对象与魔兽争霸(转载)
  5. 宁波银行一面面经-2019秋招
  6. anaconda的python如何降级_如何使用Anaconda将IPython4降级为3
  7. 创造与魔法java语言_创造与魔法战宠技能详解 战宠技能汇总
  8. 1688搜索工厂数据API接口-(item_search_factory-按关键字搜索工厂数据API接口)
  9. Android开发之使用MediaRecorder录制声音
  10. 基于3s和地学知识的MH370搜救方案编制