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

有办法把软件窗口挂在桌面吗?

  •  
  •   lqzhgood · 2023-04-26 21:51:40 +08:00 · 3961 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说说需求~

    想把一个可交互的网站像 Win7 小组件一样挂在桌面

    • 任意窗口都在他的上层
    • Win+D 也不会被最小化
    • (可有可无)平时透明,鼠标滑过显示

    主要是想把 ChatGPT 和 笔记( https://notepad.1976f.com/ )挂桌面,这样 Win+D 就可以直接写和看了~ 没有再打开一个软件再读写的步骤 而且随时能看到

    笔记因为不需要权限,随手写点东西和别人共享起来也方便,这边写,那边桌面就有直接能看,不用再打开某软件回复 特别轻量级

    有很多可以顶置的软件,但是就是找不到可以底置的软件…… 求教~

    做过的一些尝试

    • Rainmeter 桌面美化小挂件软件,但并没有浏览器挂件
    • WallpaperEngine / LivelyWallpaper 把网页作为背景并不能交互

    大哥大姐有知道的么?求教~

    第 1 条附言  ·  2023-04-27 10:17:38 +08:00

    很多朋友提出可以设置一个快捷键呼出,或者放在其他地方然后用快捷键显示等~ 我详细说说这里用户体验的想法

    这里的巧思在于桌面是一个你时不时就能看到的地方。

    我想的场景是,可以自己写笔记备忘,也可以多人随手写写画画,比较轻松吧~

    书写上确实和使用快捷键呼出没有区别,反正都是要按快捷键的嘛,区别只是非 Win+D。

    但阅读上的体验差很多,一个是随手看到,另一个是还需要主动去呼出查看

    我把 笔记 换成 留言板 的说法应该更加贴切吧

    ############### 展开说说

    现实生活中把常用东西放桌面是个比较自然的做法吧

    • 软件上只能把书本 合上 放桌面,还需要手动打开书本翻到常用的那一页(快捷方式启动软件)
    • 我想有没有可能直接把书本最常用的那一页 打开 放桌面(桌面挂应用)
    32 条回复    2023-04-28 16:53:10 +08:00
    WeaPoon
        1
    WeaPoon  
       2023-04-26 22:24:04 +08:00
    为什么不问 ChatGPT 了?我问的是 C#的,也不知道你用的啥,所以代码就不贴了。就贴一下它回答的原理部分。

    问 ChatGPT 问题一:请使用 C#编写,把窗口钉在桌面上。
    我们在 MainForm 类中使用 WinApi.SetParent 函数将窗口变为桌面的子窗口。我们还使用 WinApi.SetWindowLong 函数将 WS_EX_LAYERED 和 WS_EX_TRANSPARENT 扩展样式添加到窗口的扩展风格中,使窗口在不阻塞鼠标事件的情况下变为透明。

    问 ChatGPT 问题二:C#编写无边框窗口,可以使用鼠标移动窗口
    我们创建了一个 MainForm 类型的窗口,并在构造函数中设置窗口的标题、大小和边框样式。然后,我们在窗口上注册了鼠标事件,使窗口可以响应用户拖动窗口的动作。

    具体来说,当用户按下鼠标左键时,我们将当前鼠标坐标保存到 lastMousePosition 变量中。然后,在用户移动鼠标时,我们检查是否按下了鼠标左键,并根据鼠标位置的变化计算窗口新的位置,并将其设置为窗口的新位置。最后,当用户释放鼠标左键时,我们将 lastMousePosition 变量重置为 Point.Empty ,以便下一次拖动时重新开始计算位置变化。

    我们使用 MouseDown 、MouseMove 和 MouseUp 事件来处理鼠标动作,它们在用户按下、移动和释放鼠标时触发,并传递 MouseEventArgs 对象,其中包含了有关鼠标事件的信息,如鼠标的按键、位置等。我们需要根据鼠标事件的信息,判断用户是否执行了拖动行为,然后计算和更新窗口位置信息。
    WeaPoon
        2
    WeaPoon  
       2023-04-26 22:27:57 +08:00
    抱歉,我好像突然明白,你问的是第三方解决方案,我以为是问的代码。。。
    zhzy
        3
    zhzy  
       2023-04-26 22:32:09 +08:00
    也许这里的信息对你有帮助: [c#中如何使程序嵌入到桌面,成为桌面背景,和一些日历程序类似?]( https://social.msdn.microsoft.com/Forums/zh-CN/0c3d1671-1a2a-4e97-b81d-5f38957de51c/c?forum=visualcshartzhchs)
    大概率是要用到 Windows API 的, 因为我记忆里的类似软件几乎都是 WinForm 做的.

    其实也许可以用另一个思路: 绑定个快捷键, 不在任务栏显示应用图标, 这基本上就已经无感了, 只是 Win+D 换成别的而已. 很多翻译软件也是这样做的
    Inf1nity
        4
    Inf1nity  
       2023-04-26 22:52:29 +08:00   ❤️ 1
    把 ChatGPT 和笔记放到另外一个虚拟桌面上,需要的时候用 ctrl + win + ← / → 切换桌面即可。
    ysc3839
        5
    ysc3839  
       2023-04-26 23:10:30 +08:00 via Android
    以前弄过中考、高考倒计时的程序,实现过这个功能,但代码可能找不到了,印象中 XP 和 Win7 的方法不太一样。
    至于现成的软件,我估计是没有。
    documentzhangx66
        6
    documentzhangx66  
       2023-04-26 23:33:54 +08:00
    换个思路,试试多屏。

    比如我现在 10 个屏幕,你这 2 个功能,可以单独放在一个屏幕里。
    guoshim
        7
    guoshim  
       2023-04-26 23:36:17 +08:00   ❤️ 1
    PowerToys 有个 always on top 的功能 https://github.com/microsoft/PowerToys 也许能满足部分需求。
    codehz
        8
    codehz  
       2023-04-27 01:10:57 +08:00   ❤️ 1
    只是网页的话可以用这个 https://github.com/ivant04/Custom-Widget-App (有问题别问我,我不是作者)
    ns09005264
        9
    ns09005264  
       2023-04-27 02:59:58 +08:00
    我有个简单的思路,就是用 AHK 之类的脚本来实现,按下 Ctrl+D 后,把你要显示的应用显示出来。
    Sisyphe42
        10
    Sisyphe42  
       2023-04-27 03:10:51 +08:00
    YY202266
        11
    YY202266  
       2023-04-27 04:59:57 +08:00
    不知道这个行不行,鼠标滑过显示,是置顶的,不是置底。
    https://www.v2ex.com/t/933040
    最近又更新了记录打开文件夹路径的功能,我去打个包传上去。
    forgottencoast
        12
    forgottencoast  
       2023-04-27 09:28:19 +08:00
    另外一个思路就是设置一个快捷键,把他们俩弄出来啊。
    反正你都要按 Win+D 的,换成另外一个也不费事。
    minami
        13
    minami  
       2023-04-27 09:59:26 +08:00
    Deskpins
    manasheep
        14
    manasheep  
       2023-04-27 10:05:01 +08:00
    win11 ,新建一个虚拟桌面,专门放这俩就行了。
    当然,单独扩展个显示器也不错。
    assiadamo
        15
    assiadamo  
       2023-04-27 10:11:45 +08:00
    DeskPins 400k 小软件的事情
    lqzhgood
        16
    lqzhgood  
    OP
       2023-04-27 10:19:36 +08:00
    @minami @assiadamo
    底层 不是 顶层~
    lqzhgood
        17
    lqzhgood  
    OP
       2023-04-27 10:22:26 +08:00
    @documentzhangx66 @manasheep
    多屏确实好,但是又有另一个 windows 老大难的问题~
    怎么解决,Win+D 仅显示当前桌面,不然放到其他桌面也一样被最小化了。

    我知道有个软件 https://github.com/CryptKat/ShowDesktopPerMonitor ,但是不好用,很多 BUG
    PowerToys 也有 issues 提到这个问题 https://github.com/microsoft/PowerToys/issues/24011
    lqzhgood
        18
    lqzhgood  
    OP
       2023-04-27 10:30:03 +08:00
    @Sisyphe42 就是这个效果~ 但是 Win11 好像有 BUG ,运行后窗口不见了……
    我去原帖问问作者。
    感谢大佬~
    manasheep
        19
    manasheep  
       2023-04-27 10:32:20 +08:00
    @lqzhgood 多屏就不要按 Win+D 了,给它个屏幕专用就行,我常年扩展屏,极少用到 Win+D
    lqzhgood
        20
    lqzhgood  
    OP
       2023-04-27 11:04:14 +08:00
    @manasheep 那你不用显示桌面么?
    一个 App 一个屏 ?
    celeron533
        21
    celeron533  
       2023-04-27 11:13:43 +08:00
    documentzhangx66
        22
    documentzhangx66  
       2023-04-27 11:16:25 +08:00
    @lqzhgood 你都多屏了,干嘛还 Win + D 。
    freeoptions
        23
    freeoptions  
       2023-04-27 15:44:57 +08:00
    @assiadamo 下载试了下,没什么用,按下 win+d ,软件窗口照样全部最小化
    freeoptions
        24
    freeoptions  
       2023-04-27 15:47:33 +08:00
    @celeron533 win11 系统,下载试用了下,没什么用,按下 win+d 软件窗口照样会被最小化
    mainjzb
        25
    mainjzb  
       2023-04-27 17:07:59 +08:00
    final h = FindWindow(nullptr, TEXT('ChatGPT'));
    final desktop = FindWindow(nullptr, TEXT('Program Manager'));
    final result = SetParent(h, desktop);

    客户端用的这个, 我自己 win11 试了试可行。 边框确实会变成 win7 模式。问题不大。
    https://github.com/lencx/ChatGPT
    mainjzb
        26
    mainjzb  
       2023-04-27 17:15:06 +08:00
    https://wwxx.lanzoue.com/it80H0u2yqpi
    我用 dart 写的,调了 win32 库,编译了一个 demo 你可以试试。 好像得正常运行 2 次才能其作用。 成功返回非 0 值
    opengps
        27
    opengps  
       2023-04-27 17:23:45 +08:00
    windows 的便签 似乎就是你需要的工具,建议体验下看看差异的部分能否接受
    balancircle
        28
    balancircle  
       2023-04-27 20:34:09 +08:00   ❤️ 1
    sordum 的 Window TopMost Control
    https://www.sordum.org/9182/window-topmost-control-v1-3/
    他家的小工具都挺好用的,值得一试
    ossphil
        29
    ossphil  
       2023-04-28 07:48:34 +08:00
    我也想过这个功能,想把 obsidian 笔记钉在桌面
    lqzhgood
        30
    lqzhgood  
    OP
       2023-04-28 15:01:34 +08:00
    @balancircle 是 底层 不是 顶层 哦~
    lqzhgood
        31
    lqzhgood  
    OP
       2023-04-28 15:06:56 +08:00
    @mainjzb 我执行后 GPT 窗口就消失了~~~
    我的系统是 Win11 Build 22621 ( lastest )
    mainjzb
        32
    mainjzb  
       2023-04-28 16:53:10 +08:00
    @lqzhgood 我也是 Win11 Build 22621 感觉你系统有问题 🤣 一般 win10 升级上来的都有奇奇怪怪的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:52 · PVG 10:52 · LAX 18:52 · JFK 21:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.