 |
Пишем Ренеймер/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 вводим новое название выбранного окна. После нажатия кнопки (если всё правильно), то окно будет переименовано и будет выведено сообщение " Окно переименовано"
С дизайном и названием окна можете сами пошаманить.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось Хакерок:); 30.09.2010 в 18:23.
|
|
|
Пользователь сказал cпасибо:
|
|
10.11.2010, 20:28
|
#2
|
|
|
|
Пехотинец
|
 Регистрация: 06.07.2009
 Сообщений: 81
 Популярность: 126
 Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Если нужны подробности либо помощь - пишите в ЛС =)
P.S. Статья и так расписана как нельзя подробно.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
11.11.2010, 10:35
|
#3
|
|
|
|
Фельдмаршал
|
 Регистрация: 10.06.2008
 Сообщений: 965
 Популярность: 5501
 Сказал(а) спасибо: 786
Поблагодарили 942 раз(а) в 598 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
То есть ты даёшь непрокомментированный код и это получается «Статья и так расписана как нельзя подробно.»?
В статье не описано НИЧЕГО.
Какие функции используются? Какие аргументы принимают, что возвращают?
Убило — поиск переименованного окна. Не лучше ли проверять возвращаемное значение функции SetWindowText?
Роль FindWindow непонятна. Смысл искать окно, если уже известен его хэндл и взято имя окна? Привязывай к итему в списке хэндл окна.
И, думаю, стоит изменять на новое имя окна в списке.
|
|
|
11.11.2010, 11:08
|
#4
|
|
|
|
Фельдмаршал
|
 Регистрация: 13.08.2009
 Сообщений: 1,004
 Популярность: 25098
 Золото Zhyk.Ru: 350
 Сказал(а) спасибо: 111
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Добавлю камень от себя.
Искать все окна в событии onShow бессмысленно, так как поиск будет производиться один раз при запуске программы (или при вызовах TForm.Show или TForm.ShowModal).
А если я хочу переименовать только что открытое окно?
Куда лучше делать поиск окон при выпадении списка (TComboBox.onDropDown) либо добавить кнопку обновления оного.
Ну и еще можно сказать что код обработчика кнопки нечитабелен, а переменные не "говорящие", какими они должны бы быть в обучающей статье.
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
JD: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). .
Статьи: Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
12.11.2010, 18:34
|
#5
|
|
|
|
Пехотинец
|
 Регистрация: 06.07.2009
 Сообщений: 81
 Популярность: 126
 Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Не учёл) И правда лучше поставить на TComboBox.onDropDown
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось Хакерок:); 21.11.2010 в 14:54.
|
|
|
12.11.2010, 20:19
|
#6
|
|
|
|
Пехотинец
|
 Регистрация: 11.10.2010
 Сообщений: 86
 Популярность: 13
 Сказал(а) спасибо: 46
Поблагодарили 33 раз(а) в 22 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
Бред непонятно
|
|
|
21.11.2010, 14: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. Если всё верно, то переименовываем.
Так что
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось Хакерок:); 21.11.2010 в 14:52.
|
|
|
09.01.2011, 19:33
|
#8
|
|
|
|
Пехотинец
|
 Регистрация: 06.07.2009
 Сообщений: 81
 Популярность: 126
 Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем Ренеймер/Renamer окон [Delphi 7]
И да, еще одно дополнение, чтобы список окон в ComboBox не дублировался, то первой командой в процедуре TComboBox.onDropDown требуется поставить команду ComoBox1.Clear;
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). , Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 12:37.
|
 |