在底部设置运行进程 我刚开始学习C++,我尝试改变运行过程的外观,例如计算器,总是在底部/桌面上,但没有成功。

在底部设置运行进程 我刚开始学习C++,我尝试改变运行过程的外观,例如计算器,总是在底部/桌面上,但没有成功。,c++,winapi,C++,Winapi,以下是我目前掌握的代码: #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_na

以下是我目前掌握的代码:

#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++监视windows,我注意到计算器是程序管理器的父对象,但它没有显示它。 如果我省略了SetParenthWnd,ProgmanHwnd;此时将显示计算器并将其设置为底部。 当我打开一个文件夹或其他应用程序时,它们与计算器重叠,这是一个很好的结果,但如果我单击计算器,它将丢失其OnBottom属性,并与打开的所有其他文件夹或应用程序重叠


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

包含桌面图标listview的SHELLDLL\u deView是Progman窗口的子窗口,覆盖整个桌面,如果您想固定在桌面上,您需要成为listview的子窗口,但这是一种黑客行为,依赖于内部shell详细信息

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

您可以查看和其他开源小工具应用程序,看看它们是如何做到这一点的,但没有完美的解决方案。你必须考虑这种情况。