在桌面上创建一个按钮
Posted
技术标签:
【中文标题】在桌面上创建一个按钮【英文标题】:create an button on desktop 【发布时间】:2013-05-20 06:45:20 【问题描述】:多年来,我收集了许多精美的墙纸。 我知道 python 和 c++(一点 MFC 经验)。 我想做一个可以改变我的壁纸的程序。
我想这样操作: 有一个小图标(半透明),如果我点击它,它会将我的壁纸更改为我的壁纸收藏文件夹中的下一张图片。
我发现了很多通过谷歌程序更换壁纸的信息。 但是在桌面上找不到添加按钮的win7 API。
请有人告诉我如何在桌面上设置图标按钮,或者只是没有这样的 API?
编辑: 我只是发现有一些方法可以使窗户无法移动。所以,我想现在我需要找到用图标制作窗口的方法。然后它看起来像桌面上的一个按钮。而且,有一些方法可以让窗口在单击(一次)时做出一些响应,对吧?
关闭: 船长的方法对于对窗户有很好理解的人来说可能是一种更好的方法。 我知道 python,但对 MFC 或与操作系统本身有很深关系的类似框架知之甚少。这个桌面按钮的创建对我来说很难实现。 修改 christian 的脚本和 windows 快捷方式将是一个不好看的折衷方案。我会这样做的。
【问题讨论】:
将它放在桌面上可能不是一个好主意,因为它很容易被应用程序窗口遮挡。我建议将它放在系统托盘中以便于访问。 我只想要一键,在系统托盘上,我想我必须点击托盘图标才能弹出一些东西,然后再次点击。所以,我希望我可以在桌面上加一个按钮,因为我只是换了墙纸,所以我觉得桌面上的一个按钮感觉是一个很好的windows扩展。我经常更换壁纸。 【参考方案1】:我最近写了一个python程序,把我的学校成绩保存为我的背景
一个可能有用的sn-p是;
pathToBmp = "imagename or image directory"
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, pathToBmp ,
0)
这会将您的桌面 BG 更改为您在 pathToBmp
中的任何文件名
我相信你可以很容易地解决剩下的问题
可以创建一个快捷方式来运行将 BG 切换到下一张图片的 python 程序,而不是一个按钮
我不知道这是否是您要寻找的东西,但只是一些指示和想法:)
编辑: 也许这对你有帮助
Windows 7 Gadget TutorialWindows Sidebar Object Reference
【讨论】:
谢谢克里斯蒂安,你的方法效果很好。但我真正想要的是一种在桌面上添加按钮的方法(或 Windows API)。但如果我不知道该怎么做,你的建议将是一个非常好的方法。 我刚刚google了一下,这是windows的快捷方式,使用快捷方式运行你的python脚本会很容易。但它看起来不太好,也不是按钮。 没错,但是您想要桌面上的按钮还是其他地方的按钮? 在我的桌面上,我只是发现了一些新东西,并将它们添加到我的问题中(编辑部分)。实际上,我希望按钮看起来就像桌面的一部分。我曾经认为这很容易,但事实并非如此 我唯一能想到的就是在快速启动、任务栏或系统托盘中添加一个程序,否则我找不到任何我无法试验的东西,因为我没有运行 7【参考方案2】:AFAIK 没有直截了当的方法可以在桌面上添加一个按钮而不需要跳过很多麻烦。您可以创建一个子控件并将父窗口设置为桌面,但您不会收到按钮单击通知。这是因为它们只发送到控件的父窗口。使控件显示在桌面上最接近和最简单的解决方案是创建它并通过调用SetWindowPos()
将其z 顺序设置为最底部。您的应用程序仍将能够接收按钮通知消息,但控件始终出现在所有其他窗口的后面。不过,您可能需要覆盖最小化和最大化消息的行为,因为桌面可以最小化所有窗口。
您还可以选择使用Shell_NotifyIcon
在系统托盘上添加图标。系统托盘将在您单击图标时将消息发送到您指定的窗口。下面的小例子展示了如何将图标添加到系统托盘。
static const UINT WM_TRAYMESSAGE = WM_USER + 1000;
static const UINT IDC_TRAYICON = 100l;
NOTIFYICONDATA nid;
//Tray Class Stuff
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hwnd; // Window to receive notifications
nid.uID = 100; // Id sent to window on button clicks
nid.uFlags = NIF_ICON|NIF_MESSAGE;
nid.hIcon = LoadIcon(hInstance, IDC_TRAYICON);
nid.uCallbackMessage = WM_TRAYMESSAGE; // notification to send to window
// Add the tray icon
Shell_NotifyIcon(NIM_ADD, &nid);
只要用户点击图标,您指定的窗口就会收到WM_TRAYMESSAGE
消息。 uID
的值和其他信息也作为参数传递给窗口,允许您识别单击了哪个图标(如果添加了多个图标)。
【讨论】:
谢谢队长。但我想把按钮放在桌面上,这样它可能需要少点击一下来操作 您知道可以将系统托盘配置为始终显示图标吗?这将使用步骤减少到单击一次。 我不太清楚如何在系统托盘上操作。但我想要桌面上的图标,因为它感觉很自然,“桌面上用于更改桌面图标的按钮”,我突然火了起来,让这成为现实。 那么您不应该在回复我的原始评论时说“我只想在系统托盘上单击一次”。 抱歉误导。我实际上认为系统托盘所能做的就是在您回复之前弹出一个窗口。感谢您的信息【参考方案3】:有一个最简单的方法。 安装 VBest Icon 组。 (它是一个桌面图标堆栈) 然后选择任何堆栈并添加一个按钮。 (拖放任何应用程序都会在堆栈中获得其链接和图标) 选择堆栈并在其设置中,将透明度设置为 0(向左滑动) 这就对了。现在您有了一个带有链接的按钮。
【讨论】:
以上是关于在桌面上创建一个按钮的主要内容,如果未能解决你的问题,请参考以下文章