Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подмена заголовка активного окна, в Network Assistant 4.1 
:(
    Опции темы
Ku4er
Дата 21.1.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



Есть такая прога Network Assistant 4.1. Кто не знает - это чат для локалки. Слишком функциональный - показывает заголовок активного окна каждого подключенного юзера. Я думаю перехватывает с помощью WinAPI. Как не знаю, но хочу разобраться и пресечь сиё позорное занятие. Помогите плиз.
PM MAIL   Вверх
Guedda
Дата 21.1.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



Получаем текст заголовка окна.
Код

function NT_InternalGetWindowText(Wnd: HWND): string;
 type
   TInternalGetWindowText = function(Wnd: HWND; lpString: PWideChar;
     nMaxCount: Integer): Integer;
    stdcall;
 var
   hUserDll: THandle;
   InternalGetWindowText: TInternalGetWindowText;
   lpString: array[0..MAX_PATH] of WideChar; //Буфер для названия окна
  oemStr: PChar;
 begin
   Result   := '';
   hUserDll := GetModuleHandle('user32.dll');
   if (hUserDll > 0) then
   begin @InternalGetWindowText := GetProcAddress(hUserDll, 'InternalGetWindowText');
     if Assigned(InternalGetWindowText) then
     begin
       InternalGetWindowText(Wnd, lpString, SizeOf(lpString));
       Result := string(lpString);
     end;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   ShowMessage(NT_InternalGetWindowText(Form1.Handle));
 end;


Процедура переименования заголовка окна:
Код

SetWindowText(FindWindow(nil, 'Безымянный - Блокнот'),
    'Привет!!! Это подмена!!!');


Это сообщение отредактировал(а) Guedda - 21.1.2006, 16:26


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Ku4er
Дата 22.1.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



Спасибо большое за помощь smile . Постараюсь разобраться.
PM MAIL   Вверх
Ku4er
Дата 22.1.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



Хм,вроде разобрался, но....
мне необходимо не заменять заголовок окна, а перехватывать отслеживание (?) заголовка окна другой программой (при этом желательно не менять сам заголовок), если это возможно.
Вопрос в догонку: каким образом мне выяснить какое окно активно в момент времени?
PM MAIL   Вверх
Guedda
Дата 22.1.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



Цитата(Ku4er @ 22.1.2006, 18:26)
Вопрос в догонку: каким образом мне выяснить какое окно активно в момент времени?

См мой пост выше... Первая функция:
Цитата

Получаем текст заголовка окна.

Цитата(Ku4er @ 22.1.2006, 18:26)

Хм,вроде разобрался, но....
мне необходимо не заменять заголовок окна, а перехватывать отслеживание (?) заголовка окна другой программой (при этом желательно не менять сам заголовок), если это возможно.

Я думаю, что необходимо перехватывать все сообщения программы, которая отслеживает эти самые заголовки. И если программа посылает сообщение отслеживания, тогда передать другое сообщение.

Это сообщение отредактировал(а) Guedda - 22.1.2006, 19:38


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Ku4er
Дата 23.1.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



C определением хендла активного окна разобрался. А вот про перехват сообщений хотелось бы узнать подробней.

Это сообщение отредактировал(а) Ku4er - 23.1.2006, 15:01
PM MAIL   Вверх
SoWa
Дата 23.1.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Архангельский в помощь! книга "для освоивших Дельфи"


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Snowy
Дата 24.1.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Уточню вопрос.
Ты хочешь перехватывать создание новых окон или появление новых кнопочек на панели задач.
Что именно тебя не устраивает?
PM MAIL   Вверх
Romikgy
Дата 24.1.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Те надо перехватить от нужного тебе приложения всего две месаги, которые это приложение будет посылать активному окну,
1. WM_GETTEXT
2. WM_GETTEXTLENGTH
Первое берет текст, второе определяет его длинну.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Guedda
Дата 24.1.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



В общем посмотрел эту программу.
Чего париться, если можно убрать в самой программе высвечивание твоих активных окон?


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Ku4er
Дата 24.1.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



Цитата(Snowy @ 24.1.2006, 10:33 Найти цитируемый пост)

Ты хочешь перехватывать создание новых окон или появление новых кнопочек на панели задач.
Что именно тебя не устраивает?

Я хочу чтоб был мир во всём мире smile
Сорри за флуд.
Мне необходимо перехватывать ни создание дочерних окон, ни появление всяких кнопочек, а перехватить обращение программы к заголовку активного окна, которое не я вляется дочерним (это может быть браузер, игра и т.д.). Т.е. если прога захочет показать какому-либо пользователю в сети какое окно у меня открыто в текущий момент, вместо заголовка она получила бы что-то типа "Не подглядывай ))".
В принципе я этого уже добился благодаря товарищу Guedda: программка на Delphi просто заменяет заголовок активного окна на тот, который задам я, но поскольку это очень сильно отдает кривизной, хотелось бы найти другое решение задачки.

Цитата(Guedda @ 24.1.2006, 15:44 Найти цитируемый пост)

В общем посмотрел эту программу.
Чего париться, если можно убрать в самой программе высвечивание твоих активных окон?

Можно, но это, извините за ребячество, будет не кодерски smile

Это сообщение отредактировал(а) Ku4er - 24.1.2006, 15:52
PM MAIL   Вверх
Tappxxor
Дата 25.11.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Цитата(Guedda @ 24.1.2006,  15:44)
В общем посмотрел эту программу.
Чего париться, если можно убрать в самой программе высвечивание твоих активных окон?

Но допустим есть аналогичная программа, в которой нельзя это вырубить в настройках..
Как было сказано выше, надо перехватывать WM_GETTEXT и WM_GETTEXTLENGTH - и наверное подменять там строку.. На одном из форумов предложили использовать SetWindowsHookEx.. Буду признателен, если кто-нибудь подскажет как примерно это реализовать для данного случая и тип хука, который надо ставить.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.