Так вот, родилась очередная мысль: есть, допустим, у нас стороннее приложение, написанное на VB6.
Какая одна из частых просьб новичков в новичковом разделе? Хотят порулить элементами внутри окон чужого приложения в стиле VB, вроде следующего:
- Код: Выделить всё
' Как получить текст из TextBox-а в чужом приложении?
' Хочу получить результат вычисления из калькулятора (calc.exe), но
MsgBox GetChuzhayaProga("calc.exe").Okno.tbResult.Text ' так не получается 0_0
Объясняешь им, что так нельзя, потому что элементы в чужих приложениях VB-контроллами не являются, но новичкам невдомёк. Они об окнах, классах, стилях и сообщениях не слышали, поэтому в их наивном сознании у любой видимой кнопки где-то в глубине есть свойства «Caption», «Visble» и так далее.
Так вот, объясняешь им, что элементы в чужих приложениях VB-контроллами не являются...
Стоп машина! В чужих VB-приложениях элементы как раз являются VB-контроллами.
И здесь проблема уже в другом: как из своего приложения получить ссылку на объект в другом приложении. Просто найти объект в чужой памяти и скопировать к себе адрес — не пройдёт, этот адрес в контексте нашего приложения будет просто недействительным, а попытка использовать такую ссылку на объект приведёт к краху нашего приложения.
А теперь сама идея:
Утилита, которая позволяет прицепиться (attach) к любому скомпилированному чужому (у нас нет ни исходных кодов, никаких знаний о нём) приложению, написанному на VB6 и:
- Получить список его форм и созданных экземпляров форм
- Получить список элементов на этих формах.
- Посмотреть свойства этих экземляров форм и элементов, на них находящихся
- Поменять какие-нибудь свойства
- И вообще порулить формами и любыми объектами, которые из них можно выудить, используя встроенное в утилиту VBScript-основанное окно «Immidiate Pane» (как бонус: с плюшками вроде IntelliSense и подсказок).
Разумеется, утилита сможет подключиться к любому (ничего не подозревающему) VB-приложению, а не только к тому, в которое вы добавили специальный код, который бы передавал чужой утилите информацию о своих формах и их содержимом.
Ы?