Изменить имя класса окна во время выполнении программы
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.96] |
|
|
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Изменить имя класса окна во время выполнении программы
|
|
|
|
|
Доброго времени суток всем. Допустим класс моей формы называется TForm1. Хочу сменить это название на абсолютно любое прямо при выполнении программы. Как это сделать?
|
|
Сообщ.
#2
,
|
|
|
|
Зачем?
|
|
Сообщ.
#3
,
|
|
|
|
ДЛя защиты от закрытия с помощью другой проги.
|
|
Сообщ.
#4
,
|
|
|
|
По идее никак ...
|
|
Сообщ.
#5
,
|
|
|
|
А название класса хранится в памяти как строка? Если да, то как ее найти?
|
|
Сообщ.
#6
,
|
|
|
|
Цитата Alexander N @ ДЛя защиты от закрытия с помощью другой проги. Я бы смотрела не в сторону затруднения нахождения (если окно есть - найдут все равно), а в сторону собственного "незакрывания" на стандартные команды. (Если закрывать будут силовыми методиками, то против лома... ) |
|
Сообщ.
#7
,
|
|
|
|
Alexander N
Цитата как ее найти? С такими запросами - что вы тут делаете? Вам - в ядро |
|
Сообщ.
#8
,
|
|
|
|
Цитата Alexander N @ А название класса хранится в памяти как строка? Если да, то как ее найти? Цитата kero_xmemor @ Alexander N Цитата как ее найти? С такими запросами - что вы тут делаете? Вам - в ядро Эмн... Стесняюсь спросить... А в какое ядро ? |
|
Сообщ.
#9
,
|
|
|
|
Цитата kero_xmemor @ Alexander N Цитата как ее найти? С такими запросами - что вы тут делаете? Вам - в ядро ![]() [offtop]как в какое? в ядерное конечно [/offtop] |
|
Сообщ.
#10
,
|
|
|
|
Имена классов окон хранятся в таблице атомов в ядре.
Кое-что полезное можно почерпнуть из этой статьи: Инжект: лезем через окно Ещё плагин Phantom как-то изменяет класс окна отладчика OllyDebug, можно его поковырять, посмотреть реализацию |
|
Сообщ.
#11
,
|
|
|
|
Цитата Lumen @ Имена классов окон хранятся в таблице атомов в ядре. Кое-что полезное можно почерпнуть из этой статьи: Инжект: лезем через окно Ещё плагин Phantom как-то изменяет класс окна отладчика OllyDebug, можно его поковырять, посмотреть реализацию И какой только гадости в ядро не понапихали ![]() Век живи - век учись. Спасибо |
|
Сообщ.
#12
,
|
|
|
|
Цитата Alexander N @ Допустим класс моей формы называется TForm1. Хочу сменить это название на абсолютно любое прямо при выполнении программы. Как это сделать? Можно просто изменить название класса окна до его регистрации\создания. Для этого достаточно переопределить метод TForm1.CreateParams ![]() ![]() type TForm1 = class(TForm) ... protected procedure CreateParams(var Params: TCreateParams); override; end; procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WinClassName:='Abracadabra'; end; Добавлено Цитата Alexander N @ ДЛя защиты от закрытия с помощью другой проги Если имеется ввиду закрытие через посылку сообщений WM_CLOSE или WM_SYSCOMMAND, то также можно переопределить метод TForm1.WndProc или заменить WindowProc, в котором игнорировать указанные сообщеня, если они посланы не из твоего главного потока: InSendMessage = true |
|
Сообщ.
#13
,
|
|
|
|
Я вообще подумал что автор хочет изменить класс уже существующего окна.
А так да, при создании можно подменить название на любое. Если окно не свое, то можно ещё перехватить RegisterClass.ЗЫ: Кроме WM_CLOSE и подобных ещё придется сделать что-то с TerminateProcess |
|
Сообщ.
#14
,
|
|
|
|
Цитата leo @ Как вариант очень годится, хотя предполагалось изначально менять имя рендомно по таймеру.Можно просто изменить название класса окна до его регистрации\создания Цитата Lumen @ Это тоже будет.Кроме WM_CLOSE и подобных ещё придется сделать что-то с TerminateProcess Цитата leo @ А сообщения от системы? ПРи завершени работы к примеру. Если имеется ввиду закрытие через посылку сообщений WM_CLOSE или WM_SYSCOMMAND, то также можно переопределить метод TForm1.WndProc или заменить WindowProc, в котором игнорировать указанные сообщеня, если они посланы не из твоего главного потока: InSendMessage = true ВАжное замечание: из-за недостатка материала просьба не ограничиваться только Delphi, если это можно сделать на другом языке. |
|
Сообщ.
#15
,
|
|
|
|
При завершении работы компьютера в целом?
Тогда надо перехватывать WM_QUERYENDSESSION |