You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发可向Windows 10任务栏写入数据并定时更新内容的应用?

Windows 10任务栏自定义字符串动态更新实现方案

任务栏显示数据示例

开发实现方案

方案1:原生Win32 C/C++实现(兼容性最高)

基于Windows官方提供的DeskBand接口开发,是任务栏自定义工具栏的标准实现方式:

  • 实现IDeskBand2COM接口,完成任务栏自定义区域的初始化、大小设置等基础逻辑
  • 重写绘制逻辑,使用TextOut/DrawText等GDI接口将需要展示的字符串绘制到自定义区域
  • 调用SetTimerAPI设置1分钟(60000毫秒)的定时器,收到WM_TIMER消息后更新待展示的字符串内容,调用InvalidateRect触发重绘即可更新显示
    核心代码示例:
// 初始化时设置1分钟定时器
SetTimer(hwndDeskBand, 0x01, 60000, NULL);

// 窗口消息处理函数
LRESULT CALLBACK DeskBandWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch(msg) {
        case WM_TIMER:
            // 更新待展示的字符串,此处替换为自定义的内容获取逻辑
            wcscpy_s(g_displayText, L"最新的展示内容");
            InvalidateRect(hWnd, NULL, TRUE);
            return 0;
        case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // 绘制字符串
            DrawText(hdc, g_displayText, wcslen(g_displayText), &ps.rcPaint, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
            EndPaint(hWnd, &ps);
            return 0;
        // 其他消息处理逻辑省略
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
  • 开发完成后以管理员权限注册COM组件,右键任务栏-工具栏即可找到你开发的自定义工具栏,启用后就能显示内容。

方案2:.NET C#快速实现(开发效率更高)

基于第三方封装的SharpShell库,无需手动处理COM接口的底层实现:

  • 安装NuGet包SharpShell,继承SharpDeskBand基类,在CreateUI方法中添加Label控件用于展示字符串
  • 使用.NET自带的Timer组件设置1分钟触发间隔,定时器触发后更新Label的Text属性即可完成内容刷新
    核心代码示例:
[ComVisible(true)]
[Guid("你的自定义GUID")]
[DeskBandInfo(Title = "自定义任务栏展示", BandHeight = 24)]
public class CustomDeskBand : SharpDeskBand {
    private Label displayLabel;
    private System.Timers.Timer updateTimer;

    protected override Control CreateUI() {
        displayLabel = new Label { 
            ForeColor = Color.White, 
            BackColor = Color.Transparent,
            Dock = DockStyle.Fill,
            TextAlign = ContentAlignment.MiddleLeft
        };
        // 初始化1分钟更新定时器
        updateTimer = new System.Timers.Timer(60000);
        updateTimer.Elapsed += (s, e) => {
            string newContent = GetCustomContent(); // 替换为自定义内容获取逻辑
            displayLabel.Invoke(new Action(() => displayLabel.Text = newContent));
        };
        updateTimer.Start();
        return displayLabel;
    }

    private string GetCustomContent() {
        // 此处实现你自己的内容生成逻辑,比如显示系统状态、天气、待办事项等
        return DateTime.Now.ToString("HH:mm 今日待办:3项");
    }
}
  • 开发完成后使用SharpShell自带的ServerManager工具以管理员权限注册组件,即可在任务栏工具栏中启用。

注意事项

  • 编译时需要对应系统位数生成x86/x64版本,32位系统无法运行64位的DeskBand组件,反之亦然
  • 组件注册、卸载都需要管理员权限,否则系统无法识别自定义工具栏
  • 定时器的触发逻辑中不要执行耗时操作,避免阻塞任务栏的正常响应

内容的提问来源于stack exchange,提问作者Eric Chavez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 16:27:03