Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2014, 17:04   #11
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не хочет.
Зачем тебе потребовалось менять параметры окна чужого процесса?
Колись давай!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 17:17   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Это приказ?
Это констатация факта. У DLL нет своей области памяти, оно работает в памяти процесса, куда загружена. Потому про копии чего-то там нет и речи. Система указывает на CreateStruct окна целевого процесса и никаких проблем нет.

Цитата:
Только указатель указывает на чью память? На память программы, создающей окно, или на память процесса, поставившего хук?
Похоже вы не понимаете как работают глобальные ловушки. Процесс вообще не должен ставить ловушки. Это делает спец. написанная библиотека.
Просвящайтесь:
Цитата:
A global hook monitors messages for all threads in the same desktop as the calling thread. A thread-specific hook monitors messages for only an individual thread. A global hook procedure can be called in the context of any application in the same desktop as the calling thread, so the procedure must be in a separate DLL module. A thread-specific hook procedure is called only in the context of the associated thread. If an application installs a hook procedure for one of its own threads, the hook procedure can be in either the same module as the rest of the application's code or in a DLL. If the application installs a hook procedure for a thread of a different application, the procedure must be in a DLL. For information, see Dynamic-Link Libraries.
Цитата:
Не хочет.
Я не писал что это проверенный, рабочий код. Написал его в браузере.

lParam указывает на структуру CBT_CREATEWND, внутри которой есть lpcs, которая указывает на нужную вам структуру.
Разбирайтесь с указателями.

Последний раз редактировалось Человек_Борща; 11.10.2014 в 17:22.
Человек_Борща вне форума Ответить с цитированием
Старый 11.10.2014, 17:29   #13
Endifier
Пользователь
 
Регистрация: 17.06.2014
Сообщений: 36
По умолчанию

Человек_Борща, я так понял Вы про lpCreateParams говорите, попробую разобраться, спасибо.
Endifier вне форума Ответить с цитированием
Старый 11.10.2014, 17:32   #14
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Это констатация факта.
Констатация не может быть глаголом повелительного наклонения.
Цитата:
У DLL нет своей области памяти, оно работает в памяти процесса, куда загружена
Полностью согласен!
Цитата:
Похоже вы не понимаете как работают глобальные ловушки.
Да понимаю я. Я не могу понять имеено текущую ситуацию, а именно: в памяти какого процесса (из двух) находятся данные, на которые показывает указатель. И что будет, если его разыменовать и попытаться изменить данные по адресу, который в нём содержится. В памяти какого процесса изменятся данные: своего или чужого, если указатель - это просто 4 байта - адрес в памяти? Что это будет на низком уровне?
Код:
mov [адрес], данные
Мне самому интересно. Сделай рабочий пример с прогой, которая есть у всех. Скажем, отлови хуком калькулятор и измени заголовок его окна на "БОРЩ".
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 11.10.2014 в 17:37.
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 17:39   #15
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Я не могу понять имеено текущую ситуацию, а именно: в памяти какого
процесса (из двух) находятся данные, на которые показывает указатель.
В том, который создает окно.
Человек_Борща вне форума Ответить с цитированием
Старый 11.10.2014, 17:51   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
В том, который создает окно.
Вот! Это адрес в памяти чужого процесса. В итоге у нас имеется 4 байта адреса. Путём тайпкаста пусть (для примера) он будет указателем на некое число:
Код:
var  
  p: pInteger;
begin
  // блаблабла
  p:= pInteger(lParam); // тот самый lParam, 4 байта
  p^:= 100500;
end;
Вопрос, в ячейку памяти какого процесса запишется число 100500?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 18:11   #17
Endifier
Пользователь
 
Регистрация: 17.06.2014
Сообщений: 36
По умолчанию

Если делать так:
Код:
CREATESTRUCT(Pointer(CBT_CREATEWND(Pointer(lParam)^).lpcs)^).cx := 1000;
CREATESTRUCT(Pointer(CBT_CREATEWND(Pointer(lParam)^).lpcs)^).cy := 700;
CREATESTRUCT(Pointer(CBT_CREATEWND(Pointer(lParam)^).lpcs)^).lpszName := PWideChar('Test');
То размеры окна меняются, но вот класс\имя, ни в какую.
Endifier вне форума Ответить с цитированием
Старый 11.10.2014, 19:39   #18
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Вопрос, в ячейку памяти какого процесса запишется число 100500?
Того, чьи данные меняем.

Перечитайте ка, как работает DLL, и что такое хуки. Читать до полного понимания, что DLL обитает в той же области памяти что и процесс, к которому DLL подгружена, а своей области памяти DLL не имеет вообще.

Цитата:
То размеры окна меняются, но вот класс\имя, ни в какую.
Только это можно менять. На этот момент времени.
Потому что:
Цитата:
At the time of the HCBT_CREATEWND notification, the window has been created, but its final size and position may not have been determined and its parent window may not have been established.
Окно уже создано с заголовком. И CreateStruct теперь несет только информационную ценность.
Человек_Борща вне форума Ответить с цитированием
Старый 11.10.2014, 19:48   #19
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Того, чьи данные меняем.

Перечитайте ка, как работает DLL, и что такое хуки. Читать до полного понимания, что DLL обитает в той же области памяти что и процесс, к которому DLL подгружена, а своей области памяти DLL не имеет вообще.
Да узбагойся ты! Ты прав! Спасибо.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 20:36   #20
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Йя збагоен
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц