|
Пишем Ренеймер/Renamer окон [Delphi 7] - Школа Читера - Основы основ - начинаем писать статьи для начинающих с целью создания полноценного раздела |
30.09.2010, 18:21
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Пишем Ренеймер/Renamer окон [Delphi 7]
Всем привет. Сегодня я наткнулся на эту тему. Чтобы не было больше вопросов я решил написать статью о том, как это сделать. Для написания программы нам потребуется только Delphi 7. - Создаём новый проект;
- Кидаем на форму Edit;
- Кидаем на форму ComboBox;
- Кидаем на форму Button;
- Очищаем текст в Edit;
- В свойстве Style компонента ComboBox выбираем DropDownList;
- В свойстве Caption кнопки пишем Переименовать;
- Создаём процедуру OnShow формы и пишем в ней:
Код:
procedure TForm1.FormShow(Sender: TObject);
var a : hWnd;
b: array [0..127] of Char;
begin
a:=GetWindow(Handle, gw_HWndFirst);
while a<>0 do
begin
if (a<>Application.Handle) and
(IsWindowVisible(a)) and
((GetWindow(a, gw_Owner)=0)) and
(GetWindowText(a, b, sizeof(b))<>0)
then
begin
GetWindowText(a, b, sizeof(b));
ComboBox1.Items.Add(StrPas(b));
end;
a:=GetWindow(a, gw_hWndNext);
end;
end;
- В обработчик кнопки пишем код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:HWND;
begin
if ComboBox1.Text = '' then
ShowMessage ('Начальное имя окна не введено!') else
if Edit1.Text = '' then
ShowMessage ('Новое имя окна не введено!') else
begin
SetWindowText(FindWindow (nil,pchar(ComboBox1.Text)),pchar(edit1.text));
begin
a:= findwindow(nil, PChar(Edit1.text));
if a<>0 then
ShowMessage('Окно переименовано')
else
ShowMessage('Окно не найдено');
end;
end;
end;
- Готово. Теперь сохраняем проект, компилируем и радуемся.
В СomboBox сразу после запуска появится список всех окон. В Edit вводим новое название выбранного окна. После нажатия кнопки (если всё правильно), то окно будет переименовано и будет выведено сообщение " Окно переименовано"
С дизайном и названием окна можете сами пошаманить.
Последний раз редактировалось Хакерок:); 30.09.2010 в 18:23.
|
|
|
Пользователь сказал cпасибо:
|
|
10.11.2010, 19:28
|
#2
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Если нужны подробности либо помощь - пишите в ЛС =)
P.S. Статья и так расписана как нельзя подробно.
|
|
|
11.11.2010, 09:35
|
#3
|
|
|
|
Фельдмаршал
|
Регистрация: 10.06.2008
Сообщений: 965
Популярность: 5501
Сказал(а) спасибо: 786
Поблагодарили 942 раз(а) в 598 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
То есть ты даёшь непрокомментированный код и это получается «Статья и так расписана как нельзя подробно.»?
В статье не описано НИЧЕГО.
Какие функции используются? Какие аргументы принимают, что возвращают?
Убило — поиск переименованного окна. Не лучше ли проверять возвращаемное значение функции SetWindowText?
Роль FindWindow непонятна. Смысл искать окно, если уже известен его хэндл и взято имя окна? Привязывай к итему в списке хэндл окна.
И, думаю, стоит изменять на новое имя окна в списке.
|
|
|
11.11.2010, 10:08
|
#4
|
|
|
|
Фельдмаршал
|
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Добавлю камень от себя.
Искать все окна в событии onShow бессмысленно, так как поиск будет производиться один раз при запуске программы (или при вызовах TForm.Show или TForm.ShowModal).
А если я хочу переименовать только что открытое окно?
Куда лучше делать поиск окон при выпадении списка (TComboBox.onDropDown) либо добавить кнопку обновления оного.
Ну и еще можно сказать что код обработчика кнопки нечитабелен, а переменные не "говорящие", какими они должны бы быть в обучающей статье.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Флудобот, Девизхак, OutFocusBot, OutFocusBot ver 3 (freepvp), PWMultiHack ver 3, AutoRespawn.
JD: JDMultiHack, JDFlooder, JDBot.
Статьи: Отключаем UAC, Ищем базовый адрес Perfect World, "Патчер памяти" или "Пишем флайхак", "Патчер памяти 2" или "Пишем Джампхак", "Поиск инжектов" или "Наш код в чужом процессе"
|
|
|
12.11.2010, 17:34
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Не учёл) И правда лучше поставить на TComboBox.onDropDown
Последний раз редактировалось Хакерок:); 21.11.2010 в 13:54.
|
|
|
12.11.2010, 19:19
|
#6
|
|
|
|
Пехотинец
|
Регистрация: 11.10.2010
Сообщений: 86
Популярность: 13
Сказал(а) спасибо: 46
Поблагодарили 33 раз(а) в 22 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Бред непонятно
|
|
|
21.11.2010, 13:48
|
#7
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
что тут не понятно?
Код:
procedure TForm1.FormShow(Sender: TObject);
var a : hWnd;
b: array [0..127] of Char;
begin
a:=GetWindow(Handle, gw_HWndFirst);
while a<>0 do
begin
if (a<>Application.Handle) and
(IsWindowVisible(a)) and
((GetWindow(a, gw_Owner)=0)) and
(GetWindowText(a, b, sizeof(b))<>0)
then
begin
GetWindowText(a, b, sizeof(b));
ComboBox1.Items.Add(StrPas(b));
end;
a:=GetWindow(a, gw_hWndNext);
end;
end;
Здесь всё очень просто. ComboBox присваивается значения всех окон, за исключением собственного окна, невидимых окон, дочерних окон и окон без заголовков.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:HWND;
begin
if ComboBox1.Text = '' then
ShowMessage ('Начальное имя окна не введено!') else
if Edit1.Text = '' then
ShowMessage ('Новое имя окна не введено!') else
begin
SetWindowText(FindWindow (nil,pchar(ComboBox1.Text)),pchar(edit1.text));
begin
a:= findwindow(nil, PChar(Edit1.text));
if a<>0 then
ShowMessage('Окно переименовано')
else
ShowMessage('Окно не найдено');
end;
end;
end;
Здесь еще проще. Идёт проверка на пустое поле в Edit и пустой ComboBox. Если всё верно, то переименовываем.
Так что
Последний раз редактировалось Хакерок:); 21.11.2010 в 13:52.
|
|
|
09.01.2011, 18:33
|
#8
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
И да, еще одно дополнение, чтобы список окон в ComboBox не дублировался, то первой командой в процедуре TComboBox.onDropDown требуется поставить команду ComoBox1.Clear;
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 13:42.
|
|