V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tars13344
V2EX  ›  Windows

求助一下熟悉 windows 开发的大佬们,桌面 Widget 的实现

  •  
  •   tars13344 · 1 天前 · 1135 次点击

    省流版:如何让自己的 windows 程序窗口 在用户按下 WIn+D 的时候也显示在桌面上呢

    费流版:

    小弟最近正在开发一个 windows 环境下的桌面小组件程序(因为刚学 rust ,所以用 rust 撸的), 但是现在遇到个问题就是微软似乎并没有在新版 winodws 中提供小组件相关 api ,只能用一个窗口来模拟; 我理解的小组件窗口应有的行为:

    1. 主窗口背景透明
    2. 无任务栏图标
    3. 无法通过 Alt-tab 获得焦点
    4. 始终展示在桌面上,用户使用 win+M, win+D 快捷键之后仍会展示在桌面上

    特性一二三 相对简单,设置窗口的额外属性成 WS_EX_TOOLWINDOW 、WS_EX_LAYERED 之类的来解决; 但是第四个特性把小弟难住了,研究了一个多月也没找到方法;特来 V2 上寻求各位大佬的帮助 555

    9 条回复    2025-03-17 10:41:01 +08:00
    shuax
        1
    shuax  
       1 天前
    你把父窗口设置成桌面试试
    samwellwang0
        2
    samwellwang0  
       1 天前
    刚试了下,win+D 连 window 自己的 便笺也无法保留在桌面上呢
    tars13344
        3
    tars13344  
    OP
       1 天前
    @shuax #1 用 AI 给的方法试过 把窗口的父窗口设置成 WorkerW ,不好使
    kxg3030
        4
    kxg3030  
       1 天前
    你把 win+D 消息拦住不响应不行么
    tars13344
        5
    tars13344  
    OP
       1 天前
    @kxg3030 #4 Win+D 时候会给程序下发什么事件么 没有查到
    只知道这个快捷键和最小化不同,是收不到 WM_SIZE 消息的;
    也尝试过使用底层 Hook 去监听键盘,但是发现系统执行“显示桌面”动作比我程序 HOOK 的动作还要晚,没法实现系统显示完桌面我再去把窗口调出来
    theArrowOfCupid
        6
    theArrowOfCupid  
       1 天前
    snipaste 的贴图能够在 win+m/win+d 的时候保留在桌面上
    theArrowOfCupid
        7
    theArrowOfCupid  
       1 天前   ❤️ 1
    bilibili 的弹幕姬里面有个全屏弹幕,应该也能保留,你可以试试,这里是代码: https://github.com/copyliu/bililive_dm/
    xtreme1
        8
    xtreme1  
       1 天前   ❤️ 1
    void CALLBACK WinEventProc(HWINEVENTHOOK hook, DWORD event, ...) {
    if (event == EVENT_SYSTEM_MINIMIZEEND)
    {
    ::SetWindowPos(g_hMain, HWND_NOTOPMOST, 0, 0, 0, 0, ZPOS_FLAGS);
    ::SetWindowPos(g_hMain, HWND_BOTTOM, 0, 0, 0, 0, ZPOS_FLAGS);
    }

    if (event == EVENT_SYSTEM_MINIMIZESTART)
    {
    ::SetWindowPos(g_hMain, HWND_TOPMOST, 0, 0, 0, 0, ZPOS_FLAGS);
    }
    }

    SetWinEventHook(EVENT_SYSTEM_MINIMIZESTART, EVENT_SYSTEM_MINIMIZEEND, nullptr, WinEventProc, ...)
    tars13344
        9
    tars13344  
    OP
       1 天前
    @theArrowOfCupid #7 👌🏻👌🏻 感谢 周末时候研究了一下雨滴桌面的源码 但是这项目太复杂太大了,配合 AI 也找不到实现这个特性的几行代码在哪 回家研究下这个
    @xtreme1 #8 感谢大佬! 只试过监听 WM_SIZE ,这几个还真没试过 晚上回家试下~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:06 · PVG 09:06 · LAX 18:06 · JFK 21:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.