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

链接: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. Docker环境配置指南!
  2. 如何在 1 秒内将 50 个 OpenCV 帧上传到云存储
  3. mxnet报错解决:AttributeError: module 'mxnet.context' has no attribute 'num_gpus'
  4. iis7怎么安装php7,Linux下如何安装php7
  5. 易混淆知识点(1):word-wrap和word-break傻傻分不清楚
  6. 2019 ACM/ICPC 南昌站 G,拉格朗日插值
  7. javascript Event监听
  8. 四格漫画《MUXing》——请客记
  9. selenium配置
  10. php 检测是否有jmail,asp空间判断jmail组件是否安装或支持的代码
  11. 阿里褚霸专访-揭秘技术男开挂升级的职业路径(回帖有奖)
  12. 2022年(2023届)西电计算机保研经历分享(清深、自所、计算所、浙科南、北航、哈工等)
  13. JAVA 清理垃圾文件简单实现
  14. Could not set property ‘XXX‘ of ‘class com.entity.XXX‘
  15. 黄瓜客户端java_建造者模式
  16. 用VB操作注册表 [转]
  17. python tkinter根据多选框设置state=‘disabled‘控件的属性
  18. FT、DFT、FFT
  19. 对象存储OSS之阿里云OSS介绍及开通
  20. ITN网络课程笔记(四)

热门文章

  1. GIS最佳路径的分析和制作
  2. 我的java学习路之循环学习应用demo3猜数字小游戏
  3. 美少女万华镜2:勿忘草与永远的少女 for Mac 支持M1/M2 中文版 苹果电脑游戏
  4. 源码安装OpenStack Ussuri ---Keystone篇
  5. 【BZOJ2893】征服王
  6. 计算机专业可以考影视编导,影视编导专业需要艺考吗 注意事项有哪些
  7. Android 10 录屏适配
  8. 通过多线程为基于 .NET 的应用程序实现响应迅速的用户(MSDN)
  9. Android Retrofit网络获取数据+Recyclerview展示数据
  10. 基于Linux的服务器搭建