Changeset 617


Ignore:
Timestamp:
Apr 17, 2016, 8:30:44 AM (8 years ago)
Author:
roman
Message:

Exported function signatures replaced to accurately rundll32 compatible; added IModuleVersionInformation implementation to FilterGraphHelper?; added debug Host01 project; IFilterGraphHelper interface is extended with MediaSampleTrace? related automation methods; MediaSampleTrace? UI is extended to support data load from external file

Location:
trunk/DirectShowSpy
Files:
5 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/DirectShowSpy/Common.h

    r569 r617  
    632632};
    633633
     634#if defined(DIRECTSHOWSPY)
     635
     636        ////////////////////////////////////////////////////////////
     637        // CModuleVersionInformationT
     638
     639        template <typename T>
     640        class ATL_NO_VTABLE CModuleVersionInformationT :
     641                public IDispatchImpl<IModuleVersionInformation>
     642        {
     643        public:
     644        // CModuleVersionInformationT
     645
     646        // IModuleVersionInformation
     647                STDMETHOD(get_Path)(BSTR* psPath) override
     648                {
     649                        _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), static_cast<T*>(this));
     650                        _ATLTRY
     651                        {
     652                                __D(psPath, E_POINTER);
     653                                *psPath = CComBSTR(_VersionInfoHelper::GetModulePath()).Detach();
     654                        }
     655                        _ATLCATCH(Exception)
     656                        {
     657                                _C(Exception);
     658                        }
     659                        return S_OK;
     660                }
     661                STDMETHOD(get_FileVersion)(LONGLONG* pnFileVersion) override
     662                {
     663                        _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), static_cast<T*>(this));
     664                        _ATLTRY
     665                        {
     666                                __D(pnFileVersion, E_POINTER);
     667                                *pnFileVersion = (LONGLONG) _VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath());
     668                        }
     669                        _ATLCATCH(Exception)
     670                        {
     671                                _C(Exception);
     672                        }
     673                        return S_OK;
     674                }
     675                STDMETHOD(get_FileVersionString)(BSTR* psFileVersionString) override
     676                {
     677                        _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), static_cast<T*>(this));
     678                        _ATLTRY
     679                        {
     680                                __D(psFileVersionString, E_POINTER);
     681                                *psFileVersionString = CComBSTR(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath()))).Detach();
     682                        }
     683                        _ATLCATCH(Exception)
     684                        {
     685                                _C(Exception);
     686                        }
     687                        return S_OK;
     688                }
     689        };
     690
     691#endif // defined(DIRECTSHOWSPY)
     692
    634693////////////////////////////////////////////////////////////
    635694// DIRECTSHOWSPY_NAMESPACE_PREFIX
  • trunk/DirectShowSpy/Configuration.cpp

    r432 r617  
    2626        extern "C" __declspec(dllexport)
    2727#else
    28         #pragma comment(linker, "/EXPORT:UnregisterTreatAsClasses=_UnregisterTreatAsClasses@0,PRIVATE")
     28        #pragma comment(linker, "/EXPORT:UnregisterTreatAsClasses=_UnregisterTreatAsClasses@16,PRIVATE")
    2929        extern "C" // __declspec(dllexport)
    3030#endif // defined(_WIN64)
    3131
    32 HRESULT STDMETHODCALLTYPE UnregisterTreatAsClasses() throw()
     32HRESULT STDMETHODCALLTYPE UnregisterTreatAsClasses(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    3333{
     34        hParentWindow; pszCommandLine; nShowCommand;
    3435        _ATLTRY
    3536        {
     
    9798        extern "C" __declspec(dllexport)
    9899#else
    99         #pragma comment(linker, "/EXPORT:DoRegistrationPropertySheetModal=_DoRegistrationPropertySheetModal@0,PRIVATE")
     100        #pragma comment(linker, "/EXPORT:DoRegistrationPropertySheetModal=_DoRegistrationPropertySheetModal@16,PRIVATE")
    100101        extern "C" // __declspec(dllexport)
    101102#endif // defined(_WIN64)
    102103
    103 HRESULT STDMETHODCALLTYPE DoRegistrationPropertySheetModal() throw()
     104HRESULT STDMETHODCALLTYPE DoRegistrationPropertySheetModal(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    104105{
     106        hParentWindow; pszCommandLine; nShowCommand;
    105107        _ATLTRY
    106108        {
  • trunk/DirectShowSpy/DirectShowSpy.sln

    r438 r617  
    22Microsoft Visual Studio Solution File, Format Version 12.00
    33# Visual Studio 2013
     4VisualStudioVersion = 12.0.40629.0
     5MinimumVisualStudioVersion = 10.0.40219.1
    46Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectShowSpy", "DirectShowSpy.vcxproj", "{1A5DA4E5-ED09-476A-9A42-538D0DDA3FB9}"
    57EndProject
    68Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectShowSpyPS", "DirectShowSpyPS.vcxproj", "{E0A3323D-478E-4046-909A-AD12AD399A68}"
     9EndProject
     10Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Host01", "Host01\Host01.vcxproj", "{02A667BA-1492-4BDD-88A4-819AB1CA351B}"
     11        ProjectSection(ProjectDependencies) = postProject
     12                {1A5DA4E5-ED09-476A-9A42-538D0DDA3FB9} = {1A5DA4E5-ED09-476A-9A42-538D0DDA3FB9}
     13        EndProjectSection
    714EndProject
    815Global
     
    3239                {E0A3323D-478E-4046-909A-AD12AD399A68}.Release|Win32.ActiveCfg = Release|Win32
    3340                {E0A3323D-478E-4046-909A-AD12AD399A68}.Release|x64.ActiveCfg = Release|Win32
     41                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Debug|Win32.ActiveCfg = Debug|Win32
     42                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Debug|Win32.Build.0 = Debug|Win32
     43                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Debug|x64.ActiveCfg = Debug|x64
     44                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Debug|x64.Build.0 = Debug|x64
     45                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release Trace|Win32.ActiveCfg = Release|Win32
     46                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release Trace|Win32.Build.0 = Release|Win32
     47                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release Trace|x64.ActiveCfg = Release|x64
     48                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release Trace|x64.Build.0 = Release|x64
     49                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release|Win32.ActiveCfg = Release|Win32
     50                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release|Win32.Build.0 = Release|Win32
     51                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release|x64.ActiveCfg = Release|x64
     52                {02A667BA-1492-4BDD-88A4-819AB1CA351B}.Release|x64.Build.0 = Release|x64
    3453        EndGlobalSection
    3554        GlobalSection(SolutionProperties) = preSolution
  • trunk/DirectShowSpy/FilterGraphHelper.h

    r440 r617  
    2929HRESULT FilterGraphHelper_OpenGraphStudioNext(LONG nParentWindowHandle, LPCWSTR pszMonikerDisplayName, VARIANT_BOOL* pbResult);
    3030HRESULT FilterGraphHelper_OpenGraphEdit(LONG nParentWindowHandle, LPCWSTR pszMonikerDisplayName, VARIANT_BOOL* pbResult);
     31
     32VOID MediaSampleTrace_Reset(DWORD nProcessIdentifier);
     33CString MediaSampleTrace_Get(DWORD nProcessIdentifier);
     34CComPtr<IUnknown> MediaSampleTrace_Lock();
    3135
    3236////////////////////////////////////////////////////////////
     
    464468        public CComCoClass<CFilterGraphHelper, &__uuidof(FilterGraphHelper)>,
    465469        public IProvideClassInfo2Impl<&__uuidof(FilterGraphHelper), &IID_NULL>,
    466         public IDispatchImpl<IFilterGraphHelper>
     470        public IDispatchImpl<IFilterGraphHelper>,
     471        public CModuleVersionInformationT<CFilterGraphHelper>
    467472{
    468473public:
     
    472477
    473478BEGIN_COM_MAP(CFilterGraphHelper)
    474         COM_INTERFACE_ENTRY(IFilterGraphHelper)
    475         COM_INTERFACE_ENTRY(IDispatch)
    476479        COM_INTERFACE_ENTRY(IProvideClassInfo2)
    477480        COM_INTERFACE_ENTRY(IProvideClassInfo)
     481        COM_INTERFACE_ENTRY(IFilterGraphHelper)
     482        COM_INTERFACE_ENTRY_IID(__uuidof(IDispatch), IFilterGraphHelper)
     483        COM_INTERFACE_ENTRY(IModuleVersionInformation)
    478484END_COM_MAP()
    479485
     
    37523758
    37533759// IFilterGraphHelper
    3754         STDMETHOD(get_FilterGraph)(IUnknown** ppFilterGraphUnknown)
     3760        STDMETHOD(get_FilterGraph)(IUnknown** ppFilterGraphUnknown) override
    37553761        {
    37563762                _Z4(atlTraceCOM, 4, _T("...\n"));
     
    37663772                return S_OK;
    37673773        }
    3768         STDMETHOD(put_FilterGraph)(IUnknown* pFilterGraphUnknown)
     3774        STDMETHOD(put_FilterGraph)(IUnknown* pFilterGraphUnknown) override
    37693775        {
    37703776                _Z4(atlTraceCOM, 4, _T("pFilterGraphUnknown 0x%p\n"), pFilterGraphUnknown);
     
    37803786                return S_OK;
    37813787        }
    3782         STDMETHOD(get_Text)(BSTR* psText)
     3788        STDMETHOD(get_Text)(BSTR* psText) override
    37833789        {
    37843790                _Z4(atlTraceCOM, 4, _T("...\n"));
     
    37953801                return S_OK;
    37963802        }
    3797         STDMETHOD(DoPropertyFrameModal)(LONG nParentWindowHandle)
     3803        STDMETHOD(DoPropertyFrameModal)(LONG nParentWindowHandle) override
    37983804        {
    37993805                _Z4(atlTraceCOM, 4, _T("nParentWindowHandle 0x%08X\n"), nParentWindowHandle);
     
    38153821                return S_OK;
    38163822        }
    3817         STDMETHOD(DoFilterGraphListModal)(LONG nParentWindowHandle)
     3823        STDMETHOD(DoFilterGraphListModal)(LONG nParentWindowHandle) override
    38183824        {
    38193825                _Z4(atlTraceCOM, 4, _T("nParentWindowHandle 0x%08X\n"), nParentWindowHandle);
     
    38323838                return S_OK;
    38333839        }
    3834         STDMETHOD(OpenGraphStudioNext)(LONG nParentWindowHandle, BSTR sMonikerDisplayName, VARIANT_BOOL* pbResult)
     3840        STDMETHOD(OpenGraphStudioNext)(LONG nParentWindowHandle, BSTR sMonikerDisplayName, VARIANT_BOOL* pbResult) override
    38353841        {
    38363842                _Z4(atlTraceCOM, 4, _T("nParentWindowHandle 0x%08X, sMonikerDisplayName \"%s\"\n"), nParentWindowHandle, CString(sMonikerDisplayName));
     
    38523858                return S_OK;
    38533859        }
    3854         STDMETHOD(OpenGraphEdit)(LONG nParentWindowHandle, BSTR sMonikerDisplayName, VARIANT_BOOL* pbResult)
     3860        STDMETHOD(OpenGraphEdit)(LONG nParentWindowHandle, BSTR sMonikerDisplayName, VARIANT_BOOL* pbResult) override
    38553861        {
    38563862                _Z4(atlTraceCOM, 4, _T("nParentWindowHandle 0x%08X, sMonikerDisplayName \"%s\"\n"), nParentWindowHandle, CString(sMonikerDisplayName));
     
    38723878                return S_OK;
    38733879        }
    3874         STDMETHOD(get_Options)(VARIANT* pvOptions)
    3875         {
    3876                 _Z4(atlTraceCOM, 4, _T("...\n"));
     3880        STDMETHOD(get_Options)(VARIANT* pvOptions) override
     3881        {
     3882                _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
    38773883                _ATLTRY
    38783884                {
     
    38873893                return S_OK;
    38883894        }
    3889         STDMETHOD(put_Options)(VARIANT vOptions)
    3890         {
    3891                 _Z4(atlTraceCOM, 4, _T("vOptions.vt 0x%X\n"), vOptions.vt);
     3895        STDMETHOD(put_Options)(VARIANT vOptions) override
     3896        {
     3897                _Z4(atlTraceCOM, 4, _T("this 0x%p, vOptions.vt %s\n"), this, reinterpret_cast<CComVariantArray&>(vOptions).FormatType());
    38923898                _ATLTRY
    38933899                {
    38943900                        m_Options.SetVariant(vOptions);
     3901                }
     3902                _ATLCATCH(Exception)
     3903                {
     3904                        _C(Exception);
     3905                }
     3906                return S_OK;
     3907        }
     3908        STDMETHOD(ResetMediaSampleTrace)(VARIANT vProcessIdentifier) override
     3909        {
     3910                _Z4(atlTraceCOM, 4, _T("this 0x%p, vProcessIdentifier %s\n"), this, reinterpret_cast<CComVariantArray&>(vProcessIdentifier).Format(TRUE));
     3911                _ATLTRY
     3912                {
     3913                        DWORD nProcessIdentifier = 0;
     3914                        if(vProcessIdentifier.vt > VT_NULL)
     3915                                nProcessIdentifier = (DWORD) reinterpret_cast<CComVariantArray&>(vProcessIdentifier).GetAsType(VT_I4).lVal;
     3916                        MediaSampleTrace_Reset(nProcessIdentifier);
     3917                }
     3918                _ATLCATCH(Exception)
     3919                {
     3920                        _C(Exception);
     3921                }
     3922                return S_OK;
     3923        }
     3924        STDMETHOD(LockMediaSampleTrace)(IUnknown** ppLockUnknown) override
     3925        {
     3926                _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
     3927                _ATLTRY
     3928                {
     3929                        __D(ppLockUnknown, E_POINTER);
     3930                        *ppLockUnknown = MediaSampleTrace_Lock().Detach();
     3931                }
     3932                _ATLCATCH(Exception)
     3933                {
     3934                        _C(Exception);
     3935                }
     3936                return S_OK;
     3937        }
     3938        STDMETHOD(GetMediaSampleTrace)(VARIANT vProcessIdentifier, BSTR* psText) override
     3939        {
     3940                _Z4(atlTraceCOM, 4, _T("this 0x%p, vProcessIdentifier %s\n"), this, reinterpret_cast<CComVariantArray&>(vProcessIdentifier).Format(TRUE));
     3941                _ATLTRY
     3942                {
     3943                        __D(psText, E_POINTER);
     3944                        DWORD nProcessIdentifier = 0;
     3945                        if(vProcessIdentifier.vt > VT_NULL)
     3946                                nProcessIdentifier = (DWORD) reinterpret_cast<CComVariantArray&>(vProcessIdentifier).GetAsType(VT_I4).lVal;
     3947                        *psText = CComBSTR(MediaSampleTrace_Get(nProcessIdentifier)).Detach();
    38953948                }
    38963949                _ATLCATCH(Exception)
  • trunk/DirectShowSpy/FilterGraphSpy.cpp

    r569 r617  
    2828        extern "C" __declspec(dllexport)
    2929#else
    30         #pragma comment(linker, "/EXPORT:DoGraphBuilderCallbackPropertySheetModal=_DoGraphBuilderCallbackPropertySheetModal@0,PRIVATE")
     30        #pragma comment(linker, "/EXPORT:DoGraphBuilderCallbackPropertySheetModal=_DoGraphBuilderCallbackPropertySheetModal@16,PRIVATE")
    3131        extern "C" // __declspec(dllexport)
    3232#endif // defined(_WIN64)
    3333
    34 HRESULT STDMETHODCALLTYPE DoGraphBuilderCallbackPropertySheetModal()
     34HRESULT STDMETHODCALLTYPE DoGraphBuilderCallbackPropertySheetModal(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    3535{
     36        hParentWindow; pszCommandLine; nShowCommand;
    3637        _ATLTRY
    3738        {
     
    5657        extern "C" __declspec(dllexport)
    5758#else
    58         #pragma comment(linker, "/EXPORT:DoFilterGraphListPropertySheetModal=_DoFilterGraphListPropertySheetModal@0,PRIVATE")
     59        #pragma comment(linker, "/EXPORT:DoFilterGraphListPropertySheetModal=_DoFilterGraphListPropertySheetModal@16,PRIVATE")
    5960        extern "C" // __declspec(dllexport)
    6061#endif // defined(_WIN64)
    6162
    62 HRESULT STDMETHODCALLTYPE DoFilterGraphListPropertySheetModal()
     63HRESULT STDMETHODCALLTYPE DoFilterGraphListPropertySheetModal(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    6364{
     65        hParentWindow; pszCommandLine; nShowCommand;
    6466        _ATLTRY
    6567        {
     
    8486        extern "C" __declspec(dllexport)
    8587#else
    86         #pragma comment(linker, "/EXPORT:DoMediaSampleTracePropertySheetModal=_DoMediaSampleTracePropertySheetModal@0,PRIVATE")
     88        #pragma comment(linker, "/EXPORT:DoMediaSampleTracePropertySheetModal=_DoMediaSampleTracePropertySheetModal@16,PRIVATE")
    8789        extern "C" // __declspec(dllexport)
    8890#endif // defined(_WIN64)
    8991
    90 HRESULT STDMETHODCALLTYPE DoMediaSampleTracePropertySheetModal()
     92HRESULT STDMETHODCALLTYPE DoMediaSampleTracePropertySheetModal(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    9193{
     94        hParentWindow; pszCommandLine; nShowCommand;
    9295        _ATLTRY
    9396        {
     
    113116HRESULT STDMETHODCALLTYPE DoMediaSampleTraceTasks(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    114117{
     118        hParentWindow; pszCommandLine; nShowCommand;
    115119        _ATLTRY
    116120        {
  • trunk/DirectShowSpy/FilterGraphSpy.h

    r608 r617  
    2525HRESULT FilterGraphHelper_OpenGraphStudioNext(LONG nParentWindowHandle, LPCWSTR pszMonikerDisplayName, VARIANT_BOOL* pbResult);
    2626HRESULT FilterGraphHelper_OpenGraphEdit(LONG nParentWindowHandle, LPCWSTR pszMonikerDisplayName, VARIANT_BOOL* pbResult);
    27 
    28 ////////////////////////////////////////////////////////////
    29 // CModuleVersionInformationT
    30 
    31 template <typename T>
    32 class ATL_NO_VTABLE CModuleVersionInformationT :
    33         public IDispatchImpl<IModuleVersionInformation>
    34 {
    35 public:
    36 // CModuleVersionInformationT
    37 
    38 // IModuleVersionInformation
    39         STDMETHOD(get_Path)(BSTR* psPath)
    40         {
    41                 _Z4(atlTraceCOM, 4, _T("...\n"));
    42                 _ATLTRY
    43                 {
    44                         __D(psPath, E_POINTER);
    45                         *psPath = CComBSTR(_VersionInfoHelper::GetModulePath()).Detach();
    46                 }
    47                 _ATLCATCH(Exception)
    48                 {
    49                         _C(Exception);
    50                 }
    51                 return S_OK;
    52         }
    53         STDMETHOD(get_FileVersion)(LONGLONG* pnFileVersion)
    54         {
    55                 _Z4(atlTraceCOM, 4, _T("...\n"));
    56                 _ATLTRY
    57                 {
    58                         __D(pnFileVersion, E_POINTER);
    59                         *pnFileVersion = (LONGLONG) _VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath());
    60                 }
    61                 _ATLCATCH(Exception)
    62                 {
    63                         _C(Exception);
    64                 }
    65                 return S_OK;
    66         }
    67         STDMETHOD(get_FileVersionString)(BSTR* psFileVersionString)
    68         {
    69                 _Z4(atlTraceCOM, 4, _T("...\n"));
    70                 _ATLTRY
    71                 {
    72                         __D(psFileVersionString, E_POINTER);
    73                         *psFileVersionString = CComBSTR(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath()))).Detach();
    74                 }
    75                 _ATLCATCH(Exception)
    76                 {
    77                         _C(Exception);
    78                 }
    79                 return S_OK;
    80         }
    81 };
    8227
    8328////////////////////////////////////////////////////////////
  • trunk/DirectShowSpy/Helper.cpp

    r503 r617  
    3030        extern "C" __declspec(dllexport)
    3131#else
    32         #pragma comment(linker, "/EXPORT:Test=_Test@0,PRIVATE")
     32        #pragma comment(linker, "/EXPORT:Test=_Test@16,PRIVATE")
    3333        extern "C" // __declspec(dllexport)
    3434#endif // defined(_WIN64)
    3535
    36 HRESULT STDMETHODCALLTYPE Test()
     36HRESULT STDMETHODCALLTYPE Test(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    3737{
     38        hParentWindow; pszCommandLine; nShowCommand;
    3839        _ATLTRY
    3940        {
     
    221222        extern "C" __declspec(dllexport)
    222223#else
    223         #pragma comment(linker, "/EXPORT:Test=_Test@0,PRIVATE")
     224        #pragma comment(linker, "/EXPORT:Test=_Test@16,PRIVATE")
    224225        extern "C" // __declspec(dllexport)
    225226#endif // defined(_WIN64)
    226227
    227 HRESULT STDMETHODCALLTYPE Test()
     228HRESULT STDMETHODCALLTYPE Test(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    228229{
     230        hParentWindow; pszCommandLine; nShowCommand;
    229231        _ATLTRY
    230232        {
     
    275277        extern "C" __declspec(dllexport)
    276278#else
    277         #pragma comment(linker, "/EXPORT:Test=_Test@0,PRIVATE")
     279        #pragma comment(linker, "/EXPORT:Test=_Test@16,PRIVATE")
    278280        extern "C" // __declspec(dllexport)
    279281#endif // defined(_WIN64)
    280282
    281 HRESULT STDMETHODCALLTYPE Test()
     283HRESULT STDMETHODCALLTYPE Test(HWND hParentWindow, HINSTANCE, LPSTR pszCommandLine, INT nShowCommand)
    282284{
     285        hParentWindow; pszCommandLine; nShowCommand;
    283286        _ATLTRY
    284287        {
  • trunk/DirectShowSpy/MediaSampleTrace.h

    r569 r617  
    11////////////////////////////////////////////////////////////
    2 // Copyright (C) Roman Ryltsov, 2008-2015
     2// Copyright (C) Roman Ryltsov, 2008-2016
    33// Created by Roman Ryltsov roman@alax.info, http://alax.info
    44//
     
    2121#include "FilterGraphHelper.h"
    2222#include "FilterGraphList.h"
     23
     24VOID MediaSampleTrace_Reset(DWORD nProcessIdentifier);
     25CString MediaSampleTrace_Get(DWORD nProcessIdentifier);
     26CComPtr<IUnknown> MediaSampleTrace_Lock();
    2327
    2428////////////////////////////////////////////////////////////
     
    556560        };
    557561
     562        ////////////////////////////////////////////////////////
     563        // CHandleMapLock
     564
     565        class ATL_NO_VTABLE CHandleMapLock :
     566                public CComObjectRootEx<CComMultiThreadModelNoCS>,
     567                public IUnknown
     568        {
     569                typedef CThreadT<CHandleMapLock> CThread;
     570
     571        public:
     572
     573        DECLARE_PROTECT_FINAL_CONSTRUCT()
     574
     575        BEGIN_COM_MAP(CHandleMapLock)
     576        END_COM_MAP()
     577
     578        private:
     579                CData m_Data;
     580                CObjectPtr<CThread> m_pThread;
     581                CHandleMap m_HandleMap;
     582
     583                DWORD ThreadProc(CThread*, CEvent& InitializationEvent, CEvent& TerminationEvent)
     584                {
     585                        CMultiThreadedApartment Apartment;
     586                        CEvent RequestEvent, ResponseEvent;
     587                        _W(RequestEvent.Create(NULL, FALSE, FALSE, CString(CPages::GetFileMappingName()) + _T(".TransferRequest")));
     588                        _W(ResponseEvent.Create(NULL, FALSE, FALSE, CString(CPages::GetFileMappingName()) + _T(".TransferResponse")));
     589                        _W(InitializationEvent.Set());
     590                        if(!RequestEvent || !ResponseEvent)
     591                                return 0;
     592                        CStackPointer StackPointer;
     593                        const HANDLE phObjects[] = { TerminationEvent, RequestEvent };
     594                        for(; ; )
     595                        {
     596                                _A(StackPointer.Check()); StackPointer;
     597                                const DWORD nWaitResult = WaitForMultipleObjects(DIM(phObjects), phObjects, FALSE, INFINITE);
     598                                _Z4_WAITRESULT(nWaitResult);
     599                                _A(nWaitResult - WAIT_OBJECT_0 < DIM(phObjects));
     600                                if(nWaitResult != WAIT_OBJECT_0 + 1) // RequestEvent
     601                                        break;
     602                                CPages Pages;
     603                                if(Pages.Initialize())
     604                                        Pages.GetData(m_Data, &m_HandleMap);
     605                                _W(ResponseEvent.Set());
     606                        }
     607                        return 0;
     608                }
     609
     610        public:
     611        // CHandleMapLock
     612                CHandleMapLock()
     613                {
     614                        _Z4_THIS();
     615                }
     616                ~CHandleMapLock()
     617                {
     618                        _Z4_THIS();
     619                }
     620                HRESULT FinalConstruct()
     621                {
     622                        _ATLTRY
     623                        {
     624                                m_pThread.Construct()->Initialize(this, &CHandleMapLock::ThreadProc);
     625                        }
     626                        _ATLCATCH(Exception)
     627                        {
     628                                _C(Exception);
     629                        }
     630                        return S_OK;
     631                }
     632                VOID FinalRelease()
     633                {
     634                        m_pThread.Release();
     635                }
     636        };
     637
    558638public:
    559639// CMediaSampleTraceBase
     
    879959                public CCustomDraw<CMediaSamplePropertyPage>
    880960        {
    881                 typedef CThreadT<CMediaSamplePropertyPage> CThread;
    882 
    883961        public:
    884962                enum { IDD = IDD_MEDIASAMPLETRACE_MEDIASAMPLE_PROPERTYPAGE };
     
    897975                COMMAND_ID_HANDLER_EX(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_COPYTOCLIPBOARD, OnCopyToClipboard)
    898976                COMMAND_ID_HANDLER_EX(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_SAVETOFILE, OnSaveToFile)
     977                COMMAND_ID_HANDLER_EX(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_LOADFROMFILE, OnLoadFromFile)
    899978                COMMAND_ID_HANDLER_EX(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_RESETDATA, OnResetData)
    900979                COMMAND_ID_HANDLER_EX(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_OPENFILTERGRAPHLIST, OnOpenFilterGraphList)
     
    912991                DLGRESIZE_CONTROL(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_COPYTOCLIPBOARD, DLSZ_MOVE_Y)
    913992                DLGRESIZE_CONTROL(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_SAVETOFILE, DLSZ_MOVE_Y)
     993                DLGRESIZE_CONTROL(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_LOADFROMFILE, DLSZ_MOVE_Y)
    914994        END_DLGRESIZE_MAP()
    915995
     
    12341314                CRoHyperStatic m_CopyToClipboardStatic;
    12351315                CRoHyperStatic m_SaveToFileStatic;
     1316                CRoHyperStatic m_LoadFromFileStatic;
    12361317                CFilterDialog m_FilterDialog;
    12371318                CRoMapT<INT, BOOL> m_ChangeMap;
    12381319                CData m_Data;
    1239                 CObjectPtr<CThread> m_pThread;
    12401320                CHandleMap m_HandleMap;
    1241 
    1242                 DWORD ThreadProc(CThread*, CEvent& InitializationEvent, CEvent& TerminationEvent)
    1243                 {
    1244                         CMultiThreadedApartment Apartment;
    1245                         CEvent RequestEvent, ResponseEvent;
    1246                         _W(RequestEvent.Create(NULL, FALSE, FALSE, CString(CPages::GetFileMappingName()) + _T(".TransferRequest")));
    1247                         _W(ResponseEvent.Create(NULL, FALSE, FALSE, CString(CPages::GetFileMappingName()) + _T(".TransferResponse")));
    1248                         _W(InitializationEvent.Set());
    1249                         if(!RequestEvent || !ResponseEvent)
    1250                                 return 0;
    1251                         CStackPointer StackPointer;
    1252                         const HANDLE phObjects[] = { TerminationEvent, RequestEvent };
    1253                         for(; ; )
    1254                         {
    1255                                 _A(StackPointer.Check()); StackPointer;
    1256                                 const DWORD nWaitResult = WaitForMultipleObjects(DIM(phObjects), phObjects, FALSE, INFINITE);
    1257                                 _Z4_WAITRESULT(nWaitResult);
    1258                                 _A(nWaitResult - WAIT_OBJECT_0 < DIM(phObjects));
    1259                                 if(nWaitResult != WAIT_OBJECT_0 + 1) // RequestEvent
    1260                                         break;
    1261                                 CPages Pages;
    1262                                 if(Pages.Initialize())
    1263                                         Pages.GetData(m_Data, &m_HandleMap);
    1264                                 _W(ResponseEvent.Set());
    1265                         }
    1266                         return 0;
    1267                 }
     1321                CObjectPtr<CHandleMapLock> m_pHandleMapLock;
    12681322
    12691323        public:
     
    12811335                        CWindowRedraw ListViewRedraw(m_ListView);
    12821336                        m_ListView.DeleteAllItems();
    1283                         m_Data.Initialize();
    1284                         CPages Pages;
    1285                         if(Pages.Initialize())
    1286                         {
    1287                                 Pages.GetData(m_Data, &m_HandleMap);
    1288                                 m_Data.Sort();
    1289                                 INT nItem = 0;
    1290                                 for(auto&& Item: m_Data.m_ItemArray)
    1291                                         m_ListView.InsertItem(nItem++, Item);
     1337                        if(m_pHandleMapLock) // Live vs. File Source
     1338                        {
     1339                                m_Data.Initialize();
     1340                                CPages Pages;
     1341                                if(Pages.Initialize())
     1342                                {
     1343                                        Pages.GetData(m_Data, &m_HandleMap);
     1344                                        m_Data.Sort();
     1345                                        INT nItem = 0;
     1346                                        for(auto&& Item: m_Data.m_ItemArray)
     1347                                                m_ListView.InsertItem(nItem++, Item);
     1348                                }
    12921349                        }
    12931350                        m_FilterDialog.Reset();
     
    13171374                        for(INT nItem = 0; nItem < m_ListView.GetItemCount(); nItem++)
    13181375                                sText += CreateDataItemText(m_ListView.GetItemData(nItem));
    1319                         return CStringA(sText);
     1376                        return Utf8StringFromString(sText);
    13201377                }
    13211378                VOID HandleFilterUpdate()
     
    13281385                                        m_ListView.InsertItem(nItem++, Item);
    13291386                        // SUGG: Preserve selection
     1387                }
     1388                VOID LoadFrom(CString sText)
     1389                {
     1390                        sText.Replace(_T("\r\n"), _T("\n"));
     1391                        CRoListT<CData::CItem> ItemList;
     1392                        {
     1393                                CRoArrayT<CString> LineArray;
     1394                                _StringHelper::GetLines(sText, LineArray);
     1395                                __D(LineArray.GetCount() > 1, E_UNNAMED);
     1396                                LineArray.RemoveAt(0); // Header
     1397                                for(auto&& sLine: LineArray)
     1398                                {
     1399                                        CData::CItem Item;
     1400                                        _ATLTRY
     1401                                        {
     1402                                                ZeroMemory(&Item.m_Item, sizeof Item.m_Item);
     1403                                                ZeroMemory(&Item.m_PageItem, sizeof Item.m_PageItem);
     1404                                                CRoArrayT<CString> Array;
     1405                                                _StringHelper::Split(sLine, _T('\t'), Array);
     1406                                                __D(Array.GetCount() >= 9, E_UNNAMED);
     1407                                                Item.m_Item.nFlags = ITEMFLAGS_NONE;
     1408                                                _W(StrToIntEx(Array[1], 0, (INT*) &Item.m_Item.nProcessIdentifier));
     1409                                                Item.m_Item.nPageIdentifier = 0;
     1410                                                _W(StrToInt64Ex(Array[3], STIF_SUPPORT_HEX, (LONGLONG*) &Item.m_Item.nFilterGraphIdentifier));
     1411                                                wcsncpy_s(Item.m_Item.pszFilterGraphName, Array[4], _TRUNCATE);
     1412                                                Item.m_PageItem.nFlags = PAGEITEMFLAGS_NONE;
     1413                                                _W(StrToIntEx(Array[2], 0, (INT*) &Item.m_PageItem.nThreadIdentifier));
     1414                                                _W(StrToInt64Ex(Array[5], STIF_SUPPORT_HEX, (LONGLONG*) &Item.m_PageItem.nFilterIdentifier));
     1415                                                wcsncpy_s(Item.m_PageItem.pszFilterName, Array[6], _TRUNCATE);
     1416                                                wcsncpy_s(Item.m_PageItem.pszStreamName, Array[7], _TRUNCATE);
     1417                                                #pragma region Time
     1418                                                static CRoStaticRe g_Expression(_T("^{[0-9]+}\\:{[0-9]+}\\:{[0-9]+}\\.{[0-9]+}$"), FALSE);
     1419                                                CRoReMatchContext MatchContext;
     1420                                                if(g_Expression.Match(Array[0], &MatchContext))
     1421                                                {
     1422                                                        // NOTE: Let's go with today
     1423                                                        SYSTEMTIME Time;
     1424                                                        GetSystemTime(&Time);
     1425                                                        Time.wHour = (WORD) _ttoi(MatchContext.GetMatchString(0));
     1426                                                        Time.wMinute = (WORD) _ttoi(MatchContext.GetMatchString(1));
     1427                                                        Time.wSecond = (WORD) _ttoi(MatchContext.GetMatchString(2));
     1428                                                        Time.wMilliseconds = (WORD) _ttoi(MatchContext.GetMatchString(3));
     1429                                                        _W(SystemTimeToFileTime(&Time, &reinterpret_cast<FILETIME&>(Item.m_PageItem.nTime)));
     1430                                                }
     1431                                                #pragma endregion
     1432                                                const CString& sType = Array[8];
     1433                                                if(sType.Compare(_T("New Segment")) == 0)
     1434                                                {
     1435                                                        Item.m_PageItem.nFlags |= PAGEITEMFLAG_NEWSEGMENT;
     1436                                                } else
     1437                                                if(sType.Compare(_T("Media Sample")) == 0)
     1438                                                {
     1439                                                        Item.m_PageItem.nFlags |= PAGEITEMFLAG_MEDIASAMPLE;
     1440                                                        AM_SAMPLE2_PROPERTIES& Properties = Item.m_PageItem.Data.MediaSample.Properties;
     1441                                                        #pragma region Sample Flags
     1442                                                        _A(!Properties.dwSampleFlags);
     1443                                                        CString sSampleFlags = Array[9];
     1444                                                        sSampleFlags.Replace(_T(" | "), _T("|"));
     1445                                                        CRoArrayT<CString> FlagArray;
     1446                                                        _StringHelper::Split(sSampleFlags, _T('|'), FlagArray);
     1447                                                        for(auto&& sFlag: FlagArray)
     1448                                                        {
     1449                                                                static const CFlagNameT<DWORD> g_pMap[] =
     1450                                                                {
     1451                                                                        #define A(x) { x, #x },
     1452                                                                        A(AM_SAMPLE_SPLICEPOINT)
     1453                                                                        A(AM_SAMPLE_PREROLL)
     1454                                                                        A(AM_SAMPLE_DATADISCONTINUITY)
     1455                                                                        A(AM_SAMPLE_TYPECHANGED)
     1456                                                                        A(AM_SAMPLE_TIMEVALID)
     1457                                                                        A(AM_SAMPLE_TIMEDISCONTINUITY)
     1458                                                                        A(AM_SAMPLE_FLUSH_ON_PAUSE)
     1459                                                                        A(AM_SAMPLE_STOPVALID)
     1460                                                                        A(AM_SAMPLE_ENDOFSTREAM)
     1461                                                                        //A(AM_STREAM_MEDIA)
     1462                                                                        //A(AM_STREAM_CONTROL)
     1463                                                                        #undef A
     1464                                                                };
     1465                                                                BOOL bHandled = FALSE;
     1466                                                                for(auto&& Item: g_pMap)
     1467                                                                        if(sFlag.Compare(CString(Item.pszName)) == 0)
     1468                                                                        {
     1469                                                                                Properties.dwSampleFlags |= Item.Value;
     1470                                                                                bHandled = TRUE;
     1471                                                                                break;
     1472                                                                        }
     1473                                                                if(bHandled)
     1474                                                                        continue;
     1475                                                                INT nFlag;
     1476                                                                _W(StrToIntEx(sFlag, STIF_SUPPORT_HEX, &nFlag));
     1477                                                                Properties.dwSampleFlags |= nFlag;
     1478                                                        }
     1479                                                        #pragma endregion
     1480                                                        if(!Array[10].IsEmpty())
     1481                                                                _W(StrToInt64Ex(Array[10], 0, (LONGLONG*) &Properties.tStart));
     1482                                                        if(!Array[11].IsEmpty())
     1483                                                                _W(StrToInt64Ex(Array[11], 0, (LONGLONG*) &Properties.tStop));
     1484                                                        if(!Array[13].IsEmpty())
     1485                                                                _W(StrToIntEx(Array[13], 0, (INT*) &Properties.lActual));
     1486                                                } else
     1487                                                if(sType.Compare(_T("End of Stream")) == 0)
     1488                                                {
     1489                                                        Item.m_PageItem.nFlags |= PAGEITEMFLAG_ENDOFSTREAM;
     1490                                                } else
     1491                                                {
     1492                                                        _A(sType.Compare(_T("Comment")) == 0);
     1493                                                        Item.m_PageItem.nFlags |= PAGEITEMFLAG_COMMENT;
     1494                                                }
     1495                                                if(Array.GetCount() > 14)
     1496                                                        wcsncpy_s(Item.m_PageItem.pszComment, Array[14], _TRUNCATE);
     1497                                                if(Array.GetCount() > 15)
     1498                                                {
     1499                                                        CString sHighlight = Array[15];
     1500                                                        if(!sHighlight.IsEmpty())
     1501                                                        {
     1502                                                                _A(sHighlight[0] == _T('*'));
     1503                                                                sHighlight.Delete(0);
     1504                                                                _W(StrToIntEx(sHighlight, 0, (INT*) &Item.m_nHighlightIndex));
     1505                                                                //Item.m_PageItem.nFlags &= ~PAGEITEMFLAG_HIGHLIGHT_MASK;
     1506                                                                //Item.m_PageItem.nFlags |= (Item.m_nHighlightIndex << PAGEITEMFLAG_HIGHLIGHT_SHIFT) & PAGEITEMFLAG_HIGHLIGHT_MASK;
     1507                                                        }
     1508                                                }
     1509                                        }
     1510                                        _ATLCATCHALL()
     1511                                        {
     1512                                                _Z_EXCEPTION();
     1513                                                continue;
     1514                                        }
     1515                                        ItemList.AddTail(Item);
     1516                                }
     1517                        }
     1518                        m_Data.Initialize();
     1519                        for(auto&& Item: ItemList)
     1520                                m_Data.m_ItemArray.Add(Item);
     1521                        m_pHandleMapLock.Release();
     1522                        m_HandleMap.RemoveAll();
     1523                        UpdateListView();
     1524                }
     1525                VOID LoadFromFile(LPCTSTR pszPath)
     1526                {
     1527                        CAtlFile File;
     1528                        __C(File.Create(pszPath, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING));
     1529                        ULONGLONG nFileSize;
     1530                        __C(File.GetSize(nFileSize));
     1531                        CHeapPtr<BYTE> pnData;
     1532                        __D(pnData.Allocate((SIZE_T) nFileSize + 1), E_OUTOFMEMORY);
     1533                        __C(File.Read(pnData, (DWORD) nFileSize));
     1534                        pnData[(SIZE_T) nFileSize] = 0;
     1535                        LoadFrom(StringFromUtf8String(CStringA((LPCSTR) (const BYTE*) pnData)));
    13301536                }
    13311537
     
    13591565                                _W(m_SaveToFileStatic.SubclassWindow(GetDlgItem(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_SAVETOFILE)));
    13601566                                m_SaveToFileStatic.SetExtendedStyle(CRoHyperStatic::CS_ANCHORCLICKCOMMAND);
    1361                                 CRoHyperStatic::ArrangeHorizontally(&m_RefreshStatic, &m_CopyToClipboardStatic, &m_SaveToFileStatic, NULL);
     1567                                _W(m_LoadFromFileStatic.SubclassWindow(GetDlgItem(IDC_MEDIASAMPLETRACE_MEDIASAMPLE_LOADFROMFILE)));
     1568                                m_LoadFromFileStatic.SetExtendedStyle(CRoHyperStatic::CS_ANCHORCLICKCOMMAND);
     1569                                CRoHyperStatic::ArrangeHorizontally(&m_RefreshStatic, &m_CopyToClipboardStatic, &m_SaveToFileStatic, &m_LoadFromFileStatic, NULL);
    13621570                                #pragma region Filter
    13631571                                __E(m_FilterDialog.Create(m_hWnd, (LPARAM) this));
     
    13801588                                #pragma endregion
    13811589                                DlgResize_Init(FALSE, FALSE);
     1590                                m_pHandleMapLock.Construct();
    13821591                                UpdateListView();
    13831592                                m_ChangeMap.RemoveAll();
     
    13971606                                _W(m_PropertySheet.CenterWindow());
    13981607                                #pragma endregion
    1399                                 m_pThread.Construct()->Initialize(this, &CMediaSamplePropertyPage::ThreadProc);
     1608                                #if _DEVELOPMENT && FALSE
     1609                                        LoadFromFile(_T("D:\\MediaSampleTrace.tsv"));
     1610                                #endif // _DEVELOPMENT
    14001611                        }
    14011612                        _ATLCATCHALL()
     
    14101621                {
    14111622                        CWaitCursor WaitCursor;
    1412                         m_pThread.Release();
     1623                        m_pHandleMapLock.Release();
    14131624                        return 0;
    14141625                }
     
    15801791                        return 0;
    15811792                }
     1793                LRESULT OnLoadFromFile(UINT, INT, HWND)
     1794                {
     1795                        static const COMDLG_FILTERSPEC g_pFilter[] =
     1796                        {
     1797                                { _T("TSV Files"), _T("*.tsv") },
     1798                                { _T("All Files"), _T("*.*") },
     1799                        };
     1800                        CPath sPath = _CommonDialogHelper::QueryOpenPath(m_hWnd, g_pFilter, _T("tsv"), _T("Media Sample Trace.tsv"));
     1801                        if(!_tcslen(sPath))
     1802                                return 0;
     1803                        CWaitCursor WaitCursor;
     1804                        LoadFromFile(sPath);
     1805                        return 0;
     1806                }
    15821807                LRESULT OnResetData(UINT, INT, HWND)
    15831808                {
     
    16881913        }
    16891914};
     1915
     1916inline VOID MediaSampleTrace_Reset(DWORD nProcessIdentifier)
     1917{
     1918        nProcessIdentifier;
     1919        // TODO: Implement processs-specific operation (support non-zero nProcessIdentifier)
     1920        CMediaSampleTraceBase::CPages Pages;
     1921        if(Pages.Initialize())
     1922                Pages.ResetData();
     1923}
     1924inline CString MediaSampleTrace_Get(DWORD nProcessIdentifier)
     1925{
     1926        CString sText;
     1927        CMediaSampleTraceBase::CPages Pages;
     1928        if(Pages.Initialize())
     1929        {
     1930                CMediaSampleTraceBase::CData Data;
     1931                Data.Initialize();
     1932                CMediaSampleTraceBase::CHandleMap HandleMap;
     1933                Pages.GetData(Data, &HandleMap);
     1934                Data.Sort();
     1935                sText += CMediaSampleTracePropertySheet::CreateDataItemHeaderText();
     1936                for(auto&& Item: Data.m_ItemArray)
     1937                        if(!nProcessIdentifier || Item.m_Item.nProcessIdentifier == nProcessIdentifier)
     1938                                sText += CMediaSampleTracePropertySheet::CreateDataItemText(Item);
     1939        }
     1940        return sText;
     1941}
     1942inline CComPtr<IUnknown> MediaSampleTrace_Lock()
     1943{
     1944        CObjectPtr<CMediaSampleTraceBase::CHandleMapLock> pHandleMapLock;
     1945        pHandleMapLock.Construct();
     1946        return (CMediaSampleTraceBase::CHandleMapLock*) pHandleMapLock;
     1947}
  • trunk/DirectShowSpy/Module.idl

    r608 r617  
    234234                [id(6), propget] HRESULT Options([out, retval] VARIANT* pvOptions);
    235235                [id(6), propput] HRESULT Options([in] VARIANT vOptions);
     236                [id(7)] HRESULT ResetMediaSampleTrace([in] VARIANT vProcessIdentifier);
     237                [id(8)] HRESULT LockMediaSampleTrace([out, retval] IUnknown** ppLockUnknown);
     238                [id(9)] HRESULT GetMediaSampleTrace([in] VARIANT vProcessIdentifier, [out, retval] BSTR* psText);
    236239        };
    237240        [
     
    242245        {
    243246                [default] interface IFilterGraphHelper;
     247                interface IModuleVersionInformation;
    244248        };
    245249        [
  • trunk/DirectShowSpy/resource.h

    r608 r617  
    130130#define IDC_MEDIASAMPLETRACE_MEDIASAMPLE_SAVETOFILE 2113
    131131#define IDC_MEDIASAMPLETRACE_MEDIASAMPLE_RESETDATA 2114
     132#define IDC_MEDIASAMPLETRACE_MEDIASAMPLE_LOADFROMFILE 2115
    132133#define IDC_MEDIASAMPLETRACE_MEDIASAMPLE_OPENFILTERGRAPHLIST 2120
    133134#define IDC_MEDIASAMPLETRACE_MEDIASAMPLE_OPENFILTERGRAPHPROPERTIES 2121
     
    157158#define IDR_SYSTEMDEVICEENUMERATORSPY   25004
    158159#define IDR_FILTERGRAPHHELPER           25050
    159 #define IDR_FILTERGRAPHTABLEITEM                25051
    160 #define IDR_FILTERGRAPHTABLE                    25052
     160#define IDR_FILTERGRAPHTABLEITEM        25051
     161#define IDR_FILTERGRAPHTABLE            25052
    161162#define IDD_ABOUT                       29900
    162163#define IDC_ABOUT_ICON                  29901
     
    170171#define IDC_ABOUT_COPYRIGHT             29909
    171172#define IDC_ABOUT_COPYRIGHTWARNING      29910
     173#define ID_ACCELERATOR32807             32807
    172174
    173175// Next default values for new objects
     
    176178#ifndef APSTUDIO_READONLY_SYMBOLS
    177179#define _APS_NEXT_RESOURCE_VALUE        214
    178 #define _APS_NEXT_COMMAND_VALUE         32806
     180#define _APS_NEXT_COMMAND_VALUE         32809
    179181#define _APS_NEXT_CONTROL_VALUE         257
    180182#define _APS_NEXT_SYMED_VALUE           103
Note: See TracChangeset for help on using the changeset viewer.