Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> узнать смотрит ли юзер видео или слушает аудио, не стоит ли на паузе 
:(
    Опции темы
fakefreak
Дата 25.6.2009, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(xvr @  23.6.2009,  08:55 Найти цитируемый пост)
Цитата

только вот теперь вопрос: как мне узнать загруженные процессом длл, 
См Tool Help API

cпасибо. к винампу подгружен dsound.dll и ещё какой-то in_dshow.dll, на который я решил не обращать внимания. в итоге подробно ознакомился с DirectSound

Цитата(xvr @  23.6.2009,  08:55 Найти цитируемый пост)
DX & DShow работают через COM. Так что перехватывать надо вызовы CoCreateObject с соответствующими UUID
А названия DLL могут меняться

и подробно поразбирался с COM, но возник такой вопрос:

я могу перехватывать только CoCreateObject, направленный системе? то есть после этого создаётся в адресном пространстве процесса объект класса (устройства DirectSound), с которым я уже ничего перехватывать не смогу, так?
потому что мне перехват функции CoCreateObject не нужен - он очевидно вызывается при запуске винампа. но вот например перехват метода Play у объекта класса IDirectSound мне бы и нужен был - это вообще реально его перехватить?
PM MAIL   Вверх
xvr
Дата 25.6.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(fakefreak @ 25.6.2009,  03:24)
я могу перехватывать только CoCreateObject, направленный системе? 

Да
Цитата

то есть после этого создаётся в адресном пространстве процесса объект класса (устройства DirectSound), с которым я уже ничего перехватывать не смогу, так?
Нет, не так. Вы можете подменить возвращенный из CoCreateObject указатель на COM объект на свой собственный объект. После чего вызывать будут ваши методы, а уж там вы можете сделать все, что захотите. Главное не забыть перенаправить вызов в оригинальный объект
Цитата

потому что мне перехват функции CoCreateObject не нужен - он очевидно вызывается при запуске винампа. 
Нужно отловить факт создания объекта с интерфейсом IDirectSound, это делается при вызове CoCreateObject анализом GUID'ов интерфейса и класса
Цитата

но вот например перехват метода Play у объекта класса IDirectSound мне бы и нужен был - это вообще реально его перехватить?
Можно, но сложно. Просто создания IDirectSound не достаточно?

PM MAIL   Вверх
fakefreak
Дата 25.6.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Спасибо, xvr. Вроде теперь всё понятно и очень интересно. Думаю вопросы ещё появятся, буду задавать. =)
PM MAIL   Вверх
fakefreak
Дата 26.6.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



так.. :( ничего не понимаю с функцией CoCreateObject - может немного не то написали? есть подходящие по смыслу CoCreateInstance и CoGetClassObject, но про CoCreateObject инфы практически нету. вот нашёл, что "The CoCreateObject function only applies to InstallScript projects.", но причём здесь InstallScript и InstallShield ума не приложу о_О
PM MAIL   Вверх
Andrew121
Дата 26.6.2009, 04:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



fakefreak, Что значит нет?!!!
Вот: http://social.msdn.microsoft.com/Search/en...Object&ac=8
Просвещайся smile 
PM MAIL   Вверх
fakefreak
Дата 26.6.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(Andrew121 @  26.6.2009,  04:54 Найти цитируемый пост)
fakefreak, Что значит нет?!!!
Вот: http://social.msdn.microsoft.com/Search/en...Object&ac=8
Просвещайся smile  

да, на мсдн'е я есессно искал уже, но после этого ещё детально с каждой ссылкой ознакомился.
в паре случаев что-то совершенно несущественное, пара ссылок пустых, а в остальных только лишь:
Код

StackTrace:
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
   at System.EnterpriseServices.Thunk.Proxy.CoCreateObject(Type serverType, Boolean bQuerySCInfo, Boolean& bIsAnot


к примеру по CoCreateInstance есть полное описание функции, как и всех системных, но к этой почему-то нет совершенно никакой инфы - первый раз с таким сталкиваюсь.

ладно, я наверное вам уже надоел своими глупыми вопросами.. даже как-то смущаюсь.. =)
PM MAIL   Вверх
xvr
Дата 27.6.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(fakefreak @ 26.6.2009,  01:12)
так.. :( ничего не понимаю с функцией CoCreateObject - может немного не то написали? 

Не то, оно называется CoCreateInstance
Цитата

есть подходящие по смыслу CoCreateInstance и CoGetClassObject, 
Угу, надо перехватывать их обе, и еще CoCreateInstanceEx и OleCreate* серию. А еще (в теории) серию CoGetInstanceFrom* функций
Возможно есть еще функции, которыми можно создавать COM объекты



PM MAIL   Вверх
fakefreak
Дата 28.6.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



из функций
Код

[ole32.dll]
    CoCreateInstance ,5
    CoCreateInstanceEx ,6
    CoGetClassObject ,5
    OleCreate ,7
    OleCreateDefaultHandler ,4
    OleCreateEmbeddingHelper ,6
    OleCreateEx ,12
    OleCreateFromData ,7
    OleCreateFromDataEx ,12
    OleCreateFromFile ,8
    OleCreateFromFileEx ,13
    OleCreateLink ,7
    OleCreateLinkEx ,12
    OleCreateLinkFromData ,7
    OleCreateLinkFromDataEx ,12
    OleCreateLinkToFile ,7
    OleCreateLinkToFileEx ,12
    OleCreateMenuDescriptor ,2
    OleCreateStaticFromData ,7
    CoGetInstanceFromFile ,8
    CoGetInstanceFromIStorage ,7
    OleInitialize ,1
[dsound.dll]
    DirectSoundCaptureCreate ,3
    DirectSoundCaptureCreate8 ,3
    DirectSoundCreate ,3
    DirectSoundCreate8 ,3
    DllGetClassObject ,3

вызываются только
Код

откуда вызов:|
winamp.exe   | 00410FE4 | OleInitialize(00000000) returns: 00000000
pmp_activesy | 041346A4 | CoCreateInstance(04135704, 00000000, 00000001, 041356E4, 0413607C) returns: 80040154
pmp_njb.dll  | 041514FD | OleInitialize(00000000) returns: 00000001
pmp_njb.dll  | 04151515 | CoCreateInstance(04154128, 00000000, 00000007, 04154118, 04155068) returns: 80040154
pmp_p4s.dll  | 0416163E | CoCreateInstance(041744A0, 00000000, 00000017, 04174470, 0477FF9C) returns: 00000000
MSWMDM.dll   | 08DDFFDE | CoCreateInstance(00AEC9F4, 00000000, 00000001, 08DD1AA8, 0487FB60) returns: 00000000
MsPMSP.dll   | 08D703E0 | CoCreateInstance(08D63DD0, 00000000, 00000001, 08D63DB0, 0487FA70) returns: 00000000
in_wm.dll    | 1351386B | DirectSoundCreate(00000000, 13544B2C, 00000000) returns: 00000000


в общем довольно странно пока что для меня. непонятно, буду разбираться..

Это сообщение отредактировал(а) fakefreak - 28.6.2009, 07:14
PM MAIL   Вверх
xvr
Дата 28.6.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(fakefreak @ 28.6.2009,  00:23)
вызываются только
Код

откуда вызов:|
winamp.exe   | 00410FE4 | OleInitialize(00000000) returns: 00000000
pmp_activesy | 041346A4 | CoCreateInstance(04135704, 00000000, 00000001, 041356E4, 0413607C) returns: 80040154
pmp_njb.dll  | 041514FD | OleInitialize(00000000) returns: 00000001
pmp_njb.dll  | 04151515 | CoCreateInstance(04154128, 00000000, 00000007, 04154118, 04155068) returns: 80040154
pmp_p4s.dll  | 0416163E | CoCreateInstance(041744A0, 00000000, 00000017, 04174470, 0477FF9C) returns: 00000000
MSWMDM.dll   | 08DDFFDE | CoCreateInstance(00AEC9F4, 00000000, 00000001, 08DD1AA8, 0487FB60) returns: 00000000
MsPMSP.dll   | 08D703E0 | CoCreateInstance(08D63DD0, 00000000, 00000001, 08D63DB0, 0487FA70) returns: 00000000
in_wm.dll    | 1351386B | DirectSoundCreate(00000000, 13544B2C, 00000000) returns: 00000000


в общем довольно странно пока что для меня. непонятно, буду разбираться..

Вполне нормальный набор. Надо контролировать, что передается в первых 2х параметрах CoCreateInstance
Но есть подводный камень - в том же WinAmp'е вывод (равно как и все остальное) делается через PlugIn'ы, и для вывода есть 3 штуки: DS, Wave, Disk. Так что DS может быть и не задействован вообще.
Мне представляется, что нужно контролировать первоисточник, т.е. звуковую карту. Проверить настройки звукового mixer'а, включить capture звука (предварительно настроив mixer), и проанализировать звук - если там есть что то, большее уровня шумов в течении как минимум нескольких секунд, значит в колонках что то звучит  smile 

PM MAIL   Вверх
fakefreak
Дата 29.6.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(xvr @  28.6.2009,  17:44 Найти цитируемый пост)
Мне представляется, что нужно контролировать первоисточник, т.е. звуковую карту. Проверить настройки звукового mixer'а, включить capture звука (предварительно настроив mixer), и проанализировать звук - если там есть что то, большее уровня шумов в течении как минимум нескольких секунд, значит в колонках что то звучит  smile 

а с помощью чего это делать? то есть подскажите куда копать нужно, кто такие функции предоставляет. апи виндовс? win32 или native? или directx? в принципе идея хороша, но что будет, если пользователь в трее на значке динамика в винде выключит звук? - на звуковой карте будут одни шумы?
ps  а у меня уже перехват cocreateinstance заработал - теперь вроде как и не нужен =\

Это сообщение отредактировал(а) fakefreak - 30.6.2009, 00:06
PM MAIL   Вверх
xvr
Дата 30.6.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(fakefreak @ 29.6.2009,  23:45)
а с помощью чего это делать? то есть подскажите куда копать нужно, кто такие функции предоставляет. 

В API есть набор функций waveIn* и mixer* (в mmsystem.h) Через DirectSound тоже можно
(см в прикрепленном файле пример ввода через waveIn - ввод используется для оцифровки шумов карты, для получения случайных значений для генератора случайных чисел)
Цитата

в принципе идея хороша, но что будет, если пользователь в трее на значке динамика в винде выключит звук? - на звуковой карте будут одни шумы?
Да, но и пользователь никакой музыки при этом не услышит. Можно мониторить все настройки микшера, и определять, что пользователь сейчас с ними делает. Кроме того, вход захвата можно подключать непосредственно к источникам сигнала (насколько позволит звуковая карта), в таком случае пользователь может хоть наобключаться динамиком - это ни на что влиять не будет  smile 


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  sndinp.zip 3,18 Kb
PM MAIL   Вверх
fakefreak
Дата 2.7.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(xvr @  30.6.2009,  09:34 Найти цитируемый пост)
В API есть набор функций waveIn* и mixer* (в mmsystem.h) Через DirectSound тоже можно
(см в прикрепленном файле пример ввода через waveIn - ввод используется для оцифровки шумов карты, для получения случайных значений для генератора случайных чисел)

спасибо большое. разобрался, начитался.. но есть одно но:
в примере сигнал считывается с микрофона, но вся система mmsystem.h предоставляет только функции записи с устройств линейного входа, микрофона, ещё каких-то неважных.. и функции воспроизведения на устройства линейного выхода, миди, и т.д..
запись мне не нужна, а надо бы узнать что происходит на линейном выходе. но туда можно только воспроизводить буферы, а узнать что на нём происходит нельзя. разве что если на линейный вход может прямиком поступать сигнал с линейного выхода. но в этом я сомневаюсь нехило.
Цитата(xvr @  30.6.2009,  09:34 Найти цитируемый пост)
Кроме того, вход захвата можно подключать непосредственно к источникам сигнала (насколько позволит звуковая карта)

вы это и имели ввиду?

а с DirectSound ещё не разбирался
PM MAIL   Вверх
xvr
Дата 2.7.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Прочтите через mixer к чему подключен выход и подключите туда же канал записи

PM MAIL   Вверх
fakefreak
Дата 19.7.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



извините, но не смог ничего сделать
Цитата(xvr @  2.7.2009,  21:42 Найти цитируемый пост)
Прочтите через mixer к чему подключен выход и подключите туда же канал записи

как это сделать?
нашёл уйму приложений с исходниками, которые записывают. но все они записывают с микрофона - ни одно не записывает с выхода звуки.

как записать средствами winmm.dll звуки, издаваемые компьютером?
помогите пожалуйста чем-нибудь
PM MAIL   Вверх
xvr
Дата 20.7.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Прочесть (перебрать) текущие настройки канала вывода, попробовать найти аналоги в канале ввода и настроить его аналогично
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.