СообЧа > База Знаний > Программирование > Win32 API

Вопрос

Интересно, SetWindowLong можно использовать только в своем приложении или в любом другом? Если можно в любом, киньте примерчик или кусок кода, а то ничего не получается.

Ответ

Можно и в другом, но ты должен позаботится о том чтобы функция обработчик, адрес которой ты передаешь, была достыпна тому процессу, которому принадлежит окно, которое ты субклассиш.

Каждый процесс теоритически может адресовать 4гб памяти, те у каждого процесса свое адресное пространство, и по адресу 123456, к примеру у них хранятся разные данные, когда ты пытаешься установить обрабочик к окну др процесса, то передаешь ему адрес функции обработчика, но этот адрес находится в адресном пространстве твоей проги, а у процесса владеющего окном по этому адресу что то другое, если там данные, то может случится что то непредсказуемое, если там свободная страница памяти, то процессор тутже сгенерирует апаратное исключение ACCESS_VIOLATION, если в проге есть обработчик исключений, она может и выкарабкается, если нет то сразу вылетит.

Как субласить чужие окна я незнаю, не возникало потребности, но так точно нельзя.

Ivan Rozhuk

Вышеуказанной функцей субклассить чужие окна нельзя. Нужна по идее SetWindowLongPtr, но я сам с ней промучился много времени и в конце концов даже не смог ее правильно объявить. Вроде, в VB.NET можно легко, но я пока не пробовал. Также пакет Desaware Spyworks Tools позволяют это сделать. Но приходится таскать с собой библиотеку.

Артем Кривокрисенко



Copyright © 2000-2004 Сообщество Чайников
Контактная информация