Вопрос
Интересно, SetWindowLong можно использовать только в своем приложении или в любом другом? Если можно в любом, киньте примерчик или кусок кода, а то ничего не получается.
Ответ
Можно и в другом, но ты должен позаботится о том чтобы функция обработчик, адрес которой ты передаешь, была достыпна тому процессу, которому принадлежит окно, которое ты субклассиш.
Каждый процесс теоритически может адресовать 4гб памяти, те у каждого процесса свое адресное пространство, и по адресу 123456, к примеру у них хранятся разные данные, когда ты пытаешься установить обрабочик к окну др процесса, то передаешь ему адрес функции обработчика, но этот адрес находится в адресном пространстве твоей проги, а у процесса владеющего окном по этому адресу что то другое, если там данные, то может случится что то непредсказуемое, если там свободная страница памяти, то процессор тутже сгенерирует апаратное исключение ACCESS_VIOLATION, если в проге есть обработчик исключений, она может и выкарабкается, если нет то сразу вылетит.
Как субласить чужие окна я незнаю, не возникало потребности, но так точно нельзя.
Ivan Rozhuk
Вышеуказанной функцей субклассить чужие окна нельзя. Нужна по идее SetWindowLongPtr, но я сам с ней промучился много времени и в конце концов даже не смог ее правильно объявить. Вроде, в VB.NET можно легко, но я пока не пробовал. Также пакет Desaware Spyworks Tools позволяют это сделать. Но приходится таскать с собой библиотеку.
Артем Кривокрисенко
Copyright 2000-2004 Сообщество Чайников
Контактная информация