установить рабочий процесс на дно - PullRequest
0 голосов
/ 29 апреля 2018

Я новичок в 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 ++ для мониторинга окон, и я заметил, что «Калькулятор» связан с «Менеджером программ», но не показывает его. если я опускаю "SetParent(hWnd, ProgmanHwnd);", отображается «Калькулятор» и устанавливается в нижнюю часть. Когда я открываю папку или какое-то другое приложение, они перекрывают «Калькулятор», что является хорошим результатом, но если я нажимаю «Калькулятор», то оно теряет свойство «OnBottom» и перекрывает все остальные папки или приложения, которые открылись.

Любые идеи, фрагменты кода, руководство будут очень благодарны!

1 Ответ

0 голосов
/ 29 апреля 2018

SHELLDLL_DefView, который содержит просмотр списка значков на рабочем столе, является дочерним элементом окна Progman и охватывает весь рабочий стол, и вам нужно быть дочерним элементом списка просмотра, если вы хотите «прилипнуть» к рабочему столу, но это хак и полагается на деталях внутренней оболочки.

HWND_BOTTOM не является свойством, оно просто говорит SetWindowPos поместить окно внизу z-порядка прямо сейчас, но оно там не застревает, оно все еще нормальное окно. В оконном менеджере есть внутреннее свойство «самое нижнее», но вы не можете использовать его в своих собственных приложениях, только внутренний значок на рабочем столе оболочки может использовать этот внутренний стиль.

Вы можете взглянуть на Rainlendar и другие гаджет-приложения с открытым исходным кодом, чтобы увидеть, как они это делают, но идеального решения не существует. Вы должны рассмотреть сценарий ", что если два приложения сделали это ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...