- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 C++/Win32 开发一个基本的桌面应用程序。
我现在的目标是创建一个基本的“便利贴”应用程序,它可以固定/粘贴到桌面,即始终位于桌面前面但始终位于任何其他应用程序后面。这真的是一个个人项目,只是为了克服我的坏内存,让我的任务/笔记始终在桌面上可见,这样我就不会在启动计算机等时错过它们。
我的目标行为类似于Stardock Fences (“有点”,因为我不会在其中存储任何桌面图标,但您希望得到想法)
我从 sample code 的 Get Started with Win32 and C++ docs 开始,以进行最基本的 Win32 最小窗口设置。
到目前为止我得到了什么:
WindowProc
) 中调用 SetWindowPos
设法将我的窗口保持在所有其他应用程序的底部和桌面前面WM_SETFOCUS
(我首先尝试将事件 WM_WINDOWPOSCHANGING
作为 suggested in this answer,但这导致拖动窗口时出现烦人的闪烁)。case WM_SETFOCUS:
SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
return 0;
Windows + D
快捷键)。由于我自己经常使用此快捷方式,因此我希望我的窗口无论如何都保留在桌面上。WM_SIZE
并调用 ShowWindow
然后调用 SetWindowPos
,仍然在 WindowProc
<case WM_SIZE:
ShowWindow(hwnd, SW_SHOWNORMAL);
SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
return 0;
虽然不理想,因为我真的希望我的应用程序始终保持在桌面前面并“存活”到“显示桌面”操作。
我尝试了什么:
我检查了这些答案,但无法弄清楚如何实现我想要的。
wWinMain
SetParent
技巧
HWND desktop = FindWindow(L"ProgMan", L"Program Manager");
if (desktop == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
SetParent(hwnd, desktop);
但是,即使 FindWindow
没有返回 NULL
而是返回一个实际的句柄,我的应用程序再也看不到了。
我错过了什么吗?
最佳答案
正如@JonathanPotter 所指出的,当点击 Windows + D
或 Show Desktop 按钮时,事件 WM_WINDOWPOSCHANGING
被触发,窗口移动到 -32 000, -32 000
(它的大小也改变了)
注意:没有样式 WS_MINIMIZEBOX
的窗口在点击 Windows + D 时似乎没有收到 WINDOWPOSCHANGING
事件。因此,没有 -32 000 坐标在这种情况下进行检测......在使用 ex 样式 WS_EX_TOOLWINDOW
时也注意到了同样的问题(因为这个去掉了最小化框,即使你设置了样式标志 WS_MINIMIZEBOX
)。没有找到针对这种情况的解决方案,所以我坚持使用重叠窗口。
要防止这种移动,只需在 WINDOWPOS
上设置标志 SWP_NOMOVE
和 SWP_NOSIZE
在 lParam
因此,作为最终结果,要实现所需的行为(即总是在所有其他窗口后面但总是在桌面前面),唯一需要添加到 doc's sample 的代码如下,放在窗口过程WindowProc
的switch语句中:
EDIT :用 HWND_BOTTOM
强制 Z 顺序从而确保窗口始终位于底部的最佳位置也在 WM_WINDOWPOSCHANGING
事件中.事实上,在拖动窗口时调用 SetWindowPos
以在 WM_SIZE
事件中强制它,就像我之前所做的那样,在调整窗口大小时会导致窗口出现一些闪烁,而不会闪烁在 WM_WINDOWPOSCHANGING
中直接设置 WINDOWPOS
结构的 hwndInsertAfter
属性时发生。
case WM_WINDOWPOSCHANGING:
{
WINDOWPOS* pos = (WINDOWPOS*)lParam;
// Show desktop (Windows + D) results in the window moved to -32000, -32000 and size changed
if (pos->x == -32000) {
// Set the flags to prevent this and "survive" to the desktop toggle
pos->flags |= SWP_NOMOVE | SWP_NOSIZE;
}
// Also force the z order to ensure the window is always on bottom
pos->hwndInsertAfter = HWND_BOTTOM;
return 0;
}
关于c++ - 将窗口固定到桌面/将窗口粘附到桌面/"Always-on-bottom"窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65028303/
always block 和 always @* block 之间有区别吗? 最佳答案 always @* 是 always block 的一种类型。它用于推断组合逻辑。 始终使用 @(thought
我的 JNLP 文件是: PocketBrain zatokar PocketBrain PocketBrain
我正在编写 JUnit 测试,并希望拥有一个始终成功的 Outlook 电子邮件收件人,以及一个始终因无法送达而退回的邮件收件人。 对于“永远成功”,我认为 SMTP 相当于 NUL:会很有帮助。 (
所以,我使用 IntelliJ IDEA 在 Java 中进行编程,并且我正在试验关键字 instanceof,我的代码最终看起来像这样: public class Main { public
我有这样的代码:。我的网络有以下张量:Torch.Size([1,1536,1152])Torch.Size([1,1536,1152])。。但我总是收到运行时错误:。如果我改变我的频道大小,比方说我
我有这样的代码:。我的网络有以下张量:Torch.Size([1,1536,1152])Torch.Size([1,1536,1152])。。但我总是得到运行时错误:。如果我改变我的频道大小,比方说我
您可能知道,Microsoft Azure 网站服务下托管的网站默认配置为空闲 20 分钟后超时 (idleTimeout),并且应用程序池每 29 小时重新启动一次 (periodicRestart
我有一个具有3个功能的功能应用程序,其中每2分钟触发一次计时器。我观察到一段时间后,该函数停止被触发,但是当我进入门户网站时重新启动。 据我了解,其原因是默认情况下“始终打开”处于关闭状态。但是,当我
出于什么原因我得到了相同的结果: groovy -e "println 'Hello'.getBytes('windows-1251')" 结果 [72, 101, 108, 108, 111] 和
我有一个 winforms 应用程序,它使用多个 UserControl 填充一个可滚动区域。我的问题是,只要此应用程序 View 可见,是否始终捕获鼠标滚轮滚动?当然,这个应用程序正在为焦点而活跃。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
在iOS13下,当您为coreLocation请求.always权限(以启用后台位置(例如,地理围栏或iBeacons))时,该应用仅被授予“始终临时设置”权限,这不允许它在后台使用coreLocat
我工作的公司想在我们支持 SQL Server 的应用程序中使用 Always on 可用性组架构。我们有 3 个直接安装的数据库,其中一个按配置分区,我们目前使用 MSDTC 来协调这三个数据库之间
我正在使用 jQuery.ajax 进行 REST 调用并检索一些 JSON。它按预期工作。但是,当我强制出现错误条件(例如无效 URL)时,always 方法不会触发。如果我设置 crossDoma
我有一个相当奇怪的问题。 我有一个正在使用 CAKeyframeAnimation 制作动画的 View 。然而,动画按预期工作,一旦触发委托(delegate)的 animationDidStop:
下面的过程中,数组会在栈上分配吗? procedure One: var arr: array[0..1023] of byte; begin end; 堆栈中最大的项是多少? 访问堆栈上的变量和
我已经创建了一个容器,却忘记了在创建容器时设置--restart ='always'。 是否可以为已经创建的容器修改此选项?我知道我可以创建一个新的,但这很有用,因为它发生在我身上好几次了... 最佳
在下面显示的测试台代码中,我观察到时钟信号clk未按预期切换。时钟在时间 5 从低电平变为高电平,但此后不再切换。 module tb(); reg clk; initial begin
您能给我一些在 Hibernate session 中使用 FlushMode.ALWAYS 的实际示例吗? 谢谢 最佳答案 这几乎总是不必要的。如果在 session 中进行的修改在刷新到数据库时导
我对 C# 反射有疑问。我要反射(reflect)的对象如下: public partial class ApplicationUser : IdentityUser { public App
我是一名优秀的程序员,十分优秀!