Я работаю над базовым настольным приложением на С++/Win32.
Моя цель сейчас — создать базовое приложение для заметок, которое будет прикрепляться/приклеиваться к рабочему столу, то есть всегда перед рабочим столом, но всегда позади любого другого приложения. Это действительно личный проект, просто чтобы бороться с моей плохой памятью и чтобы мои задачи / заметки всегда были видны на рабочем столе, чтобы я не мог пропустить их при запуске компьютера и так далее.
Поведение, к которому я стремлюсь, будет похоже на заборы Stardock («вроде», потому что я не собираюсь хранить там какие-либо значки на рабочем столе, но, надеюсь, вы поняли идею)
Я начал с пример кода из документов по началу работы с Win32 и C++, чтобы получить самые базовая минимальная установка окна Win32.
Что я получил на данный момент:
- Мне удалось сохранить свое окно внизу всех других приложений и перед рабочим столом, вызвав SetWindowPos в оконной процедуре ( WindowProc ) при обработке события WM_SETFOCUS ( Сначала я попытался использовать событие WM_WINDOWPOSCHANGING , как предложено в этом ответе, но это привело к раздражающему мерцанию при перетаскивании окно).
case WM_SETFOCUS: SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); return 0;
- Проблема: мое окно остается перед рабочим столом, кроме тех случаев, когда я нажимаю кнопку «Показать рабочий стол». на панели задач (или нажмите ярлык Windows + D ). Поскольку я сам часто использую этот ярлык, я бы хотел, чтобы мое окно оставалось на рабочем столе, несмотря ни на что.
- Недостаточно удовлетворительное, но все же кое-что, что мне удалось сделать, это вернуть мое окно перед рабочим столом при нажатии на любое другое окно после нажатия 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;
Однако это не идеально, так как я действительно хочу, чтобы мое приложение всегда оставалось перед рабочим столом и «выживало» до действия «Показать рабочий стол».
Как закрепить окно поверх всех окон в Windows | DeskPins
Что я пробовал:
Я проверил эти ответы, но не мог понять, как добиться того, чего я хочу.
- Как сделать окно «всегда на дне»
- Окно «на рабочем столе»: обратите внимание на это, я попробовал трюк с SetParent , например это в wWinMain
HWND desktop = FindWindow(L»ProgMan», L»Program Manager»); if (desktop == NULL) < return 0; >ShowWindow(hwnd, nCmdShow); SetParent(hwnd, desktop);
Однако с этим мое приложение больше не отображается, хотя FindWindow вернул не NULL , а фактический дескриптор.
- Сделайте приложение всегда внизу (прикрепленным к рабочему столу, за всеми другими приложениями) в C++/WinAPI [дубликат]
- Отключить кнопки «Свернуть», «Развернуть», «Закрыть» в Win32 Я пробовал » перехватить» событие «Показать рабочий стол», но кажется, что это событие не запускается с действием «Показать рабочий стол».
Я что-то пропустил ?
Telroshan 26 Ноя 2020 в 22:38
Вы обрабатываете сообщение WM_WINDOWPOSCHANGING ?
Nik Bougalis
26 Ноя 2020 в 22:47
WM_WINDOWPOSCHANGING , вероятно, то, что вы хотите использовать. Установите флаг SWP_NOZORDER , чтобы остановить изменение z-порядка. Show Desktop, по-видимому, реализуется путем перемещения окон за пределы экрана на -32000, -32000, поэтому вы должны иметь возможность проверить это и установить SWP_NOMOVE , чтобы предотвратить это.
Jonathan Potter
26 Ноя 2020 в 23:03
Спасибо за ваши ответы, я попытался обработать WM_WINDOWPOSCHANGING с помощью следующего кода: cpp case WM_WINDOWPOSCHANGING: SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER); return 0; (Кажется, я не могу правильно отформатировать этот комментарий, извините ) Однако поведение остается прежним; при нажатии Windows + D или нажатии кнопки на рабочем столе окно скрывается:/ Я что-то пропустил?
27 Ноя 2020 в 02:23
Нет, вы не звоните SetWindowPos в ответ на это сообщение. Вы изменяете параметры структуры WINDOWPOS , которые она вам передает. См. документацию.
Jonathan Potter
27 Ноя 2020 в 02:36
28 Ноя 2020 в 20:19
1 ответ
Лучший ответ
ПРИМЕЧАНИЕ: окно без стиля WS_MINIMIZEBOX , кажется, не получает событие WINDOWPOSCHANGING при нажатии Windows + D. Таким образом, в этом случае не обнаружено -32 000 координат. Также замечено та же проблема при использовании стиля ex WS_EX_TOOLWINDOW (поскольку он избавляется от поля минимизации, даже если вы устанавливаете флаг стиля WS_MINIMIZEBOX ). Не нашел решения для этого случая, поэтому я придерживаюсь перекрывающегося окна.
Чтобы предотвратить это перемещение, просто установите флаги SWP_NOMOVE и SWP_NOSIZE на странице WINDOWPOS передается в lParam
Таким образом, в конечном итоге для достижения желаемого поведения (т. е. всегда за каждым другим окном, но всегда перед рабочим столом) единственный необходимый код для добавления в образец документа приведен ниже и помещен в оконную процедуру Оператор switch WindowProc :
РЕДАКТИРОВАТЬ : лучшее место для форсирования порядка Z с помощью HWND_BOTTOM , чтобы гарантировать, что окно всегда находится внизу, также находится в событии WM_WINDOWPOSCHANGING . Действительно, вызов SetWindowPos для его принудительного включения в событии WM_SIZE при перетаскивании окна, как я делал ранее, вызывает некоторое мерцание окна при изменении его размера, в то время как мерцание отсутствует. происходит при прямой установке свойства hwndInsertAfter структуры WINDOWPOS в WM_WINDOWPOSCHANGING .
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; >
Источник: question-it.com
Как закрепить программу на рабочем столе в Windows 8?
Как закрепить приложение на рабочем столе в Windows 8?
Закрепление приложений и папок на рабочем столе или на панели задач
- Нажмите и удерживайте (или щелкните правой кнопкой мыши) приложение, а затем выберите «Еще» Брать на заметку.
- Если приложение уже открыто на рабочем столе, нажмите и удерживайте (или щелкните правой кнопкой мыши) кнопку панели задач приложения, а затем выберите «Закрепить на панели задач».
Как закрепить окно на рабочем столе?
Щелкните значок DeskPins на панели задач, расположенный в правом нижнем углу рабочего стола. Курсор становится булавкой (по умолчанию красный или в зависимости от цвета, выбранного в параметрах). Переместите курсор-булавку (как обычный курсор) в окно, которое вы хотите закрепить вверху. Щелкните левой кнопкой мыши, чтобы закрепить окно.
Что такое горячая клавиша для рабочего стола?
Вот список сочетаний клавиш для Windows 10
Alt + Tab | Переключение между открытыми приложениями |
Alt + F4 | Закройте активный элемент или выйдите из активного приложения |
Клавиша с логотипом Windows + L | Блокировка компьютера или переключение учетных записей |
Клавиша с логотипом Windows + D | Отображение и скрытие рабочего стола |
Как разместить слово на моем рабочем столе?
Нажмите клавишу Windows, а затем перейдите к программе Office, для которой вы хотите создать ярлык на рабочем столе. Щелкните правой кнопкой мыши имя программы или плитку и выберите «Открыть расположение файла». Щелкните имя программы правой кнопкой мыши и выберите Отправить Рабочий стол (Создать ярлык). Ярлык программы появится на вашем рабочем столе.
См. Также Лучший ответ: как удалить приложения из библиотеки iOS 14?
Как закрепить ярлык в меню «Пуск» в Windows 8?
В меню «Пуск» щелкните правой кнопкой мыши пустое место или значок. После этого выберите Все приложения в правом нижнем углу. Шаг 2. Закрепите программу в меню «Пуск». На экране приложений найдите и щелкните правой кнопкой мыши программу, которую хотите закрепить в меню «Пуск», а затем нажмите кнопку «Прикрепить к пуску» в нижнем левом углу.
Как закрепить файл на панели задач?
Как закрепить файлы на панели задач Windows
- Откройте проводник (окно, которое позволяет вам увидеть, где сохранены ваши файлы.)…
- Щелкните правой кнопкой мыши документ, который нужно закрепить на панели задач. …
- Измените. …
- Щелкните правой кнопкой мыши документ, теперь это файл.exe, и выберите «Закрепить на панели задач».
Почему я не могу закрепить некоторые программы на панели задач?
Если у вас возникают проблемы с закреплением определенных программ на панели задач, возможно, программа была установлена неправильно. Попробуйте удалить, а затем переустановить приложение, а затем проверьте, можете ли вы добавить его на панель задач. Также проверьте, можете ли вы закрепить другие приложения или нет.
Источник: linkeyprod.fr
Как закрепить окно браузера на рабочем столе?
Запустите скрипт (просто двойным кликом) и теперь, когда вы в активном окне нажмете Ctrl+Shift+Пробел, оно будет отображаться поверх других окон до следующего нажатия этой же комбинации клавиш.
Как закрепить вкладку на переднем плане?
Дабы расположить какое-то окно на переднем плане используете комбинацию горячих клавиш «Ctrl + Пробел». Отключение опции производится аналогичным образом. Выход осуществляется через контекстное меню после клика на иконке в трее.
Как использовать DeskPins?
Пользоваться DeskPins очень просто – нажимаем левой кнопкой мыши по значку программы в трее, после чего курсор превратится в булавку. Теперь наводим курсор на заголовок окна, которое нужно прикрепить и еще раз кликаем по нему. Все, мы прикололи окно, и оно будет находиться поверх всех остальных программ.
Как сделать чтобы плеер был поверх всех окон?
Перейдите в параметры приложения выбрав Контекстное меню > Дополнительные возможности > Проигрыватель можно отметить Отображать проигрыватель поверх остальных окон.
Как включить наложение поверх других окон андроид 10?
Попробуйте Настройки>Приложения>Вверху будет шестеренка её нажать> В открывшемся списке наложение поверх окон, как то так.
Как сделать поверх других приложений?
Здравствуйте, на устройстве с чистым Android 6.0 необходимо зайти в «Настройки» → «Приложения», затем кликнуть по значку шестеренок, расположенному в правом верхнем углу и выбрать «Наложение поверх других окон».
Как вывести окно на передний план Windows 10?
Как вывести окно на передний план Windows 10? Это означает, что вы можете Alt + Tab к окну желаемого приложения; затем нажмите Alt +, ` чтобы вывести все остальные окна на передний план.
Как закрепить окно поверх других в Windows 7?
Как таковая она не имеет графического интерфейса, только иконку в трее. Для того, чтобы закрепить программу поверх остальных, просто нажмите на значок DeskPins в трее левой кнопкой мыши (можно и правой, после чего во всплывающем меню выберите пункт «Enter pin mode»):
Как сделать чтобы окна не перекрывали друг друга?
Прежде всего закрепить окно поверх других можно при помощи команды Window Position. Далее вам нужно выбрать интересующее окно и нажать TopMost. Если вы использовали эту опцию для нескольких окон, то они не будут перекрывать друг друга.
Как сделать видео с ютуба поверх всех окон?
- Перейдите в настройки устройства Приложения и уведомления Дополнительные настройки Специальный доступ Картинка в картинке.
- Выберите YouTube.
- Нажмите на переключатель в разделе Поддержка режима «Картинка в картинке».
Как перейти от одного окна к другому?
- Alt + Tab. Нажмите и удерживайте Alt, потом нажимайте Tab. На появившейся панели появятся превью открытых у вас окон, активное будет меняться по нажатию Tab.
- Ctrl + Alt + Tab. Переключатель окон автоматически закрывается, когда вы отпускаете Alt, но эта комбинация делает его постоянно открытым.
Как сделать панель задач поверх всех окон Windows 10?
В открывшемся контекстном меню выберите «Параметры панели». Появится окно, где отображаются все настройки, касающиеся этого визуального элемента. Установите в положение «Вкл» пункт автоматического скрытия панели, как это показано на скриншоте.
Источник: fortune-project.ru