Перейти к содержанию

Работа с системными процессами и замена обоев


Рекомендуемые сообщения

Всем привет!

Хочу сделать такую штуку, чтобы при включении моего трейнера - менялись обои рабочего стола на мои (кастомные) в фотошопе нарисую какой-нибудь свой логотип.

Задумка такая, при открытии моего трейнера - запоминаются текущие обои и заменяются новыми. Новые обои действуют только пока мой трейнер активен, тоесть когда трейнер закрывают - старые обои возвращаются на круги своя. Но в сам .exe трейнера это воткнуть сложно, ибо возможны баги с тем, что трейнер закроется - а обои не вернутся.

У меня появилась бредовая мыслишка: в системе постоянно активны фоновые процессы. Что если написать .dll ку и при запуске моего трейнера эта .dll'ка будет инъектироваться в системный процесс. Эта дллка запомнит текущие обои и сменит их на мои кастомные. В цикле будет проверка запущенности моего процесса с трейнером. Пока трейнер активен - ничего не делать, когда процесс с трейнером не найден - вернуть старые обои и выгрузить себя из памяти системного процесса.

Тоесть, моя идейка заключается в "наблюдении со стороны" на процесс моего трейнера. Как это осуществить? Есть "безобидные" процессы, в которые можно внедрить .dll'ку без последствий?

Ну и, собственно, как запоминать текущие обои? Как заменять обои на кастомные (встроенные в .dll'ку)? Ну и есть ли какие сопутствующие трудности?

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 

Но в сам .exe трейнера это воткнуть сложно, ибо возможны баги с тем, что трейнер закроется - а обои не вернутся.

Чушь. Никто не мешает отловить сообщение

WM_CLOSE и вернуть обои на место в этом обработчике. Но я бы, например, таким трейнером пользоваться не стал. Кому понравится, если его любимые обои будут вдруг заменены другими, пусть и временно?

Ссылка на комментарий
Поделиться на другие сайты

Кому понравится, если его любимые обои будут вдруг заменены другими, пусть и временно?

Мне понравится)

 

WM_CLOSE и вернуть обои на место в этом обработчике.

Ok, Xipho: что такое WM_CLOSE и как его отловить? :)

Ссылка на комментарий
Поделиться на другие сайты

Чушь. Никто не мешает отловить сообщение

WM_CLOSE и вернуть обои на место в этом обработчике. Но я бы, например, таким трейнером пользоваться не стал. Кому понравится, если его любимые обои будут вдруг заменены другими, пусть и временно?

Это не кому не понравится. Думаю не сложно догадаться,что будет в комментариях под этим трейнером(особенно во время летних каникул) окажись он не здесь,а где не будь на плей граунде хотя бы. 

Ссылка на комментарий
Поделиться на другие сайты

Не уверен, что пользователю понравится подобная деятельность любой программы в его системе. Особенно если его не предупреждать. Ну и да, кто мешает сделать два процесса или отдельный поток, раз уж с WM_CLOSE работать лень? Для инжекта в системный процесс понадобятся как минимум административные права.

Ссылка на комментарий
Поделиться на другие сайты

Не уверен, что пользователю понравится подобная деятельность любой программы в его системе. Особенно если его не предупреждать. 

 

Я это для себя) 

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Может немного поздно, но...

Получить обои можно при помощи SystemParametersInfo

Флаг - SPI_GETDESKWALLPAPER, установить обои можно этой же функцией, флагом - SPI_SETDESKWALLPAPER.

Пример установки обоев:

LPWSTR imgPath = L"C:\\Users\\root\\wallpapers\\1.png";BOOL result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, imgPath, SPIF_UPDATEINIFILE);if (!result) {   printf("Cannot set wallpaper! Error: 0x%X\n", GetLastError());}

Написать вызов для получения текущих обоев думаю тебе не составит труда.

Потом по-поводу восстановления обоев, отлавливай WM_QUIT в главном потоке приложения, также при запуске приложения можно попробовать установить обработчик сигнала - SIGTERM (https://msdn.microsoft.com/en-us/library/ms811896.aspx#ucmgch09_topic3).

+ Ты можешь написать свою службу, которая будут проверять запущен твой трейнер или нет (http://habrahabr.ru/post/71533/) и манипулировать с обоями.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.