【问题标题】:I want to create a DeskBand. Do I have to use C++?我想创建一个 DeskBand。我必须使用 C++ 吗?
【发布时间】:2013-04-29 15:03:38
【问题描述】:

我想创建一个 DeskBand 来在我的 Windows 任务栏上显示一些信息,但我在努力实现我在 C++ 中需要的功能。我接触 C++ 已经有 10 到 15 年了。在过去的 7 年里,我一直在完全使用 .NET。

在你说之前 - 我知道 DeskBands 已被弃用。但是建议的替换 UI 元素 - 缩略图工具栏 - 不能满足我的需要。我需要一个无论用户切换到哪个应用程序都始终可见的 UI 元素,并且还需要提供足够的空间来显示一行文本 - 我可以容纳 30 个左右的字符。

我已经能够从 Windows SDK 示例中获取 DeskBand 以编译和运行,但现在我需要实现一些真正的功能 - 特别是...

  • 找到 AppData\Local 文件夹 (SHGetKnownFolderPath(FOLDERID_LocalAppData...)
  • 查看 XML 文件以进行修改。每当文件更改时,我都需要解析和重新绘制。
  • 解析XML文件(我找到了pugixml
  • 在我的 DeskBand 中显示 XML 文件中的一些数据
  • 设置计时器以每分钟重绘一次 DeskBand

...我意识到我对 C++ 的了解有多么少,而我已经开始依赖 .NET 的基类库了。如果我用 C# 编写这个任务,对我来说将非常容易。但我在其他地方了解到you shouldn't write shell extensions in .NET

我有哪些选择?有没有更简单的语言来完成这个 - 也许是 Python?还是我必须硬着头皮在 C++ 中做到这一点?如果是这样,对于尝试在 C++ 中实现 WinAPI shell 扩展的 .NET 开发人员有何建议?

提前谢谢你。

【问题讨论】:

  • 看来我的一些研究已经过时了。现在阅读 .NET 4.0 如何改变这种情况......
  • 如果性能是唯一的问题,我可能仍然追求.NET 4.0 路线。我认为 5 秒的延迟对于 DeskBand 的加载问题比对于上下文菜单的显示问题要严重得多。
  • 根据我链接到的文章:“尽管第 4 版解决了并行问题,但 .NET Framework 仍然是一个影响很大的运行时,并且 .NET Framework 中的 COM 互操作的各个部分不适合在围绕本机代码设计的扩展模型中使用。”

标签: c++ winapi shell-extensions deskband


【解决方案1】:

Shell 扩展是 COM 对象,而 C++ 通常是开发 COM 对象时使用的最佳语言,因为 COM 主要是为 C++ 设计的,但它并不是唯一可能的语言。 COM 具有标准化的体系结构,因此您可以使用 .NET 之外的任何支持 COM 对象开发的语言(Delphi、VB 等)来开发 Shell 扩展(类似于 Win32 API 主要是为 C 设计的,但任何与 C 兼容的语言可以访问它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多