Здравствуйте, L0N6, Вы писали:
LN>Есть чужое приложение. LN>Нахожу его хэндл через FindWindow. У этого приложения нахожу хэндл объекта (TreeView). LN>Собственно, вопрос: LN>Как получить текст каждого элемента TreeView, и установить на нем фокус?
Есть чужое приложение.
Нахожу его хэндл через FindWindow. У этого приложения нахожу хэндл объекта (TreeView).
Собственно, вопрос:
Как получить текст каждого элемента TreeView, и установить на нем фокус?
Я не являюсь богом API, но что-то мне подсказывает, что в контексте другого приложения хэндлы на память нашего приложения недействительны... Надо пользовать VirtualAlloc, чтобы выделить память в другом приложении!!!
Здравствуйте, L0N6, Вы писали:
LN>Здравствуйте, crackoff, Вы писали:
C>>Сообщения дереву TVM_, в частности TVM_GETNEXTITEM и функция SetFocus должны помочь
LN>Спасибо, это уже ближе к делу, но что я не так деляю: LN>
> Надо пользовать VirtualAlloc, чтобы выделить память в другом приложении!!! >
Нет, нужно внедрить в чужое приложение свою DLL'ку (так как у каждого процесса своё адресное пространство), которая уже будет общаться с приложением!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Здравствуйте, Stanky, Вы писали:
S>Нет, нужно внедрить в чужое приложение свою DLL'ку (так как у каждого процесса своё адресное пространство), которая уже будет общаться с приложением!!!
> Ужас какой-то... >
На самом деле всё довольно просто!!!
> Хоть примерно, как это делается? >
Что это?
Про внедрение своей DLL'ки в чужой процесс читать Рихтера!!! Если есть более конкретные вопросы, спрашивай!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Ну, насчет внедрения dll это перебор.
Но повозиться придется.
Все передаваемые с сообщением структуры нужно выделить во вражеском процессе с помощью функций VirtualAllocEx, заполнить с помощью функций WriteProcessMemory, не забыть корректно расставить указатели. Результаты забирать с помощью ReadProcessMemory и не забывать про VirtualFreeEx. Стремно, конечно, первый раз, но при должной сноровке получается довольно просто.
Да, вражеский процесс нужно открывать с параметрами PROCESS_VM_WRITE|PROCESS_VM_READ|PROCESS_VM_OPERATION.
Здравствуйте, Ury, Вы писали:
Ury>Ну, насчет внедрения dll это перебор. Ury>Но повозиться придется. Ury>Все передаваемые с сообщением структуры нужно выделить во вражеском процессе с помощью функций VirtualAllocEx, заполнить с помощью функций WriteProcessMemory, не забыть корректно расставить указатели. Результаты забирать с помощью ReadProcessMemory и не забывать про VirtualFreeEx. Стремно, конечно, первый раз, но при должной сноровке получается довольно просто. Ury>Да, вражеский процесс нужно открывать с параметрами PROCESS_VM_WRITE|PROCESS_VM_READ|PROCESS_VM_OPERATION.
ИМХО: больше проблем будет при выделении всех нужных структур...
Внедрение ДЛЛ — проще, поскоку сам "рабочий" код (код в длл) — будет прозрачным.