.net - 更改单个应用程序的系统颜色(Windows、.NET)

标签 .net winapi colors user32 systemcolors

我知道我通常应该避免弄乱这样的系统设置,但我的应用程序确实已经使用了非标准颜色,我对此没有影响。我希望能够在某些地方添加标准的 .NET 控件,但它们的颜色不匹配。我想要一个 hack 来替换这个应用程序的系统颜色。需要注意的更重要的事情是它是一个 .NET 应用程序。

到目前为止,我的(不完整的)想法是:

  • 使用替换的 GetSysColor 创建代理 User32.dll 库,但这会非常繁琐(731 个函数要重定向,1 个函数要替换),而且我不知道如何强制我的应用程序使用该特定副本。
  • 以某种方式拦截对 GetSysColors 的调用(不幸的是,我认为它在 CLR 的某个地方)。
  • 以某种方式修改 .NET 类 SystemColors(在内存中?有可能吗?)。

  • 您有什么想法,实现这一目标的最佳(和完整)方法是什么?

    最佳答案

    I would like to be able to add standard .NET controls in some places, but their colors do not match. I would like to have a hack that would replace system colors for this one application.



    这就像用大锤钉钉子。

    您可以做的是从您想要使用的每个库存控件中继承一个新控件,而不是在系统本身内部弄乱颜色。因此,您可以从股票 TextBox 控件继承而不是普通的 TextBox 来创建您自己的 ThemedTextBox .您将这个新控件设置为默认使用应用程序的配色方案,并且因为就继承结构而言它仍然是一个 TextBox,您可以在任何使用普通文本框的地方使用它,包括在 winforms 设计器中。

    关于.net - 更改单个应用程序的系统颜色(Windows、.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1091925/

    相关文章:

    c++ - ListView控件中的LVN_ITEMCHANGED优化

    c++ - 在 C++ 应用程序中安全地生成内存映射文件

    Android修改不同主题的colors.xml

    android - 如何(以编程方式)更改 EditText 上气泡(光标下)的颜色?

    .net - Environment.OSVersion 不存在

    .net - 任务管理器、ProcessExplorer 或类似工具 : monitoring and managing CLR threads

    winapi - 使用 OpenGL 或 DirectX 快速比较两张图片

    .net - System.Drawing.Color 相等运算符不会将 0xffffffff 视为 Color.White

    c# - 使用 System.WIndows.Forms.WebBrowser 控件进行打印

    .net - 使用 MEF 注册实例