是否对 .exe 和 Windows 窗体应用程序中的窗体使用相同的图标而不重复?

2024-01-26

我的应用程序有一个图标,我想将其用作 EXE 图标和主窗体上的图标。当我说“EXE 图标”时,我指的是由 /win32icon 选项嵌入到 C# 编译器的图标或在 Visual Studio 中项目设置的“应用程序”部分中指定的图标。这是 Windows 资源管理器显示的图标。

但是,申请表使用默认图标,该图标显示在标题栏中以及当您按 Alt-Tab 时。

我想对两者使用相同的图标而不重复数据。实际上,这意味着 WinForms 应用程序必须在运行时读取嵌入的 Win32 图标。据推测这是可能的,但由于搜索结果中充斥着有关从 .resx 文件访问嵌入式资源等的页面,因此我无法找到任何信息。

我不介意这是否需要 p/invoke 或类似的。我可以使用 Win32 资源查看器看到该图标嵌入在 ID 为 32512 (IDI_APPLICATION) 的 EXE 中。我尝试过以下方法:

IntPtr hInstance = GetModuleHandle(IntPtr.Zero);
IntPtr hIcon = LoadIcon(hInstance, new IntPtr(32512));
icon = Icon.FromHandle(hIcon);

但 hIcon == 0。我也尝试过:

IntPtr hIcon = LoadIcon(IntPtr.Zero, new IntPtr(32512));
icon = Icon.FromHandle(hIcon);

这会加载一个图标,但它是系统默认的应用程序图标,而不是 EXE 中的图标。

有谁知道该怎么做?


事实证明我尝试的第一种方法基本是正确的。

IntPtr hInstance = GetModuleHandle(null);
IntPtr hIcon = LoadIcon(hInstance, new IntPtr(32512));
icon = Icon.FromHandle(hIcon);

...函数的声明如下:

[DllImport("user32.dll")]
static extern IntPtr LoadIcon(IntPtr hInstance, IntPtr iconName);
[DllImport("kernel32.dll")]
static extern IntPtr GetModuleHandle(string moduleName);

在 Hans Passant 有点神秘的评论的帮助下,我发现它不起作用的原因是 Visual Studio 托管过程。我不想禁用它,而是将代码更改为有条件运行:

IntPtr hInstance = GetModuleHandle(null);
IntPtr hIcon = LoadIcon(hInstance, new IntPtr(32512));
if(hIcon != IntPtr.Zero) icon = Icon.FromHandle(hIcon);

我们就这样吧。不再需要将图标复制为 Win32 和 .NET 资源数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否对 .exe 和 Windows 窗体应用程序中的窗体使用相同的图标而不重复? 的相关文章

  • TreeView所有者在选择时绘制故障

    我正在尝试向标准 System Windows Forms TreeView 控件的元素添加更多图标 我的计划是只更改树视图控件的标签区域 但它显示出奇怪的行为 如果我单击一个节点来选择它 则按下鼠标按钮时 背景将使用突出显示颜色正确绘制
  • C# 如何暂停程序并等待 WinForm 中的键盘输入

    我有一个 C 2008 Winform 应用程序 我正处于循环之中 我正在向用户显示一个日期 我希望他们告诉我这个日期是星期几 例如显示6 22 2010 用户需要按t 我所困惑的是如何暂停我的应用程序并等待键盘输入 我只想回复 Esc m
  • 将组合框添加到 DataGridView 标头

    当我运行代码时 dataGridView TopLeftHeaderCell 也有一个组合框 我怎样才能改变这一点 这是我的代码 public void AddHeaders DataGridView dataGridView for in
  • 如何禁用 Alt + F4 关闭表单?

    What is the best way to disable Alt F4 in a c win form to prevent the user from closing the form 我使用表单作为弹出对话框来显示进度条 但我不希
  • C# WinForms:使用一个或多个附加线程进行绘图。如何?

    如果我有一张包含各种几何形式 直线 矩形 圆形等 的大图 线程需要花费大量时间来绘制所有内容 但在现实生活中 一栋建筑是由不止一名工人建造的 因此 如果绘图是建筑物而线程是构建者 则绘制速度会快得多 但我想知道怎么做 你能告诉我怎么做吗 有
  • 以编程方式更改 DataGridView 行上的只读模式

    在不解释整个上下文的情况下 我的问题基本上是这样的 我在 Windows 窗体上有一个 datagridview 它绑定到实体框架 DbSet dbSet
  • 如何让 C# 设计器编辑我的结构属性?

    我正在使用 C 创建一个具有多个自定义属性的自定义 Windows 窗体控件 这些属性之一是一个带有几个整数字段的简单结构 public struct Test public int A B Test Test Category MyCat
  • 将父控件的属性传递给子控件

    我正在为特定应用程序开发一组自定义控件 我想定义对于外观目的的控件集通用的属性 为了论证 让我们这样做CustomCtrl AccentColor 我想为我的 Windows 窗体定义相同的属性 即Form1 AccentColor当我更改
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • 即使 keypreview = true,按钮也会阻止 KeyDown 事件触发

    在 VS Express 12 中重现的步骤 创建一个新的 Windows 窗体应用程序项目 添加按钮 将 Form KeyPreview 设置为 true 向表单添加 keyDown 事件 只要按钮存在于表单上 事件就不会触发 我有一个项
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 在 VB 2010 中禁用“默认实例”

    我已经开始在 VB 2010 中做一些基本的 win 表单工作 我真的很烦恼默认实例 https stackoverflow com q 4698538 794234特征 有没有办法可以完全禁用它并像普通类一样使用这些类 向表单的构造函数添
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 合并两个(或更多)PDF

    背景 我需要为我的销售人员提供每周报告包 该包包含几个 5 10 个水晶报告 Problem 我想允许用户运行所有报告并且只运行单个报告 我想我可以通过创建报告然后执行以下操作来做到这一点 List
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • 防止圆圈重叠

    我正在尝试找出 JavaScript 数学来将两个碰撞的圆移开 该图像的左侧是我已经拥有的内容的视觉表示 x1 y1 x2 and y2 are the positions of the circles r1 and r2 are the
  • 如何在 HSQL Db 内存单元测试中启用引用完整性

    我对整个 JPA 后端进行了 200 多个单元测试 它们在 hsql db 2 2 上都运行良好 我在连续构建环境中运行测试来验证系统的稳定性 除了当我在 Oracle 11 上运行它们时 一些测试因引用完整性约束而失败 这是由于我的代码中
  • CSS 在悬停时从不同元素更改元素内容

    是否可以in CSS当鼠标悬停在不同的元素上时更改元素的内容 举例来说 我有这个 div A B C D E F 当我将鼠标悬停在 B 中时 我想在 A 中显示一些文本 如果我将鼠标悬停在 C 中 A 中将会出现不同的文本 其余的也一样 当
  • ag-grid支持列虚拟化吗?

    这在有很多列且大多数列不在可见区域的情况下特别重要 是的 正如上面所述文档 https www ag grid com javascript grid accessibility dom order 默认情况下 网格使用虚拟化 网格技术 当
  • 实例删除:此应用程序有一个待处理的操作。请稍候并重试

    我在 GAE Standard Java 中的一个实例不知何故处于一种奇怪的状态 尝试删除它会导致 此应用程序有一个待处理的操作 请等待并重试 很长时间 对于重新部署新版本这一问题是否有任何解决方案 有趣的 在 Appengine 上映射自
  • AssertionError:内部:未指定默认项目

    气流新手 尝试运行 SQL 并将结果存储在 BigQuery 表中 出现以下错误 不确定在哪里设置default rpoject id 请帮我 Error Traceback most recent call last File usr l
  • 如何检测 WPF 控件何时被重绘?

    我正在使用 D3DImage 显示一系列帧 这些帧依次渲染到同一个 Direct3D Surface 上 我目前的逻辑是 显示最后渲染的帧 即D3DImage Lock AddDirtyRect Unlock 开始渲染下一帧 等待下一帧准备
  • 在 Mac os x Lion 上安装 mysql2 gem

    前几天我更新到了 Mac OSX Lion 它破坏了我的 Rails 安装 因为我必须重新编译 mysql 虽然我已经完成了工作 但重新安装 mysql2 gem 已经成为问题 我以前运行的是 leopard 所以我将从 32 位升级到 6
  • 循环遍历 UICollectionview 中的所有单元格

    我有 UICollection 其中有许多学生项目 每个项目内部都有开关 用于记录出勤情况 我像这样循环遍历所有可见的单元格 for attendancecollectionViewCell cells in self collection
  • Angular 6 - 拒绝应用“...”中的样式,因为其 MIME 类型(“text/html”)不是受支持的样式表

    尝试升级到 Angular 6 当我在 index html 中引用以下内容时 出现以下错误 拒绝应用来自 的样式https localhost 44394 assets primengcss themes omega theme css
  • 从链接下载文件

    我有一个使用 C 的网页 我希望用户能够单击链接 或链接按钮或按钮 我不挑剔 并显示 另存为 对话框窗口 以便他们可以下载文件 文件本身位于另一台服务器上 因此我必须使用绝对路径 i division department publicfi
  • 为 Secret Manager 配置凭证轮换时有关 Lambda 执行角色的问题

    我手动创建了一个轮换函数并将其链接到 Secret Manager 我已成功启用轮换 但是当我在 CloudWatch 中检查此轮换 lambda 的日志时 它显示错误 ERROR ClientError An error occurred
  • 如何限制管理员用户对活动管理员的访问

    我希望只有我的用户拥有他们的属性is admin设置为 true 以便能够访问我的活动管理后端 我应该怎么做 普通 用户应该只能登录该网站 而不能登录活动管理员 In config initializers active admin rb你
  • Three.js 中的旋转锚点

    我正在定义一个圆锥体 我需要能够围绕其顶点 圆锥体厚度最小的点 旋转 我还找不到设置旋转发生点的方法 var coneGeometry new THREE CylinderGeometry 1000 0 width 50 50 false
  • C++11 类型(有符号+无符号)?

    include
  • 如何创建单个 Gatsby 页面以按标签/类别显示和过滤所有博客文章

    您好 我正在使用 Gatsby 和 Netlify CMS 构建一个博客 我从 gatsby starter netlify cms 模板开始 我有 blog我当前显示所有帖子以及所有标签列表的页面 当用户点击标签时 当前会重定向到tags
  • 扫描网络查找特定 MAC 地址 - Android

    我正在设计一个应用程序来控制多区域音频放大器 为此 我必须创建一个套接字连接 到目前为止效果很好 我想做的是 用户不必手动输入 IP 地址 我希望我的应用程序自动扫描网络 检查所有 MAC 地址 如果它与我的放大器的公司匹配 则将其与 NI
  • 在 Jenkins 上构建 Maven 后将 webapp 部署到 Tomcat

    在 jenkins 上的 maven 构建完成后 我试图将 webapp war 复制到 tomcat 的 webapp 文件夹
  • JSON 数组中的动态复选框

    我是 JavaScript JQuery 新手 我不知道如何才能做到这一点 也许每个部分的一个小例子会有所帮助 说我有 div div 当页面加载时 我将进行一个 ajax 调用 该调用将返回 JSON 数组 这我知道该怎么做 对象将如下所
  • 是否对 .exe 和 Windows 窗体应用程序中的窗体使用相同的图标而不重复?

    我的应用程序有一个图标 我想将其用作 EXE 图标和主窗体上的图标 当我说 EXE 图标 时 我指的是由 win32icon 选项嵌入到 C 编译器的图标或在 Visual Studio 中项目设置的 应用程序 部分中指定的图标 这是 Wi