gpt4 book ai didi

c++ - 在底部设置运行进程

转载 作者:行者123 更新时间:2023-11-28 04:41:34 24 4
gpt4 key购买 nike

我是刚开始学习 C++ 的新手,我正在尝试更改正在运行的进程的外观,例如“计算器”,使其始终位于底部/桌面上,但没有成功。

这是我目前的代码:

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

void set_to_bg() {
LPCSTR app_name = "Calculator";
HWND hWnd = FindWindowA(0, (app_name));
HWND ProgmanHwnd = FindWindow(_T("Progman"), _T("Program Manager"));
SetParent(hWnd, ProgmanHwnd);
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}

int main()
{
set_to_bg();

return 0;
}

发生的事情是“计算器”窗口消失了。我正在使用 Spy++ 来监 window 口,我注意到“计算器”是“程序管理器”的父级,但它没有显示它。如果我省略 "SetParent(hWnd, ProgmanHwnd);",则会显示“计算器”并将其设置为底部。当我打开一个文件夹或其他一些应用程序时,它们会与“计算器”重叠,这是一个很好的结果,但如果我单击“计算器”,它就会失去其“OnBottom”属性并与打开的所有其他文件夹或应用程序重叠。

任何想法、代码片段、指导都将不胜感激!

最佳答案

包含桌面图标 ListView 的 SHELLDLL_DefView 是 Progman 窗口的子窗口并覆盖整个桌面,如果你想“卡住”到桌面,你需要成为 ListView 的子窗口,但这是一个 hack 并且依赖于关于内部外壳细节。

HWND_BOTTOM 不是属性,它只是告诉 SetWindowPos 现在将窗口放在 z 顺序的底部,但它不会卡在那里,它仍然是一个普通的窗口。窗口管理器中有一个内部的“最底层”属性,但您不能在自己的应用程序中使用它,只有 shell 桌面图标窗口可以使用此内部样式。

可以看看Rainlendar和其他开源小工具应用程序,看看他们是如何做到的,但没有完美的解决方案。您必须考虑“what if two applications did this ”场景。

关于c++ - 在底部设置运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com