![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Функция GetWindowLong с GWL_WNDPROC возвращает непонятное значение - $FFFFxxxx
Нигде не могу найти описание. Я понимаю так - если оконный класс создавался с помощью RegisterClassA , то, чтобы получить адрес оконной процедуры, нужно вызывать GetWindowLongA, а GetWindowLongW будет возвращать $FFFFxxxx. И на оборот... Если RegisterClassW то - GetWindowLongW, а GetWindowLongA вернет $FFFFxxxx. Я прав? -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
нужно имя передавать в правильном типе строки
Добавлено через 3 минуты и 26 секунд вызов ...A и ...W функций по сути приводит к одному и тому же коду который зависит только от того какой у системы формат строк а программист должен использовать те функции которые удовлетворяют типу строк его программы. PS: сам не понял что сказал. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Да это все понятно. Только в GetWindowLong никакое имя не прередается, а только хендл окна.
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
проверь достаточны ли права
есть ли ошибка после выполнения если не сложно пример, для проверки. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
В 7 делфе второе значение $FFFFxxxx А в юникодной, подозреваю,что первое -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
CodeMonkey, спасибо, это то, что я и думал.
Только
И вот еще, я почему то думал, что внутренний формат строк у винды юникод. И хоть, при создании окна мы используем ...A функции, система конвертирует строки в юникод. Это сообщение отредактировал(а) Чучмек - 17.1.2012, 13:35 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Честно говоря не понимаю в чем проблема. Адрес определяется, тип строк тоже.
Единственное нужно два варианта кода вызова (ANSI и WIDE) CodeMonkey, страшилка конечно интересная, но она справедлива только GetWindowLong при вызове же GetWindowLongA(W) страшилка просто не имеет смысла. Разрядная совместимость тоже присутствует, из 64 битной программы можно обратится к 32 битной функции. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| CodeMonkey |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Правильно написанную программу это интересовать не должно.
Окно создано CreateWindowW, я для него вызываю GetWindowLongA. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Да, но программа не моя. Я ее только ковыряю. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
А какая разница? Адрес оконной процедуры имеет смысл только в адресном пространстве процесса. Если ты в нём - ну так и вызывай CallWindowProc. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
каким образом?
-------------------- Обижено школьников: 8 |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Нет, мне интересно как ты вообще собрался выполнять тридцатидвухбитный код из х64-процесса. Потому что в отличие от времен перехода с х16 на х32 такая возможность не не предусмотрена
-------------------- Обижено школьников: 8 |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
в самом процессе это сделать не получится, но вот вызвать 32 битную функцию из dll возможно не уверен что стандартный LoadLibrary и GetProcAddress помогут... Добавлено через 3 минуты и 18 секунд для железа нет разницы 32 или 64 или 16 -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
длл выполняются в том же процессе (если не делать искусственно отдельный процесс для этих целей). Для железа есть разница - в режиме процессора.
-------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |