[310] | 1 | //////////////////////////////////////////////////////////// |
---|
| 2 | // Copyright (C) Roman Ryltsov, 2008-2014 |
---|
| 3 | // Created by Roman Ryltsov roman@alax.info, http://alax.info |
---|
| 4 | // |
---|
| 5 | // This source code is published to complement DirectShowSpy developer powertoy |
---|
| 6 | // and demonstrate the internal use of APIs and tricks powering the tool. It is |
---|
| 7 | // allowed to freely re-use the portions of the code in other projects, commercial |
---|
| 8 | // or otherwise (provided that you dont pretend that you wrote the original tool). |
---|
| 9 | // |
---|
| 10 | // Please keep in mind that DirectShowSpy is a developer tool, it is strongly recommended |
---|
| 11 | // that it is not shipped with release grade software. It is allowed to distribute |
---|
| 12 | // DirectShowSpy if only it is not registered with Windows by default and either |
---|
| 13 | // used privately, or registered on specific throubleshooting request. The advice applies |
---|
| 14 | // to hooking methods used by DirectShowSpy in general as well. |
---|
| 15 | |
---|
| 16 | import "oaidl.idl"; |
---|
| 17 | import "ocidl.idl"; |
---|
| 18 | |
---|
| 19 | [ |
---|
| 20 | object, |
---|
| 21 | uuid(968E0597-E713-4EF5-A6F3-780B816204C2), |
---|
| 22 | dual, |
---|
| 23 | oleautomation, |
---|
| 24 | nonextensible, |
---|
| 25 | helpstring("IModuleVersionInformation Interface"), |
---|
| 26 | pointer_default(unique) |
---|
| 27 | ] |
---|
| 28 | interface IModuleVersionInformation : IDispatch |
---|
| 29 | { |
---|
| 30 | [id(1), propget] HRESULT Path([out, retval] BSTR* psPath); |
---|
| 31 | [id(2), propget] HRESULT FileVersion([out, retval] LONGLONG* pnFileVersion); |
---|
| 32 | [id(3), propget] HRESULT FileVersionString([out, retval] BSTR* psFileVersionString); |
---|
| 33 | }; |
---|
| 34 | [ |
---|
| 35 | object, |
---|
| 36 | uuid(6945711B-FE0F-4C54-965F-5B67969C28B7), |
---|
| 37 | dual, |
---|
| 38 | oleautomation, |
---|
| 39 | nonextensible, |
---|
| 40 | helpstring("ISpy Interface"), |
---|
| 41 | pointer_default(unique) |
---|
| 42 | ] |
---|
| 43 | interface ISpy : IDispatch |
---|
| 44 | { |
---|
| 45 | [id(1), propget] HRESULT MonikerDisplayName([out, retval] BSTR* psMonikerDisplayName); |
---|
| 46 | [id(2), propget] HRESULT CreationTime([out, retval] DATE* pfTime); |
---|
| 47 | [id(3), propget] HRESULT FriendlyName([out, retval] BSTR* psFriendlyName); |
---|
| 48 | [id(3), propput] HRESULT FriendlyName([in] BSTR sFriendlyName); |
---|
| 49 | [id(4)] HRESULT DoPropertyFrameModal([in] LONG nParentWindowHandle); |
---|
| 50 | [id(5)] HRESULT DoFilterGraphListModal([in] LONG nParentWindowHandle); |
---|
| 51 | [id(6)] HRESULT OpenGraphStudioNext([in] LONG nParentWindowHandle, [out, retval] VARIANT_BOOL* pbResult); |
---|
| 52 | [id(7)] HRESULT OpenGraphEdit([in] LONG nParentWindowHandle, [out, retval] VARIANT_BOOL* pbResult); |
---|
| 53 | [id(8)] HRESULT ReadRunPropertyBag([in] IUnknown* pBaseFilterUnknown, [in] VARIANT_BOOL bAllowExtension, [out, retval] VARIANT* pvValue); |
---|
| 54 | }; |
---|
| 55 | [ |
---|
| 56 | object, |
---|
[322] | 57 | uuid(E59EED72-E94A-44D9-8C1F-6535A4C1D6C9), |
---|
| 58 | dual, |
---|
| 59 | oleautomation, |
---|
| 60 | nonextensible, |
---|
| 61 | helpstring("IFilterGraphMemoryAllocatorData Interface"), |
---|
| 62 | pointer_default(unique) |
---|
| 63 | ] |
---|
| 64 | interface IFilterGraphMemoryAllocatorData : IDispatch |
---|
| 65 | { |
---|
| 66 | [id(DISPID_VALUE), propget] HRESULT Value([out, retval] VARIANT* pvValue); |
---|
| 67 | }; |
---|
| 68 | [ |
---|
| 69 | object, |
---|
[310] | 70 | uuid(A7490000-3A5D-455D-9B81-2025B74CD4CD), |
---|
| 71 | nonextensible, |
---|
| 72 | helpstring("ISpyEx Interface"), |
---|
| 73 | pointer_default(unique) |
---|
| 74 | ] |
---|
| 75 | interface ISpyEx : IUnknown |
---|
| 76 | { |
---|
| 77 | }; |
---|
| 78 | [ |
---|
| 79 | object, |
---|
| 80 | uuid(34B280D7-A144-4a64-BCB9-3616896F6877), |
---|
| 81 | dual, |
---|
| 82 | oleautomation, |
---|
| 83 | nonextensible, |
---|
| 84 | helpstring("IFilterMapperSpy Interface"), |
---|
| 85 | pointer_default(unique) |
---|
| 86 | ] |
---|
| 87 | interface IFilterMapperSpy : IDispatch |
---|
| 88 | { |
---|
| 89 | }; |
---|
| 90 | [ |
---|
| 91 | object, |
---|
| 92 | uuid(14EB119F-25CE-4654-ABE1-E6742AF03F2D), |
---|
| 93 | dual, |
---|
| 94 | oleautomation, |
---|
| 95 | nonextensible, |
---|
| 96 | helpstring("ISystemDeviceEnumeratorSpy Interface"), |
---|
| 97 | pointer_default(unique) |
---|
| 98 | ] |
---|
| 99 | interface ISystemDeviceEnumeratorSpy : IDispatch |
---|
| 100 | { |
---|
| 101 | }; |
---|
| 102 | [ |
---|
| 103 | object, |
---|
| 104 | uuid(3D1AF248-DEF1-4E26-A071-FEDF15FED6A8), |
---|
| 105 | dual, |
---|
| 106 | oleautomation, |
---|
| 107 | nonextensible, |
---|
| 108 | helpstring("IFilterGraphHelper Interface"), |
---|
| 109 | pointer_default(unique) |
---|
| 110 | ] |
---|
| 111 | interface IFilterGraphHelper : IDispatch |
---|
| 112 | { |
---|
| 113 | [id(DISPID_VALUE), propget] HRESULT FilterGraph([out, retval] IUnknown** ppFilterGraphUnknown); |
---|
| 114 | [id(DISPID_VALUE), propput] HRESULT FilterGraph([in] IUnknown* pFilterGraphUnknown); |
---|
| 115 | [id(1), propget] HRESULT Text([out, retval] BSTR* psText); |
---|
| 116 | [id(2)] HRESULT DoPropertyFrameModal([in] LONG nParentWindowHandle); |
---|
| 117 | [id(3)] HRESULT DoFilterGraphListModal([in] LONG nParentWindowHandle); |
---|
| 118 | [id(4)] HRESULT OpenGraphStudioNext([in] LONG nParentWindowHandle, [in] BSTR sMonikerDisplayName, [out, retval] VARIANT_BOOL* pbResult); |
---|
| 119 | [id(5)] HRESULT OpenGraphEdit([in] LONG nParentWindowHandle, [in] BSTR sMonikerDisplayName, [out, retval] VARIANT_BOOL* pbResult); |
---|
| 120 | }; |
---|
| 121 | [ |
---|
| 122 | uuid(B9EC374B-834B-4DA9-BFB5-C1872CE736FF), |
---|
| 123 | version(1.0), |
---|
| 124 | helpstring("Alax.Info Filter Graph Spy 1.0 Type Library") |
---|
| 125 | ] |
---|
| 126 | library AlaxInfoDirectShowSpy |
---|
| 127 | { |
---|
| 128 | importlib("stdole2.tlb"); |
---|
| 129 | [ |
---|
| 130 | object, |
---|
| 131 | uuid(ACBECDFD-D8CA-49c8-B799-D23225D5BFAD), |
---|
| 132 | nonextensible, |
---|
| 133 | helpstring("IFilterGraphAddRemoveHook Interface"), |
---|
| 134 | pointer_default(unique) |
---|
| 135 | ] |
---|
| 136 | interface IFilterGraphAddRemoveHook : IUnknown |
---|
| 137 | { |
---|
| 138 | HRESULT OnAddFilter([in] ISpy* pSpy, [in] IUnknown* pBaseFilterUnknown, [in] LPCWSTR pszName, [in, out] BOOL* pbDefault); |
---|
| 139 | HRESULT OnRemoveFilter([in] ISpy* pSpy, [in] IUnknown* pBaseFilterUnknown, [in, out] BOOL* pbDefault); |
---|
| 140 | HRESULT OnAddSourceFilter([in] ISpy* pSpy, [in] LPCWSTR pszFileName, [in] LPCWSTR pszFilterName, [out] IUnknown** ppBaseFilterUnknown, [in, out] BOOL* pbDefault); |
---|
| 141 | HRESULT OnAddSourceFilterForMoniker([in] ISpy* pSpy, [in] IUnknown* pMonikerUnknown, [in] IUnknown* pBindCtxUnknown, [in] LPCWSTR pszFilterName, [out] IUnknown** ppBaseFilterUnknown, [in, out] BOOL* pbDefault); |
---|
| 142 | }; |
---|
| 143 | [ |
---|
| 144 | object, |
---|
| 145 | uuid(D0F4C168-D09D-481e-903D-7461CE69E391), |
---|
| 146 | nonextensible, |
---|
| 147 | helpstring("IFilterGraphConnectHook Interface"), |
---|
| 148 | pointer_default(unique) |
---|
| 149 | ] |
---|
| 150 | interface IFilterGraphConnectHook : IUnknown |
---|
| 151 | { |
---|
| 152 | HRESULT OnConnectDirect([in] ISpy* pSpy, [in] IUnknown* pOutputPinUnknown, [in] IUnknown* pInputPinUnknown, [in] const BYTE* pMediaTypeData, [in, out] BOOL* pbDefault); |
---|
| 153 | HRESULT OnReconnect([in] ISpy* pSpy, [in] IUnknown* pPinUnknown, [in, out] BOOL* pbDefault); |
---|
| 154 | HRESULT OnDisconnect([in] ISpy* pSpy, [in] IUnknown* pPinUnknown, [in, out] BOOL* pbDefault); |
---|
| 155 | HRESULT OnConnect([in] ISpy* pSpy, [in] IUnknown* pOutputPinUnknown, [in] IUnknown* pInputPinUnknown, [in, out] BOOL* pbDefault); |
---|
| 156 | HRESULT OnReconnectEx([in] ISpy* pSpy, [in] IUnknown* pPinUnknown, [in] const BYTE* pMediaTypeData, [in, out] BOOL* pbDefault); |
---|
| 157 | }; |
---|
| 158 | [ |
---|
| 159 | object, |
---|
| 160 | uuid(65FA1519-A935-4fa9-A15D-9426457E02F6), |
---|
| 161 | nonextensible, |
---|
| 162 | helpstring("IFilterGraphStateControlHook Interface"), |
---|
| 163 | pointer_default(unique) |
---|
| 164 | ] |
---|
| 165 | interface IFilterGraphStateControlHook : IUnknown |
---|
| 166 | { |
---|
| 167 | HRESULT OnRun([in] ISpy* pSpy, [in, out] BOOL* pbDefault); |
---|
| 168 | HRESULT OnPause([in] ISpy* pSpy, [in, out] BOOL* pbDefault); |
---|
| 169 | HRESULT OnStop([in] ISpy* pSpy, [in, out] BOOL* pbDefault); |
---|
| 170 | }; |
---|
| 171 | [ |
---|
| 172 | uuid(F552C23D-F088-41C3-A080-8464D7BB9BAD), |
---|
| 173 | helpstring("Spy Class") |
---|
| 174 | ] |
---|
| 175 | coclass Spy |
---|
| 176 | { |
---|
| 177 | [default] interface ISpy; |
---|
| 178 | //interface ISpyEx; |
---|
| 179 | interface IModuleVersionInformation; |
---|
[322] | 180 | interface IFilterGraphMemoryAllocatorData; |
---|
[310] | 181 | }; |
---|
| 182 | [ |
---|
| 183 | uuid(2C281C40-8853-4a30-99D3-9DCFF2C015C9), |
---|
| 184 | helpstring("NoThreadSpy Class") |
---|
| 185 | ] |
---|
| 186 | coclass NoThreadSpy |
---|
| 187 | { |
---|
| 188 | [default] interface ISpy; |
---|
| 189 | //interface ISpyEx; |
---|
| 190 | interface IModuleVersionInformation; |
---|
[322] | 191 | interface IFilterGraphMemoryAllocatorData; |
---|
[310] | 192 | }; |
---|
| 193 | [ |
---|
| 194 | uuid(B6274D9B-1AD3-4c32-83C5-35DC33CAFF47), |
---|
| 195 | helpstring("FilterMapperSpy Class") |
---|
| 196 | ] |
---|
| 197 | coclass FilterMapperSpy |
---|
| 198 | { |
---|
| 199 | [default] interface IFilterMapperSpy; |
---|
| 200 | }; |
---|
| 201 | [ |
---|
| 202 | uuid(AD42E3BD-7B9B-4783-9DA2-61A9ACD0D4D2), |
---|
| 203 | helpstring("SystemDeviceEnumeratorSpy Class") |
---|
| 204 | ] |
---|
| 205 | coclass SystemDeviceEnumeratorSpy |
---|
| 206 | { |
---|
| 207 | [default] interface ISystemDeviceEnumeratorSpy; |
---|
| 208 | }; |
---|
| 209 | [ |
---|
| 210 | uuid(5A9A684C-A891-4032-8D31-FF6EAB5A0C1E), |
---|
| 211 | helpstring("FilterGraphHelper Class") |
---|
| 212 | ] |
---|
| 213 | coclass FilterGraphHelper |
---|
| 214 | { |
---|
| 215 | [default] interface IFilterGraphHelper; |
---|
| 216 | }; |
---|
| 217 | [ |
---|
| 218 | object, |
---|
| 219 | uuid(E267813C-8F29-4D69-A776-CD462494FCE4), |
---|
| 220 | dual, |
---|
| 221 | oleautomation, |
---|
| 222 | nonextensible, |
---|
| 223 | helpstring("IRunPropertyBagAware Interface"), |
---|
| 224 | pointer_default(unique) |
---|
| 225 | ] |
---|
| 226 | interface IRunPropertyBagAware : IDispatch |
---|
| 227 | { |
---|
| 228 | [propget, id(DISPID_VALUE)] HRESULT Value([out, retval] IUnknown** ppPropertyBagUnknown); |
---|
| 229 | }; |
---|
| 230 | [ |
---|
| 231 | uuid(76127943-D22E-4C4E-9D9B-173C224D0EE4), |
---|
| 232 | helpstring("RunPropertyBagPropertyPage Class") |
---|
| 233 | ] |
---|
| 234 | coclass RunPropertyBagPropertyPage |
---|
| 235 | { |
---|
| 236 | [default] interface IUnknown; //IPropertyPage; |
---|
| 237 | }; |
---|
| 238 | [ |
---|
| 239 | object, |
---|
| 240 | uuid(DA0D924F-1AC0-496D-AE44-CC2BD8CE7CFA), |
---|
| 241 | dual, |
---|
| 242 | oleautomation, |
---|
| 243 | nonextensible, |
---|
| 244 | helpstring("IRunEventAware Interface"), |
---|
| 245 | pointer_default(unique) |
---|
| 246 | ] |
---|
| 247 | interface IRunEventAware : IDispatch |
---|
| 248 | { |
---|
| 249 | [propget, id(DISPID_VALUE)] HRESULT Value([out, retval] VARIANT* pvValue); |
---|
| 250 | [propget, id(1)] HRESULT Capture([out, retval] VARIANT_BOOL* pbCapture); |
---|
| 251 | [propput, id(1)] HRESULT Capture([in] VARIANT_BOOL bCapture); |
---|
| 252 | }; |
---|
| 253 | [ |
---|
| 254 | uuid(AD0E84E9-DE25-4C1A-85A5-47406604E144), |
---|
| 255 | helpstring("RunEventPropertyPage Class") |
---|
| 256 | ] |
---|
| 257 | coclass RunEventPropertyPage |
---|
| 258 | { |
---|
| 259 | [default] interface IUnknown; //IPropertyPage; |
---|
| 260 | }; |
---|
| 261 | }; |
---|