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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Адрес оконной процедуры 
:(
    Опции темы
Чучмек
Дата 17.1.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Функция GetWindowLong с GWL_WNDPROC возвращает непонятное значение  - $FFFFxxxx
Нигде не могу найти описание.
Я понимаю так - если оконный класс создавался с помощью RegisterClassA , то, чтобы получить адрес оконной процедуры, нужно вызывать  GetWindowLongA, а GetWindowLongW будет возвращать $FFFFxxxx.
И на оборот... Если RegisterClassW то - GetWindowLongW, а  GetWindowLongA вернет $FFFFxxxx.
Я прав?


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
drkot
Дата 17.1.2012, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



нужно имя передавать в правильном типе строки

Добавлено через 3 минуты и 26 секунд
вызов ...A и ...W функций по сути приводит к одному и тому же коду который зависит только от того какой у системы формат строк
а программист должен использовать те функции которые удовлетворяют типу строк его программы.

PS: сам не понял что сказал.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Чучмек
Дата 17.1.2012, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Да это все понятно. Только  в GetWindowLong никакое имя не прередается, а только хендл окна. 


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
drkot
Дата 17.1.2012, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



проверь достаточны ли права
есть ли ошибка после выполнения

если не сложно пример, для проверки.



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Чучмек
Дата 17.1.2012, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Код

label1.Caption:=inttohex(cardinal(GetWindowLongA(form1.Handle,GWL_WNDPROC)),8)+#13+
inttohex(cardinal(GetWindowLongW(form1.Handle,GWL_WNDPROC)),8);

В 7 делфе второе значение $FFFFxxxx
А в юникодной, подозреваю,что первое 


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
CodeMonkey
Дата 17.1.2012, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чучмек
Дата 17.1.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



CodeMonkey, спасибо, это то, что я и думал.
Только 
Цитата

что это за странные значения
 не сказано.  >$FFFF0000, >=$FFFF0000 или >$7FFFFFFF.
И вот еще, я почему то думал, что внутренний формат строк у винды юникод. И хоть, при создании окна мы используем ...A функции, система конвертирует строки в   юникод.

Это сообщение отредактировал(а) Чучмек - 17.1.2012, 13:35


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
drkot
Дата 17.1.2012, 15:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Честно говоря не понимаю в чем проблема. Адрес определяется, тип строк тоже.
Единственное нужно два варианта кода вызова (ANSI и WIDE)

CodeMonkey, страшилка конечно интересная, но она справедлива только GetWindowLong при вызове же GetWindowLongA(W) страшилка просто не имеет смысла.
Разрядная совместимость тоже присутствует, из 64 битной программы можно обратится к 32 битной функции.



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
CodeMonkey
Дата 18.1.2012, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



Цитата
Только не сказано.  >$FFFF0000, >=$FFFF0000 или >$7FFFFFFF.


Правильно написанную программу это интересовать не должно.

Цитата
она справедлива только GetWindowLong при вызове же GetWindowLongA(W) страшилка просто не имеет смысла


Окно создано CreateWindowW, я для него вызываю GetWindowLongA.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чучмек
Дата 18.1.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(CodeMonkey @  18.1.2012,  10:21 Найти цитируемый пост)
Правильно написанную программу это интересовать не должно

Да, но программа не моя. Я ее только ковыряю.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
CodeMonkey
Дата 18.1.2012, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



Цитата(Чучмек @  18.1.2012,  13:36 Найти цитируемый пост)
Да, но программа не моя. Я ее только ковыряю. 


А какая разница? Адрес оконной процедуры имеет смысл только в адресном пространстве процесса. Если ты в нём - ну так и вызывай CallWindowProc.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Чучмек
Дата 18.1.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(CodeMonkey @  18.1.2012,  12:59 Найти цитируемый пост)
А какая разница?

breakpoint 



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
bems
Дата 20.1.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(drkot @  17.1.2012,  15:24 Найти цитируемый пост)
из 64 битной программы можно обратится к 32 битной функции
каким образом?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
drkot
Дата 26.1.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Цитата(bems @  20.1.2012,  14:27 Найти цитируемый пост)
каким образом?

передав ей правильные параметры


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
bems
Дата 26.1.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Нет, мне интересно как ты вообще собрался выполнять тридцатидвухбитный код из х64-процесса. Потому что в отличие от времен перехода с х16 на х32 такая возможность не не предусмотрена


--------------------
Обижено школьников: 8
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.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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