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:/ ...
最新文章
- Docker环境配置指南!
- 如何在 1 秒内将 50 个 OpenCV 帧上传到云存储
- mxnet报错解决:AttributeError: module 'mxnet.context' has no attribute 'num_gpus'
- iis7怎么安装php7,Linux下如何安装php7
- 易混淆知识点(1):word-wrap和word-break傻傻分不清楚
- 2019 ACM/ICPC 南昌站 G,拉格朗日插值
- javascript Event监听
- 四格漫画《MUXing》——请客记
- selenium配置
- php 检测是否有jmail,asp空间判断jmail组件是否安装或支持的代码
- 阿里褚霸专访-揭秘技术男开挂升级的职业路径(回帖有奖)
- 2022年(2023届)西电计算机保研经历分享(清深、自所、计算所、浙科南、北航、哈工等)
- JAVA 清理垃圾文件简单实现
- Could not set property ‘XXX‘ of ‘class com.entity.XXX‘
- 黄瓜客户端java_建造者模式
- 用VB操作注册表 [转]
- python tkinter根据多选框设置state=‘disabled‘控件的属性
- FT、DFT、FFT
- 对象存储OSS之阿里云OSS介绍及开通
- ITN网络课程笔记(四)
热门文章
- GIS最佳路径的分析和制作
- 我的java学习路之循环学习应用demo3猜数字小游戏
- 美少女万华镜2:勿忘草与永远的少女 for Mac 支持M1/M2 中文版 苹果电脑游戏
- 源码安装OpenStack Ussuri ---Keystone篇
- 【BZOJ2893】征服王
- 计算机专业可以考影视编导,影视编导专业需要艺考吗 注意事项有哪些
- Android 10 录屏适配
- 通过多线程为基于 .NET 的应用程序实现响应迅速的用户(MSDN)
- Android Retrofit网络获取数据+Recyclerview展示数据
- 基于Linux的服务器搭建