Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Пишем Ренеймер/Renamer окон [Delphi 7]

-

Школа Читера

- Основы основ - начинаем писать статьи для начинающих с целью создания полноценного раздела

Ответ
 
Опции темы
Старый 30.09.2010, 18:21   #1
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
Thumbs up Пишем Ренеймер/Renamer окон [Delphi 7]

Всем привет. Сегодня я наткнулся на эту тему. Чтобы не было больше вопросов я решил написать статью о том, как это сделать. Для написания программы нам потребуется только Delphi 7.
  1. Создаём новый проект;
  2. Кидаем на форму Edit;
  3. Кидаем на форму ComboBox;
  4. Кидаем на форму Button;
  5. Очищаем текст в Edit;
  6. В свойстве Style компонента ComboBox выбираем DropDownList;
  7. В свойстве Caption кнопки пишем Переименовать;
  8. Создаём процедуру 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;
  9. В обработчик кнопки пишем код:
    Код:
    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;
  10. Готово. Теперь сохраняем проект, компилируем и радуемся.
В СomboBox сразу после запуска появится список всех окон. В Edit вводим новое название выбранного окна. После нажатия кнопки (если всё правильно), то окно будет переименовано и будет выведено сообщение "Окно переименовано"
С дизайном и названием окна можете сами пошаманить.

Последний раз редактировалось Хакерок:); 30.09.2010 в 18:23.
  Ответить с цитированием
Пользователь сказал cпасибо:
Гексаэдр (10.03.2012)
Старый 10.11.2010, 19:28   #2
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

Если нужны подробности либо помощь - пишите в ЛС =)
P.S. Статья и так расписана как нельзя подробно.
  Ответить с цитированием
Старый 11.11.2010, 09:35   #3
Знатный Читер
 Фельдмаршал
Аватар для Leo_ня
 
Leo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядом
Регистрация: 10.06.2008
Сообщений: 965
Популярность: 5501
Сказал(а) спасибо: 786
Поблагодарили 942 раз(а) в 598 сообщениях
Отправить сообщение для Leo_ня с помощью ICQ Отправить сообщение для Leo_ня с помощью Telegram
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

То есть ты даёшь непрокомментированный код и это получается «Статья и так расписана как нельзя подробно.»?
В статье не описано НИЧЕГО.

Какие функции используются? Какие аргументы принимают, что возвращают?

Убило — поиск переименованного окна. Не лучше ли проверять возвращаемное значение функции SetWindowText?

Роль FindWindow непонятна. Смысл искать окно, если уже известен его хэндл и взято имя окна? Привязывай к итему в списке хэндл окна.

И, думаю, стоит изменять на новое имя окна в списке.
  Ответить с цитированием
Старый 11.11.2010, 10:08   #4
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

Добавлю камень от себя.
Искать все окна в событии onShow бессмысленно, так как поиск будет производиться один раз при запуске программы (или при вызовах TForm.Show или TForm.ShowModal).
А если я хочу переименовать только что открытое окно?
Куда лучше делать поиск окон при выпадении списка (TComboBox.onDropDown) либо добавить кнопку обновления оного.

Ну и еще можно сказать что код обработчика кнопки нечитабелен, а переменные не "говорящие", какими они должны бы быть в обучающей статье.
  Ответить с цитированием
Старый 12.11.2010, 17:34   #5
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

Не учёл) И правда лучше поставить на TComboBox.onDropDown

Последний раз редактировалось Хакерок:); 21.11.2010 в 13:54.
  Ответить с цитированием
Старый 12.11.2010, 19:19   #6
Заблокирован
 Пехотинец
Аватар для kaktess
 
kaktess никому не известный тип
Регистрация: 11.10.2010
Сообщений: 86
Популярность: 13
Сказал(а) спасибо: 46
Поблагодарили 33 раз(а) в 22 сообщениях
Отправить сообщение для kaktess с помощью Skype™
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

Бред непонятно
  Ответить с цитированием
Старый 21.11.2010, 13:48   #7
 Пехотинец
Аватар для Хакерок:)
 
Хакерок:) на правильном путиХакерок:) на правильном пути
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
Post Re: Пишем Ренеймер/Renamer окон [Delphi 7]

Цитата:
Сообщение от kaktessПосмотреть сообщение
Бред непонятно

что тут не понятно?
Код:
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 сообщениях
Отправить сообщение для Хакерок:) с помощью ICQ
 
По умолчанию Re: Пишем Ренеймер/Renamer окон [Delphi 7]

И да, еще одно дополнение, чтобы список окон в ComboBox не дублировался, то первой командой в процедуре TComboBox.onDropDown требуется поставить команду ComoBox1.Clear;
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Скрипт] "Патчер памяти" или "Пишем флайхак" [Delphi] Dinmaite Разработка ПО для Perfect World 205 30.05.2018 01:48
[Статья] Пишем брутфорс [Delphi] ReAct1[on] Pascal/Delphi 1 16.11.2012 19:34
[Руководство] Пишем простое окно на С++ Ivan_32 ASM/WinAPI 3 11.12.2009 06:53

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 13:42.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net