Установка шрифта меню и заголовка окна: возможно ли это...
От: remark Россия http://www.1024cores.net/
Дата: 12.02.05 11:40
Оценка:
Задача: необходимо установить шрифт для меню, заголовка окна, статусбара и т.д. только для одной программы.
Данный вопрос уже поднимался на форуме, но лучшее, решение, которое я видел, — рисовать окно самому — это, конечно, гемор. К тому же сложно сопровождать и поддерживать для различных версий ОС... Хотелось бы более универсальное решение.

У меня возникла следующая идея. Приложение откуда-то эти данные (шрифты) получает. Следовательно можно перехватывать некие вызовы API, с помощью которых программа получает описания шрифтов, и возвращать ему необходимый шрифт. По идее, это всё, что нужно — другие программы по прежнему будут рисовать шрифтами, установленными в системе, а моя программа будет рисовать моим шрифтом.

Но на практике возникли проблемы. Пытаюсь перехватывать вызовы SystemParametersInfoA/W(SPI_GETNONCLIENTMETRICS, ...) и RegQueryValueExA/W() к ветке "HCU\Control Panel\Desktop\WindowMetrics" (методом научного тыка вроде это там лежит). Для начала попытался подменить шрифт для всех процессов — ставлю глобальный хук и ставлю в начале функции jmp на мою, т.е. все вызовы к этим функциям должны перехватываться... далее рассылаю всем приложениям WM_SETTINGCHANGE, что бы они обновили настройки.
В результате, у части приложений шрифт установился мой, у части — нет. Например, Explorer главное меню рисует моим шрифтом, выпадающее меню Favorites — моим, а все остальные выпадающие меню системным... В программе, в которой собственно это и надо сделать (стандартное MFC приложение) вообще мой шрифт не устанавливается.


Хотелось бы услышать все мнения и предложения на этот счёт: как ещё приложения могут получать эту информацию, может перехватывать надо как-то не так, кто и как рисует главное меню, почему часть меню в Explorer изменилась, а часть нет...

Я думаю решение данной проблемы будет интересно многим, хотя бы с точки зрения получения опыта.

Заранее спасибо всем откликнувшимся, remark

1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: UP
От: remark Россия http://www.1024cores.net/
Дата: 21.03.06 12:51
Оценка:
Ни у кого никаких мыслей не возникло?

С перехватом API вызовов, я думаю не получалось, т.к. это происходило где-то внутри ядра, где перехватить уже нельзя.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: UP
От: pullover  
Дата: 21.03.06 14:19
Оценка:
Здравствуйте, remark, Вы писали:

R>Ни у кого никаких мыслей не возникло?

спустя один год?
Есть еще GetStockObject()
Re: Установка шрифта меню и заголовка окна: возможно ли это.
От: kero Россия  
Дата: 02.03.08 15:48
Оценка:
Здравствуйте, remark, Вы писали:
[...]
Ваш вопрос равносилен следующему: как обойти системные метрики (параметры)?
Удалось?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: UP
От: multiarc Беларусь http://multiarc.at.tut.by/
Дата: 02.03.08 21:19
Оценка:
Здравствуйте, pullover, Вы писали:

P>Здравствуйте, remark, Вы писали:


R>>Ни у кого никаких мыслей не возникло?

P>спустя один год?
P>Есть еще GetStockObject()

Инжект во все гюи приложения, длл-ки выполнение перечисления окон, и установка нужного шрифта... никаких проблем не вижу...
Re[4]: UP
От: kero Россия  
Дата: 03.03.08 00:49
Оценка:
Здравствуйте, multiarc, Вы писали:

M>Инжект во все гюи приложения, длл-ки выполнение перечисления окон, и установка нужного шрифта... никаких проблем не вижу...


Не видите, значит... А Вы с начала читали?
R>>>Задача: необходимо установить шрифт для меню, заголовка окна, статусбара и т.д. только для одной программы.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: UP
От: multiarc Беларусь http://multiarc.at.tut.by/
Дата: 03.03.08 14:40
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, multiarc, Вы писали:


M>>Инжект во все гюи приложения, длл-ки выполнение перечисления окон, и установка нужного шрифта... никаких проблем не вижу...


K>Не видите, значит... А Вы с начала читали?

R>>>>Задача: необходимо установить шрифт для меню, заголовка окна, статусбара и т.д. только для одной программы.
А инжект в 1 процесс это проблема?
Re[6]: UP
От: kero Россия  
Дата: 03.03.08 23:32
Оценка:
Здравствуйте, multiarc, Вы писали:

M>А инжект в 1 процесс это проблема?


Т.е. поставленный топик-стартером вопрос — для Вас и не задачка вовсе, а пройденный этап ?
Тогда (поскольку изменение шрифта в общем случае означает и изменение размеров соответствующей nonclient области) —
не покажите ли живое окошко, в котором можно свободно менять NC-метрики, невзирая на системные параметры,
т.е. чтобы с этого пульта воздействовать на окошко было бы низя ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.