当前位置: 首页 > news >正文

C# WinForm MessageBox自定义按键文本 COM组件版

c# 更改弹窗MessageBox按钮文字_c# messagebox.show 字体-CSDN博客

需要用到大佬上传到百度云盘的Hook类,在大佬给的例子的基础上改动了点。

应用时自己加GUID和ProgID。

组件实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace HookMessageBox
{[ComVisible(true)][Guid("")]interface IHookMessageBox{[DispId(1)]void ReadBtnLanguage();[DispId(1)]DialogResult MessageBoxOKBtnShow(string text,string caption, MessageBoxIcon icon);[DispId(1)]DialogResult MessageBoxYesOrNoBtnShow(string text,string caption, MessageBoxIcon icon);[DispId(1)]DialogResult MessageBoxYesOrNoOrCancelBtnShow(string text,string caption, MessageBoxIcon icon);}[ComVisible(true)][Guid("")][ProgId("")]public class ClsHookMessageBox: IHookMessageBox{private string OKText { get; set; }private string YesText { get; set; }private string NoText { get; set; }private string CancelText { get; set; }public void ReadBtnLanguage(){OKText = "OK";YesText = "Yes";NoText = "No";CancelText = "Cancel";}public DialogResult MessageBoxOKBtnShow(string text,string caption,MessageBoxIcon icon=MessageBoxIcon.None){return HookMessageBoxShow(text:text, caption:caption,okText: OKText, icon:icon);}public DialogResult MessageBoxYesOrNoBtnShow(string text, string caption, MessageBoxIcon icon = MessageBoxIcon.None){return HookMessageBoxShow(text: text, caption: caption, yesText: YesText, noText: NoText, buttons:MessageBoxButtons.YesNo,icon: icon);}public DialogResult MessageBoxYesOrNoOrCancelBtnShow(string text, string caption, MessageBoxIcon icon = MessageBoxIcon.None){return HookMessageBoxShow(text: text, caption: caption, yesText: YesText, noText: NoText, cancelText: CancelText, buttons: MessageBoxButtons.YesNoCancel, icon: icon);}private DialogResult HookMessageBoxShow(string text, string caption, MessageBoxButtons buttons= MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.None,string okText="",string yesText = "", string noText = "", string cancelText = ""){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}");}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}");}if (!string.IsNullOrEmpty(okText) && HookINCS.Win32Api_Hook.GetDlgItem(hChildWnd, 1) != 0)//IDOK =  1{result = HookINCS.Win32Api_Hook.SetDlgItemTextA(hChildWnd, 1, $"{okText}");}};hook.InstallMessageBoxHook();DialogResult dialogResult = MessageBox.Show(text, caption, buttons, icon);hook.UninstallMessageBoxHook();//卸载钩子return dialogResult;}}
}

调用:

object obj = Activator.CreateInstance(Type.GetTypeFromProgID("HookMessageBox.ClsHookMessageBox"));
obj.GetType().GetMethod("ReadBtnLanguage").Invoke(obj, new object[] { });
DialogResult btn1=(DialogResult)obj.GetType().GetMethod("MessageBoxOKBtnShow").Invoke(obj, new object[] { "messageboxText", "messageCaption", MessageBoxIcon.None });
DialogResult btn2 = (DialogResult)obj.GetType().GetMethod("MessageBoxYesOrNoBtnShow").Invoke(obj, new object[] { "messageboxText", "messageCaption", MessageBoxIcon.None });
DialogResult btn3 = (DialogResult)obj.GetType().GetMethod("MessageBoxYesOrNoOrCancelBtnShow").Invoke(obj, new object[] { "messageboxText", "messageCaption", MessageBoxIcon.None });

效果:

551cfb2aff8642c59fcb8b55eefd0c05.pngebdc9b8033154c34ad8d29237d6316f8.png9cacc93d1135493799303f1414601dc9.png

http://www.lryc.cn/news/275373.html

相关文章:

  • 基于SpringBoot微信小程序的宠物美容预约系统设计与实现
  • 在 docker 容器中配置双网卡,解决通讯的问题
  • uniapp中uview组件库CircleProgress 圆形进度条丰富的使用方法
  • Linux操作系统基础(12):Linux的Shell解释器
  • Android开发编程从入门到精通,安卓技术从初级到高级全套教学
  • HackTheBox - Medium - Linux - BroScience
  • `nginx/conf/nginx.conf`最简配置说明
  • 商务智能|描述性统计分析与数据可视化
  • 【游记】GDKOI2024
  • linux支持的零拷贝类型以及java对应的支持
  • 【TypeScript】声明文件
  • 基于Flutter构建小型新闻App
  • 利用python将excel文件转成txt文件,再将txt文件上传hdfs,最后传入hive中
  • 【自学笔记】01Java基础-07面向对象基础-02继承
  • 二分查找(一)
  • 【华为OD真题 Python】精准核酸检测
  • Springboot使用logback
  • 【REST2SQL】03 GO读取JSON文件
  • 数据库-MySQL 启动方式
  • YAML使用
  • 读书之深入理解ffmpeg_简单笔记2(初步)
  • ELK+kafka+filebeat企业内部日志分析系统搭建
  • 勒索检测能力升级,亚信安全发布《勒索家族和勒索事件监控报告》
  • 编译原理复习的有用链接
  • 不带控制器打包exe,转pdf文件时失败的原因
  • Python 注释的方法
  • webman插件创建
  • 大模型迎来“AppStore时刻”,OpenAI给2024的新想象
  • ubuntu解决在pycharm上使用jupyter无法导入虚拟环境中的包的问题
  • 探索2024年软件测试的几大主导趋势