Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14709] Re: 뭔가 착각하고 있나 보네요
리버스엔지니어링 [] 2117 읽음    2013-06-17 01:29
윈도우에서 디폴트 사운드 장치를 선택하는 방법은 제어판을 통한 방법 밖에 없습니다
MS에서 그런 API를 제공했다간 사운드카드 만드는 회사들이 경쟁적으로 자기들 카드를 디폴트 사운드장치로
설정하려는 사태가 벌어지겠죠. 여러 사운드장치 중 하나로 웨이브 데이타가 출력되게 할수는 있어도 시스템 디폴트
사운드장치를 선택해주는 API는 없습니다.

해결 방법은 비스타 이후 COM으로 바뀐 윈도우 오디오 아키텍쳐를 리버스엔지니어링으로 해킹하는 방법 밖에는 없습니다.
COM은 일반적인 API처럼 노출되는게 아니라 해킹하기도 쉽지 않습니다. 그럼에도 불구하고 정 필요하고 패이 조건이 맞으면
리버스엔지니어링으로 해킹해 드릴 수는 있습니다



하두고 님이 쓰신 글 :
: 앞에서 했던 질문인데 시원한 답변이 없어 여기 저기 돌아다니며  찾은 소스코드입니다.
: 아래 소스코드는 피시에 장착된 사운드장치를 나열하는 소스코드인데요.
:
: 아래 소스에서 나열된 사운드장치를 선택하여 더블클릭하면
: 해당 사운드장치가 윈도우 기본 사운드장치로 바뀌게 하고 싶은데요.
:
: 기본 사운드 장치를 바꾸는 방법을 모르겠습니다.
:
: procedure TForm1.EnumAudioDevices;
: var
:   dsCreateDevEnum  : ICreateDevEnum;
:   EnumDevice       : IEnumMoniker;
:   DeviceMoniker    : IMoniker;
:   Data             : Integer;
:   DevicePropBag    : IPropertyBag;
:   DeviceName       : OLEVariant;
: begin
:   If CoCreateInstance(CLSID_SystemDeviceEnum,nil,CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,dsCreateDevEnum) = S_OK then
:   Begin
:     If dsCreateDevEnum.CreateClassEnumerator(CLSID_AudioRendererCategory,EnumDevice,0) = S_OK then
:     Begin
:       EnumDevice.Reset;
:       While EnumDevice.Next(1,DeviceMoniker,@Data) = S_OK do
:       Begin
:         If DeviceMoniker.BindToStorage(nil,nil,IID_IPropertyBag,DevicePropBag) = NOERROR then
:         Begin
:           If DevicePropBag.Read('FriendlyName',DeviceName,nil) = NOERROR then
:              IF Copy(DeviceName, 1, Length('DirectSound')) = 'DirectSound' Then
:                 ListBox1.Items.Add(Copy(DeviceName, Length('DirectSound: ') + 1, Length(DeviceName) - Length('DirectSound: ')));
:           DevicePropBag := nil;
:         End;
:         DeviceMoniker := nil;
:       End;
:       EnumDevice := nil;
:     End;
:     dsCreateDevEnum := nil;
:   End;
: End;

+ -

관련 글 리스트
14707 사운드장치 리스트 소스코드입니다. 여기서 기본 사운드장치 설정 방법 좀 알려주세요. 하두고 2657 2013/06/14
14709     Re: 뭔가 착각하고 있나 보네요 리버스엔지니어링 2117 2013/06/17
14710         Re:Re: 뭔가 착각하고 있나 보네요 하두고 2078 2013/06/17
14711             Re: COM 오브젝트를 인젝션해서 분석해보면 답이 나옴 지나다가 2230 2013/06/19
14712                 Re:Re: COM 오브젝트를 인젝션해서 분석해보면 답이 나옴 2072 2013/06/19
14713                     Re:Re:Re: COM 오브젝트를 인젝션해서 분석해보면 답이 나옴 하두고 1971 2013/06/19
14714                         Re: COM 코드 어셈블러로 작성한 것임 지나다가 2335 2013/06/20
14718                             Re:Re: COM을 어셈블러로 코딩하시다니 헐~ 델파이 2194 2013/06/22
14716                             Re:Re: 인젝션이 안 걸리는데요? 궁금이 1932 2013/06/20
14717                                 Re:Re:Re: 인젝션이 안 걸리는데요? 지나다가 2206 2013/06/20
14715                             Re:Re: 어셈코드 올려서 약올리는거 같아서 ... Lyn 2221 2013/06/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.