You are not logged in.
Привет всем. Два довольно нетематических для форума вопроса...
1. Есть процесс, есть другой процесс, есть dll библиотека, которая инжектится во второй процесс. Эта библиотека выполняет какой-либо функционал и должна как-то доложить первому процессу о чем-либо. Попробовал так: объявить какие-либо поля с данными, которые надо передать в первый процесс, как поля dllexport, чтобы потом из первого процесса, просканировав второй процесс и найдя dll, делать ReadMemoryEx. ИМХО, немного неправильно экспортировать из dll не функции, а данные.
Что делает эта dll: хукает 1-6 winapi функций, такие как CreateWindow и тд. Я думал на тему других методов, но ничего дельного не придумал. Предлагайте варианты, если есть идеи.
2. Как в Windows (хотя бы в семерке или восьмерке где другая звуковая система, по сравнению с XP) можно писать звук определенного процесса? Я делаю довольно кривым методом, но рабочим: создается виртуальное устройство с помощью Virtual Audio Cable, в настройках подопытной программы ставлю использование этого устройства (и микрофон и динамик), пишу с этого устройства в моей проге с помощью библиотеки bass и потом свожу звук с микрофона и динамика с помощью микшера (опять-таки из bass). Примерно как-то так.
У меня были идеи хукать интерфейс IAudioRenderClient отдельного процесса (точнее я где-то читал, что кто-то, хукнув его и далее, использовав его GetBuffer метод, мог писать звук отдельного процесса), но у меня нет идей и знаний по хуку интерфейсов.
Есть еще идея писать небольшой драйвер устройства, который будет представлять собой устройство, в которое будет пропускать через себя звук подопытной программы (принцип тот же, что у Virtual Audio Cable, только без использования сторонних программ). Либо написать драйвер-фильтр, который будет как-то писать звук нужной программы.
Опыт написания драйверов ограничивается переделкой example'ов от майкрософта, поэтому я не шарю в этом всем, если есть опытные люди, прошу помочь.
Last edited by Jack Daniel's (24-08-2013 16:58)
Offline
По забавному совпадению я сегодня читал один интересный блог, посвященный программированию на языке Delphi (понял для себя, что не все так плохо на самом деле, особенно с выходом последних версий Delphi XE1-4). Начал чтение как раз с цикла статей, посвященных созданию системы плагинов
http://www.gunsmoker.ru/2013/04/plugins-9.html
Но суть поста в другом. В этом блоге была одна интересная заметка
Сага о X, Y и Z...
Рекомендую прочитать) Вот, чтобы не получилось, как в той заметке, что мы будем обсуждать Y вместо Z, задам уточняющий вопрос по первому пункту
Один из процессов чужой? Т.е. мы не имеем его исходников? Если все-таки оба процесса "наши" и надо построить систему обмена данными между ними, возможно есть смысл посмотреть цикл статей по первой ссылке.
Offline
Большое спасибо за ссылки, сегодня прочту. прочитал пару статеек, очень много хороших советов и хитростей (например, про DllMain).
Да, второй процесс чужой, сорцов нет. Второй процесс - процесс Skype. Пишу небольшой рекордер звонков для него. Dll детектит начало звонка, первый процесс, получая данные о том, что звонок начался, начинает писать звук, получает окончание звонка - прекращает писать и сохраняет все это дело.
По-началу я использовал Skype API - библиотеку Skype4COM.dll, которая подключается к проекту и далее можно легко взаимодействовать со скайпом, только этот API прекратит работать в 2014 году.
P.S Нет, это не будет вирус-ворующий-звонки) Начал писать из-за объявления на фрилансе, но заказчику утилита оказалсь уже не нужна, но ради интереса продолжил пилить.
Last edited by Jack Daniel's (25-08-2013 17:58)
Offline
Первый вопрос, похоже, решился. Кому интересно:
MSDN
WIKI
Я попробовал Mail Slot, но для отправки пары флажков и потом, возможно, строк, как-то многовато действий + не очень удобно. Потом попробовал Shared Memory (это когда процессы используют выделенную одним из них общую память), этот способ больше понравился. А Windows Sockets, как и Mail Slot, слишком громоздкое решение.
Last edited by Jack Daniel's (25-08-2013 18:00)
Offline