Changeset 233


Ignore:
Timestamp:
Jan 10, 2014, 2:02:13 AM (8 years ago)
Author:
roman
Message:

Graph helper takes filters and pins, not only graph; Added email feature

Location:
trunk/DirectShowSpy
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/DirectShowSpy/AboutDialog.h

    r196 r233  
    11////////////////////////////////////////////////////////////
    2 // Copyright (C) Roman Ryltsov, 2008-2011
     2// Copyright (C) Roman Ryltsov, 2008-2014
    33// Created by Roman Ryltsov roman@alax.info
    44
     
    1818{
    1919public:
    20 
    2120        enum { IDD = IDD_ABOUT };
    2221
     
    3635public:
    3736// CAboutDialog
     37        static CFontHandle CreateTitleFont() throw()
     38        {
     39                CLogFont LogFont;
     40                LogFont.lfHeight = -MulDiv(12, GetDeviceCaps(CClientDC(GetDesktopWindow()), LOGPIXELSY), 72);
     41                LogFont.lfWeight = FW_BOLD;
     42                LogFont.lfItalic = TRUE;
     43                _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Arial"), _TRUNCATE);
     44                CFont Font;
     45                _W(Font.CreateFontIndirect(&LogFont));
     46                return Font.Detach();
     47        }
     48        static CFontHandle CreateDisclaimerFont() throw()
     49        {
     50                CLogFont LogFont;
     51                LogFont.lfHeight = -MulDiv(7, GetDeviceCaps(CClientDC(GetDesktopWindow()), LOGPIXELSY), 72);
     52                LogFont.lfWeight = FW_NORMAL;
     53                _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Lucida Console"), _TRUNCATE);
     54                CFont Font;
     55                _W(Font.CreateFontIndirect(&LogFont));
     56                return Font.Detach();
     57        }
    3858        CAboutDialog() throw()
    3959        {
     
    4969        {
    5070                CStatic(GetDlgItem(IDC_ABOUT_ICON)).SetIcon(AtlLoadIconImage(IDI_MODULE, LR_DEFAULTCOLOR, 48, 48));
    51                 #pragma region Create and apply title font
     71                #pragma region Title Font
     72                m_TitleFont = CreateTitleFont();
     73                CStatic(GetDlgItem(IDC_ABOUT_TITLE)).SetFont(m_TitleFont);
     74                #pragma endregion
     75                #pragma region Disclaimer Font
    5276                {
    53                         CLogFont LogFont;
    54                         LogFont.lfHeight = -MulDiv(12, GetDeviceCaps(CClientDC(m_hWnd), LOGPIXELSY), 72);
    55                         LogFont.lfWeight = FW_BOLD;
    56                         LogFont.lfItalic = TRUE;
    57                         _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Arial"), _TRUNCATE);
    58                         _W(m_TitleFont.CreateFontIndirect(&LogFont));
    59                         CStatic(GetDlgItem(IDC_ABOUT_TITLE)).SetFont(m_TitleFont);
    60                 }
    61                 #pragma endregion
    62                 #pragma region Create and apply disclaimer font
    63                 {
    64                         CLogFont LogFont;
    65                         LogFont.lfHeight = -MulDiv(7, GetDeviceCaps(CClientDC(m_hWnd), LOGPIXELSY), 72);
    66                         LogFont.lfWeight = FW_NORMAL;
    67                         _tcsncpy_s(LogFont.lfFaceName, _countof(LogFont.lfFaceName), _T("Lucida Console"), _TRUNCATE);
    68                         _W(m_DisclaimerFont.CreateFontIndirect(&LogFont));
     77                        m_DisclaimerFont = CreateDisclaimerFont();
    6978                        CStatic CopyrightWarningText = GetDlgItem(IDC_ABOUT_COPYRIGHTWARNING);
    7079                        CopyrightWarningText.SetFont(m_DisclaimerFont);
     
    8998                }
    9099                #pragma endregion
    91                 #pragma region Update version text
     100                #pragma region Version Text
    92101                CStatic ProductVersionStatic = GetDlgItem(IDC_ABOUT_PRODUCTVERSION), FileVersionStatic = GetDlgItem(IDC_ABOUT_FILEVERSION);
    93102                CString sProductVersionFormat, sFileVersionFormat;
     
    98107                FileVersionStatic.SetWindowText(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(sModulePath), sFileVersionFormat));
    99108                #pragma endregion
    100                 #pragma region Update hyperlinks
     109                #pragma region Hyperlinks
    101110                _W(m_WebsiteHyperStatic.SubclassWindow(GetDlgItem(IDC_ABOUT_WEBSITE)));
    102111                _W(m_EmailHyperStatic.SubclassWindow(GetDlgItem(IDC_ABOUT_EMAIL)));
    103112                #pragma endregion
    104                 #pragma region Update caption
     113                #pragma region Caption
    105114                {
    106 #if _TRACE
    107                         CString sCaption;
    108                         _W(GetWindowText(sCaption));
    109                         sCaption.Append(_T(" // "));
    110 #if _DEVELOPMENT
    111                         sCaption.Append(_T("Dev "));
    112 #endif // _DEVELOPMENT
    113                         sCaption.Append(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath())));
    114                         _W(SetWindowText(sCaption));
    115 #endif // _TRACE
     115                        #if _TRACE || defined(_WIN64)
     116                                CString sCaption;
     117                                _W(GetWindowText(sCaption));
     118                                sCaption.Append(_T(" // "));
     119                                #if _DEVELOPMENT
     120                                        sCaption.Append(_T("Dev "));
     121                                #endif // _DEVELOPMENT
     122                                sCaption.Append(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath())));
     123                                #if defined(_WIN64)
     124                                        sCaption.Append(_T(" (x64)"));
     125                                #endif // defined(_WIN64)
     126                                _W(SetWindowText(sCaption));
     127                        #endif // _TRACE || defined(_WIN64)
    116128                }
    117129                #pragma endregion
    118                 #pragma region Update window position and focus
     130                #pragma region Window Position and Focus
    119131                _W(CenterWindow(GetParent()));
    120132                GetDlgItem(IDOK).SetFocus();
  • trunk/DirectShowSpy/DirectShowSpy.rc

    r231 r233  
    5959
    6060VS_VERSION_INFO VERSIONINFO
    61  FILEVERSION  1, 0, 0, 1065
     61 FILEVERSION  1, 0, 0, 1090
    6262 PRODUCTVERSION 1,0,0,1
    6363 FILEFLAGSMASK 0x3fL
     
    7878            VALUE "CompanyName", "Roman Ryltsov"
    7979            VALUE "FileDescription", "Alax.Info DirectShow Spy Module"
    80             VALUE "FileVersion",  "1, 0, 0, 1065\0"
     80            VALUE "FileVersion",  "1, 0, 0, 1090\0"
    8181            VALUE "InternalName", "DirectShowSpy.dll"
    8282            VALUE "LegalCopyright", "Copyright © Alax.Info, Roman Ryltsov, 2008-2014"
     
    257257END
    258258
     259IDD_FILTERGRAPHHELPER_EMAIL DIALOGEX 0, 0, 374, 254
     260STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
     261EXSTYLE WS_EX_CONTROLPARENT
     262FONT 8, "MS Shell Dlg", 400, 0, 0x0
     263BEGIN
     264    LTEXT           "Email DirectShow Filter Graph ",IDC_FILTERGRAPHHELPER_EMAIL_TITLE,6,0,294,18
     265    LTEXT           "&From: ",IDC_STATIC,6,26,22,8
     266    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_FROM,102,24,180,14,ES_AUTOHSCROLL
     267    LTEXT           "&To: ",IDC_STATIC,6,44,14,8
     268    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_TO,102,42,240,14,ES_AUTOHSCROLL
     269    LTEXT           "&Method/Protocol: ",IDC_STATIC,6,62,58,8
     270    COMBOBOX        IDC_FILTERGRAPHHELPER_EMAIL_METHOD,102,60,210,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     271    LTEXT           "SMTP S&erver Host and Port: ",IDC_STATIC,6,80,92,8
     272    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_HOST,102,78,150,14,ES_AUTOHSCROLL
     273    LTEXT           "&Username: ",IDC_STATIC,6,98,38,8
     274    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_USERNAME,102,96,120,14,ES_AUTOHSCROLL
     275    LTEXT           "P&assword: ",IDC_STATIC,6,116,36,8
     276    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_PASSWORD,102,114,120,14,ES_PASSWORD | ES_AUTOHSCROLL
     277    EDITTEXT        IDC_FILTERGRAPHHELPER_EMAIL_BODY,6,138,360,84,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
     278    PUSHBUTTON      "&Send",IDC_FILTERGRAPHHELPER_EMAIL_SEND,306,228,50,14
     279END
     280
    259281
    260282/////////////////////////////////////////////////////////////////////////////
     
    266288GUIDELINES DESIGNINFO
    267289BEGIN
    268     IDD_ABOUT, DIALOG
     290    IDD_FILTERGRAPHHELPER_EMAIL, DIALOG
    269291    BEGIN
     292        RIGHTMARGIN, 308
     293        BOTTOMMARGIN, 248
    270294    END
    271 
    272     IDD_GRAPHBUILDERCALLBACK_GRAPH_PROPERTYPAGE, DIALOG
    273     BEGIN
    274         LEFTMARGIN, 6
    275         RIGHTMARGIN, 221
    276         TOPMARGIN, 6
    277         BOTTOMMARGIN, 193
    278     END
    279 
    280     IDD_REGISTRATION_REGISTRATION_PROPERTYPAGE, DIALOG
    281     BEGIN
    282         LEFTMARGIN, 6
    283         RIGHTMARGIN, 221
    284         TOPMARGIN, 6
    285         BOTTOMMARGIN, 193
    286     END
    287 
    288     IDD_FILTERGRAPHLIST_LIST_PROPERTYPAGE, DIALOG
    289     BEGIN
    290         LEFTMARGIN, 6
    291         RIGHTMARGIN, 221
    292         TOPMARGIN, 6
    293         BOTTOMMARGIN, 193
    294     END
    295 
    296     IDD_FILTERGRAPHHELPER_PROPERTYFRAME, DIALOG
    297     BEGIN
    298     END
    299295END
    300296#endif    // APSTUDIO_INVOKED
    301297
     298
     299/////////////////////////////////////////////////////////////////////////////
     300//
     301// TYPELIB
     302//
     303
     304IDR_EMAILTOOLS          TYPELIB                 "..\\..\\Repository-Private\\Utilities\\EmailTools\\_Bin\\Win32\\Release\\EmailTools\\EmailTools.tlb"
    302305
    303306/////////////////////////////////////////////////////////////////////////////
     
    386389END
    387390
     391STRINGTABLE
     392BEGIN
     393    IDC_FILTERGRAPHHELPER_EMAIL_METHOD
     394                            "Google Mail (SMTP, TLS Connection)\nSMTP, TLS Connection, Plain Text Authentication (TLS, PLAIN)\nSMTP, SSL Connection, Plain Text Authentication (SSL, PLAIN)\nSMTP, Digest Authentication (CRAM-MD5)\nSMTP, Plain Text Authentication (PLAIN)\nSMTP, No Authentication\n"
     395END
     396
    388397#endif    // English (United States) resources
    389398/////////////////////////////////////////////////////////////////////////////
  • trunk/DirectShowSpy/DirectShowSpy.vcxproj

    r199 r233  
    440440  </ItemGroup>
    441441  <ItemGroup>
     442    <None Include="..\..\Repository-Private\Utilities\EmailTools\_Bin\Win32\Release\EmailTools\EmailTools.tlb" />
    442443    <None Include="DirectShowSpy.def" />
    443444    <None Include="DirectShowSpy.rgs" />
  • trunk/DirectShowSpy/DirectShowSpy.vcxproj.filters

    r199 r233  
    5858      <Filter>Resource Files</Filter>
    5959    </None>
     60    <None Include="..\..\Repository-Private\Utilities\EmailTools\_Bin\Win32\Release\EmailTools\EmailTools.tlb" />
    6061  </ItemGroup>
    6162  <ItemGroup>
  • trunk/DirectShowSpy/DirectShowSpy_i.c

    r231 r233  
    77
    88 /* File created by MIDL compiler version 7.00.0555 */
    9 /* at Fri Jan 10 00:26:35 2014
     9/* at Fri Jan 10 11:37:20 2014
    1010 */
    1111/* Compiler settings for DirectShowSpy.idl:
  • trunk/DirectShowSpy/DirectShowSpy_i.h

    r231 r233  
    55
    66 /* File created by MIDL compiler version 7.00.0555 */
    7 /* at Fri Jan 10 00:26:35 2014
     7/* at Fri Jan 10 11:37:20 2014
    88 */
    99/* Compiler settings for DirectShowSpy.idl:
  • trunk/DirectShowSpy/DirectShowSpy_p.c

    r231 r233  
    55
    66 /* File created by MIDL compiler version 7.00.0555 */
    7 /* at Fri Jan 10 00:26:35 2014
     7/* at Fri Jan 10 11:37:20 2014
    88 */
    99/* Compiler settings for DirectShowSpy.idl:
  • trunk/DirectShowSpy/FilterGraphHelper.h

    r231 r233  
    1010#include "Common.h"
    1111#include "AboutDialog.h"
     12#include "..\..\Repository-Private\Utilities\EmailTools\Message.h"
    1213
    1314////////////////////////////////////////////////////////////
     
    172173
    173174                ////////////////////////////////////////////////////
     175                // CEmailDialog
     176
     177                class CEmailDialog :
     178                        public CDialogImpl<CEmailDialog>,
     179                        public CDialogResize<CEmailDialog>
     180                {
     181                public:
     182                        enum { IDD = IDD_FILTERGRAPHHELPER_EMAIL };
     183
     184                BEGIN_MSG_MAP_EX(CEmailDialog)
     185                        //CHAIN_MSG_MAP(CDialogImpl<CEmailDialog>)
     186                        CHAIN_MSG_MAP(CDialogResize<CEmailDialog>)
     187                        MSG_WM_INITDIALOG(OnInitDialog)
     188                        MSG_WM_DESTROY(OnDestroy)
     189                        MSG_WM_SHOWWINDOW(OnShowWindow)
     190                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_FROM, EN_CHANGE, OnChanged)
     191                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_TO, EN_CHANGE, OnChanged)
     192                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_METHOD, CBN_SELENDOK, OnChanged)
     193                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_HOST, EN_CHANGE, OnChanged)
     194                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_USERNAME, EN_CHANGE, OnChanged)
     195                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_PASSWORD, EN_CHANGE, OnChanged)
     196                        COMMAND_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_BODY, EN_CHANGE, OnChanged)
     197                        COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_EMAIL_SEND, OnSend)
     198                        REFLECT_NOTIFICATIONS()
     199                END_MSG_MAP()
     200
     201                BEGIN_DLGRESIZE_MAP(CEmailDialog)
     202                        DLGRESIZE_CONTROL(IDC_FILTERGRAPHHELPER_EMAIL_BODY, DLSZ_SIZE_X | DLSZ_SIZE_Y)
     203                        DLGRESIZE_CONTROL(IDC_FILTERGRAPHHELPER_EMAIL_SEND, DLSZ_MOVE_X | DLSZ_MOVE_Y)
     204                END_DLGRESIZE_MAP()
     205
     206                private:
     207                        CPropertyFrameDialog* m_pOwner;
     208                        BOOL m_bActivating;
     209                        CStatic m_TitleStatic;
     210                        CFont m_TitleFont;
     211                        CRoEdit m_FromEdit;
     212                        CRoEdit m_ToEdit;
     213                        CRoComboBoxT<> m_MethodComboBox;
     214                        CRoEdit m_HostEdit;
     215                        CRoEdit m_UsernameEdit;
     216                        CRoEdit m_PasswordEdit;
     217                        CRoEdit m_BodyEdit;
     218                        CButton m_SendButton;
     219                        CString m_sFilterGraphText;
     220                        CRoMapT<INT_PTR, BOOL> m_ChangeMap;
     221
     222                public:
     223                // CEmailDialog
     224                        VOID InitializeControlsFromRegistry()
     225                        {
     226                                CRegKey Key;
     227                                Key.Open(HKEY_CURRENT_USER, REGISTRY_ROOT, KEY_READ);
     228                                if(!Key)
     229                                        return;
     230                                CString sMessageString = _RegKeyHelper::QueryStringValue(Key, _T("Email Message Template"));
     231                                if(sMessageString.IsEmpty())
     232                                        return;
     233                                _ATLTRY
     234                                {
     235                                        CObjectPtr<CMessage> pMessage;
     236                                        pMessage.Construct();
     237                                        pMessage->LoadTypeInfo(IDR_EMAILTOOLS);
     238                                        pMessage->SetAsString(CStringA(sMessageString));
     239                                        #pragma region Sender and Recipients
     240                                        CComBSTR sSender, sToRecipients;
     241                                        __C(pMessage->get_Sender(&sSender));
     242                                        __C(pMessage->get_ToRecipients(&sToRecipients));
     243                                        m_FromEdit.SetValue(CString(sSender));
     244                                        m_ToEdit.SetValue(CString(sToRecipients));
     245                                        #pragma endregion
     246                                        CComBSTR sAuthMethods;
     247                                        __C(pMessage->get_AuthMethods(&sAuthMethods));
     248                                        VARIANT_BOOL bSecureSocketsLayer, bTransportLayerSecurity;
     249                                        __C(pMessage->get_SecureSocketsLayer(&bSecureSocketsLayer));
     250                                        __C(pMessage->get_TransportLayerSecurity(&bTransportLayerSecurity));
     251                                        #pragma region Host and Port
     252                                        CComBSTR sHost;
     253                                        __C(pMessage->get_ServerHost(&sHost));
     254                                        LONG nPort = 0;
     255                                        __C(pMessage->get_ServerPort(&nPort));
     256                                        CString sHostT(sHost);
     257                                        if(nPort)
     258                                                sHostT += AtlFormatString(_T(":%d"), nPort);
     259                                        m_HostEdit.SetValue(sHostT);
     260                                        #pragma endregion
     261                                        #pragma region User Name and Password
     262                                        CComBSTR sAuthName, sAuthPassword;
     263                                        __C(pMessage->get_AuthName(&sAuthName));
     264                                        __C(pMessage->get_AuthPassword(&sAuthPassword));
     265                                        m_UsernameEdit.SetValue(CString(sAuthName));
     266                                        m_PasswordEdit.SetValue(CString(sAuthPassword));
     267                                        #pragma endregion
     268                                        m_MethodComboBox.SetCurSel(0);
     269                                        if(bTransportLayerSecurity != ATL_VARIANT_FALSE && sHostT.CompareNoCase(_T("smtp.gmail.com")) == 0)
     270                                        {
     271                                                //m_MethodComboBox.SetCurSel(0);
     272                                        } else
     273                                        {
     274                                                if(bTransportLayerSecurity != ATL_VARIANT_FALSE)
     275                                                        m_MethodComboBox.SetCurSel(1);
     276                                                else if(bSecureSocketsLayer != ATL_VARIANT_FALSE)
     277                                                        m_MethodComboBox.SetCurSel(2);
     278                                                else if(CString(sAuthMethods).CompareNoCase(_T("cram-md5")) == 0)
     279                                                        m_MethodComboBox.SetCurSel(3);
     280                                                else if(!CString(sAuthName).IsEmpty())
     281                                                        m_MethodComboBox.SetCurSel(4);
     282                                                else
     283                                                        m_MethodComboBox.SetCurSel(5);
     284                                        }
     285                                }
     286                                _ATLCATCHALL()
     287                                {
     288                                        _Z_EXCEPTION();
     289                                }
     290                        }
     291                        VOID InitializeBody()
     292                        {
     293                                CString sText;
     294                                sText += _T("(add notes here)") _T("\r\n") _T("\r\n");
     295                                sText += _T("* * *") _T("\r\n") _T("\r\n");
     296                                #define I FormatIdentifier
     297                                #pragma region System
     298                                {
     299                                        sText += _T("# System") _T("\r\n") _T("\r\n");
     300                                        OSVERSIONINFOEX Version;
     301                                        ZeroMemory(&Version, sizeof Version);
     302                                        Version.dwOSVersionInfoSize = sizeof Version;
     303                                        GetVersionEx((OSVERSIONINFO*) &Version);
     304                                        #pragma region Version
     305                                        CRoArrayT<CString> VersionArray;
     306                                        VersionArray.Add(AtlFormatString(_T("%s Build %s"), I(AtlFormatString(_T("%d.%d"), Version.dwMajorVersion, Version.dwMinorVersion)), I(Version.dwBuildNumber)));
     307                                        switch((Version.dwMajorVersion << 16) + Version.dwMinorVersion)
     308                                        {
     309                                        case 0x00050001:
     310                                                VersionArray.Add(_T("Windows XP"));
     311                                                break;
     312                                        case 0x00050002:
     313                                                if(Version.wProductType != VER_NT_WORKSTATION)
     314                                                        VersionArray.Add(_T("Windows Server 2003"));
     315                                                break;
     316                                        case 0x00060000:
     317                                                if(Version.wProductType == VER_NT_WORKSTATION)
     318                                                        VersionArray.Add(_T("Windows Vista"));
     319                                                else
     320                                                        VersionArray.Add(_T("Windows Server 2008"));
     321                                                break;
     322                                        case 0x00060001:
     323                                                if(Version.wProductType == VER_NT_WORKSTATION)
     324                                                        VersionArray.Add(_T("Windows 7"));
     325                                                else
     326                                                        VersionArray.Add(_T("Windows Server 2008 R2"));
     327                                                break;
     328                                        case 0x00060002:
     329                                                if(Version.wProductType == VER_NT_WORKSTATION)
     330                                                        VersionArray.Add(_T("Windows 8"));
     331                                                else
     332                                                        VersionArray.Add(_T("Windows Server 2012"));
     333                                                break;
     334                                        }
     335                                        if(_tcslen(Version.szCSDVersion))
     336                                                VersionArray.Add(Version.szCSDVersion);
     337                                        if(Version.wServicePackMajor)
     338                                                VersionArray.Add(AtlFormatString(_T("Service Pack %s"), I(AtlFormatString(_T("%d.%d"), Version.wServicePackMajor, Version.wServicePackMinor))));
     339                                        //Version.wSuiteMask, Version.wProductType
     340                                        sText += AtlFormatString(_T(" * ") _T("Version: %s") _T("\r\n"), _StringHelper::Join(VersionArray, _T("; ")));
     341                                        #pragma endregion
     342                                        TCHAR pszComputerName[256] = { 0 };
     343                                        DWORD nComputerNameLength = DIM(pszComputerName);
     344                                        GetComputerName(pszComputerName, &nComputerNameLength);
     345                                        sText += AtlFormatString(_T(" * ") _T("Computer Name: %s") _T("\r\n"), I(pszComputerName));
     346                                        TCHAR pszUserName[256] = { 0 };
     347                                        DWORD nUserNameLength = DIM(pszUserName);
     348                                        GetUserName(pszUserName, &nUserNameLength);
     349                                        CString sUserName(pszUserName);
     350                                        BOOL bAdministrator = FALSE;
     351                                        bool bIsMember = FALSE;
     352                                        if(CAccessToken().CheckTokenMembership(Sids::Admins(), &bIsMember) && bIsMember)
     353                                                bAdministrator = TRUE;
     354                                        sText += AtlFormatString(_T(" * ") _T("User Name: %s %s") _T("\r\n"), I(sUserName), bAdministrator ? _T("(Administrator)") : _T(""));
     355                                        SYSTEM_INFO SystemInformation;
     356                                        GetSystemInfo(&SystemInformation);
     357                                        #pragma region Architecture
     358                                        CString sArchitecture;
     359                                        switch(SystemInformation.wProcessorArchitecture)
     360                                        {
     361                                        case PROCESSOR_ARCHITECTURE_INTEL:
     362                                                sArchitecture = I(_T("x86"));
     363                                                break;
     364                                        case PROCESSOR_ARCHITECTURE_AMD64:
     365                                                sArchitecture = I(_T("AMD/Intel x64"));
     366                                                break;
     367                                        case PROCESSOR_ARCHITECTURE_IA64:
     368                                                sArchitecture = I(_T("Intel Itanium"));
     369                                                break;
     370                                        default:
     371                                                sArchitecture = I(SystemInformation.wProcessorArchitecture, _T("0x%04X"));
     372                                        }
     373                                        #if defined(_WIN64)
     374                                                sText += AtlFormatString(_T(" * ") _T("Architecture: %s (x64 Application)") _T("\r\n"), sArchitecture);
     375                                        #else
     376                                                sText += AtlFormatString(_T(" * ") _T("Architecture: %s") _T("\r\n"), sArchitecture);
     377                                        #endif // defined(_WIN64)
     378                                        #pragma endregion
     379                                        sText += AtlFormatString(_T(" * ") _T("Processors: %s, Active Mask %s") _T("\r\n"), I(SystemInformation.dwNumberOfProcessors), I(SystemInformation.dwActiveProcessorMask, _T("0x%X")));
     380                                        sText += AtlFormatString(_T(" * ") _T("Page Size: %s") _T("\r\n"), I(SystemInformation.dwPageSize, _T("0x%X")));
     381                                        sText += AtlFormatString(_T(" * ") _T("Application Address Space: %s..%s") _T("\r\n"), I(SystemInformation.lpMinimumApplicationAddress), I(SystemInformation.lpMaximumApplicationAddress));
     382                                        #pragma region Memory
     383                                        MEMORYSTATUSEX MemoryStatus = { sizeof MemoryStatus };
     384                                        _W(GlobalMemoryStatusEx(&MemoryStatus));
     385                                        sText += AtlFormatString(_T(" * ") _T("Physical Memory: %s MB") _T("\r\n"), I(_StringHelper::FormatNumber((LONG) (MemoryStatus.ullTotalPhys >> 20))));
     386                                        sText += AtlFormatString(_T(" * ") _T("Committed Memory Limit: %s MB") _T("\r\n"), I(_StringHelper::FormatNumber((LONG) (MemoryStatus.ullTotalPageFile >> 20))));
     387                                        #pragma endregion
     388                                }
     389                                #pragma endregion
     390                                sText += AtlFormatString(_T(" * ") _T("Module Version: %s") _T("\r\n"), I(_VersionInfoHelper::GetVersionString(_VersionInfoHelper::GetFileVersion(_VersionInfoHelper::GetModulePath()))));
     391                                SYSTEMTIME LocalTime;
     392                                GetLocalTime(&LocalTime);
     393                                sText += AtlFormatString(_T(" * ") _T("Local Time: %s") _T("\r\n"), I(_StringHelper::FormatDateTime(&LocalTime)));
     394                                sText += _T("\r\n");
     395                                #undef I
     396                                m_BodyEdit.SetValue(sText);
     397                        }
     398                        VOID UpdateControls()
     399                        {
     400                                BOOL bAllowSend = TRUE;
     401                                if(m_ToEdit.GetValue().Trim().IsEmpty())
     402                                        bAllowSend = FALSE;
     403                                const INT nMethod = m_MethodComboBox.GetCurSel();
     404                                m_HostEdit.GetWindow(GW_HWNDPREV).EnableWindow(nMethod != 0); // Google Mail
     405                                m_HostEdit.EnableWindow(nMethod != 0); // Google Mail
     406                                m_UsernameEdit.GetWindow(GW_HWNDPREV).EnableWindow(nMethod != 5); // No Authentication
     407                                m_UsernameEdit.EnableWindow(nMethod != 5); // No Authentication
     408                                m_PasswordEdit.GetWindow(GW_HWNDPREV).EnableWindow(nMethod != 5); // No Authentication
     409                                m_PasswordEdit.EnableWindow(nMethod != 5); // No Authentication
     410                                if(nMethod != 0) // Google Mail
     411                                        if(m_HostEdit.GetValue().Trim().IsEmpty())
     412                                                bAllowSend = FALSE;
     413                                if(nMethod != 5) // No Authentication
     414                                {
     415                                        if(m_UsernameEdit.GetValue().Trim().IsEmpty())
     416                                                bAllowSend = FALSE;
     417                                        if(m_PasswordEdit.GetValue().Trim().IsEmpty())
     418                                                bAllowSend = FALSE;
     419                                }
     420                                m_SendButton.EnableWindow(bAllowSend);
     421                        }
     422
     423                // Window Message Handler
     424                        LRESULT OnInitDialog(HWND, LPARAM lParam)
     425                        {
     426                                m_pOwner = (CPropertyFrameDialog*) lParam;
     427                                m_bActivating = TRUE;
     428                                _ATLTRY
     429                                {
     430                                        CWaitCursor WaitCursor;
     431                                        m_TitleStatic = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_TITLE);
     432                                        CLogFont LogFont;
     433                                        LogFont.SetHeight(12, CClientDC(m_hWnd));
     434                                        LogFont.lfWeight = FW_BOLD;
     435                                        _tcsncpy_s(LogFont.lfFaceName, _T("Verdana"), _TRUNCATE);
     436                                        _W(m_TitleFont.CreateFontIndirect(&LogFont));
     437                                        m_TitleStatic.SetFont(m_TitleFont);
     438                                        m_FromEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_FROM);
     439                                        m_ToEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_TO);
     440                                        m_MethodComboBox.Initialize(GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_METHOD));
     441                                        m_MethodComboBox.SetCurSel(0);
     442                                        m_HostEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_HOST);
     443                                        m_UsernameEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_USERNAME);
     444                                        m_PasswordEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_PASSWORD);
     445                                        m_BodyEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_BODY);
     446                                        m_BodyEdit.SetFont(m_pOwner->m_TextFont);
     447                                        m_SendButton = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_SEND);
     448                                        DlgResize_Init(TRUE);
     449                                        InitializeControlsFromRegistry();
     450                                        InitializeBody();
     451                                        m_sFilterGraphText = m_pOwner->m_Owner.GetText();
     452                                        UpdateControls();
     453                                        m_bActivating = FALSE;
     454                                }
     455                                _ATLCATCH(Exception)
     456                                {
     457                                        for(CWindow Window = GetWindow(GW_CHILD); Window; Window = Window.GetWindow(GW_HWNDNEXT))
     458                                                Window.EnableWindow(FALSE);
     459                                        AtlExceptionMessageBox(m_hWnd, Exception);
     460                                }
     461                                return TRUE;
     462                        }
     463                        LRESULT OnDestroy()
     464                        {
     465                                return 0;
     466                        }
     467                        LRESULT OnShowWindow(BOOL bShowing, INT)
     468                        {
     469                                if(bShowing && !m_ChangeMap.Lookup(IDC_FILTERGRAPHHELPER_EMAIL_BODY))
     470                                        InitializeBody();
     471                                return 0;
     472                        }
     473                        LRESULT OnChanged(UINT, INT_PTR nIdentifier, HWND)
     474                        {
     475                                if(m_bActivating)
     476                                        return 0;
     477                                m_ChangeMap[nIdentifier] = TRUE;
     478                                UpdateControls();
     479                                return 0;
     480                        }
     481                        LRESULT OnChanged(NMHDR* pHeader)
     482                        {
     483                                return OnChanged(pHeader->code, pHeader->idFrom, pHeader->hwndFrom);
     484                        }
     485                        LRESULT OnSend(UINT, INT, HWND)
     486                        {
     487                                CWaitCursor WaitCursor;
     488                                CObjectPtr<CMessage> pMessage;
     489                                pMessage.Construct();
     490                                #pragma region Setup
     491                                pMessage->LoadTypeInfo(IDR_EMAILTOOLS);
     492                                __C(pMessage->put_Sender(CComBSTR(m_FromEdit.GetValue())));
     493                                __C(pMessage->put_ToRecipients(CComBSTR(m_ToEdit.GetValue())));
     494                                // NOTE:
     495                                // 0 Google Mail (SMTP, TLS Connection)
     496                                // 1 SMTP, TLS Connection, Plain Text Authentication (TLS, PLAIN)
     497                                // 2 SMTP, SSL Connection, Plain Text Authentication (SSL, PLAIN)
     498                                // 3 SMTP, Digest Authentication (CRAM-MD5)
     499                                // 4 SMTP, Plain Text Authentication (PLAIN)
     500                                // 5 SMTP, No Authentication
     501                                const INT nMethod = m_MethodComboBox.GetCurSel();
     502                                __C(pMessage->put_SecureSocketsLayer((nMethod == 2) ? ATL_VARIANT_TRUE : ATL_VARIANT_FALSE));
     503                                __C(pMessage->put_TransportLayerSecurity((nMethod < 2) ? ATL_VARIANT_TRUE : ATL_VARIANT_FALSE));
     504                                if(nMethod != 5)
     505                                {
     506                                        __C(pMessage->put_AuthMethods(CComBSTR(_T("plain"))));
     507                                        __C(pMessage->put_AuthName(CComBSTR(m_UsernameEdit.GetValue())));
     508                                        __C(pMessage->put_AuthPassword(CComBSTR(m_PasswordEdit.GetValue())));
     509                                }
     510                                switch(nMethod)
     511                                {
     512                                case 0:
     513                                        __C(pMessage->put_ServerHost(CComBSTR(_T("smtp.gmail.com"))));
     514                                        break;
     515                                default:
     516                                        CString sHost = m_HostEdit.GetValue();
     517                                        sHost.Trim();
     518                                        const INT nPortPosition = sHost.Find(_T(":"));
     519                                        if(nPortPosition >= 0)
     520                                        {
     521                                                INT nPort;
     522                                                __D(AtlStringToInteger(sHost.Mid(nPortPosition + 1), nPort), E_UNNAMED);
     523                                                __C(pMessage->put_ServerPort(nPort));
     524                                                sHost = sHost.Left(nPortPosition);
     525                                        }
     526                                        __C(pMessage->put_ServerHost(CComBSTR(sHost)));
     527                                        break;
     528                                }
     529                                switch(nMethod)
     530                                {
     531                                case 3:
     532                                        __C(pMessage->put_AuthMethods(CComBSTR(_T("cram-md5"))));
     533                                        break;
     534                                }
     535                                #pragma endregion
     536                                CStringA sMessageString = pMessage->GetAsString();
     537                                CString sText = m_BodyEdit.GetValue();
     538                                sText.TrimRight(_T("\t\n\r "));
     539                                sText += _T("\r\n") _T("\r\n") _T("* * *") _T("\r\n") _T("\r\n");
     540                                sText += m_sFilterGraphText;
     541                                __C(pMessage->put_Body(CComBSTR(sText)));
     542                                CString sSubject = AtlFormatString(_T("DirectShow Filter Graph by %s"), AtlLoadString(IDS_PROJNAME));
     543                                __C(pMessage->put_Subject(CComBSTR(sSubject)));
     544                                __C(pMessage->Send());
     545                                MessageBeep(MB_OK);
     546                                _RegKeyHelper::SetStringValue(HKEY_CURRENT_USER, REGISTRY_ROOT, _T("Email Message Template"), CString(sMessageString));
     547                                return 0;
     548                        }
     549                };
     550
     551                ////////////////////////////////////////////////////
    174552                // CData
    175553
     
    177555                {
    178556                public:
     557
     558                        /////////////////////////////////////////////////////////
     559                        // TYPE
     560
     561                        typedef enum _TYPE
     562                        {
     563                                TYPE_UNKNOWN = 0,
     564                                TYPE_FILTERS,
     565                                TYPE_FILTER,
     566                                TYPE_FILTERPROPERTYPAGE,
     567                                TYPE_EMAIL,
     568                        } TYPE;
     569
     570                public:
     571                        TYPE m_Type;
    179572                        CComPtr<IBaseFilter> m_pBaseFilter;
    180573                        CLSID m_ClassIdentifier;
     
    185578                public:
    186579                // CData
    187                         CData() :
     580                        CData(TYPE Type = TYPE_UNKNOWN) :
     581                                m_Type(Type),
    188582                                m_ClassIdentifier(CLSID_NULL)
    189583                        {
    190584                        }
    191585                        CData(IBaseFilter* pBaseFilter) :
     586                                m_Type(TYPE_FILTER),
    192587                                m_pBaseFilter(pBaseFilter),
    193588                                m_ClassIdentifier(CLSID_NULL)
     
    195590                        }
    196591                        CData(IBaseFilter* pBaseFilter, const CLSID& ClassIdentifier, IPropertyPage* pPropertyPage) :
     592                                m_Type(TYPE_FILTERPROPERTYPAGE),
    197593                                m_pBaseFilter(pBaseFilter),
    198594                                m_ClassIdentifier(ClassIdentifier),
     
    223619                CRoTreeViewT<CData, CRoListControlDataTraitsT> m_TreeView;
    224620                CTreeItem m_FiltersItem;
     621                CTreeItem m_EmailItem;
    225622                CTabCtrl m_Tab;
    226623                CRoEdit m_TextEdit;
     
    231628                CButton m_ApplyButton;
    232629                CObjectPtr<CPropertyPageSite> m_pCurrentSite;
     630                CEmailDialog m_EmailDialog;
    233631
    234632        public:
     
    249647                        CWindowRedraw TreeViewRedraw(m_TreeView);
    250648                        m_TreeView.DeleteAllItems();
    251                         CTreeItem FiltersItem = m_TreeView.InsertItem(NULL, NULL, CData(), _T("Filters"));
     649                        #pragma region Filter
     650                        CTreeItem FiltersItem = m_TreeView.InsertItem(NULL, NULL, CData(CData::TYPE_FILTERS), _T("Filters"));
    252651                        _FilterGraphHelper::CFilterArray FilterArray;
    253652                        _FilterGraphHelper::GetGraphFilters(m_Owner.m_pFilterGraph, FilterArray);
     
    258657                                CTreeItem FilterItem = m_TreeView.InsertItem(FiltersItem, PreviousFilterItem, CData(pBaseFilter), CString(_FilterGraphHelper::GetFilterName(pBaseFilter)));
    259658                                PreviousFilterItem = FilterItem;
     659                                #pragma region Property Page
    260660                                const CComQIPtr<ISpecifyPropertyPages> pSpecifyPropertyPages = pBaseFilter;
    261661                                if(!pSpecifyPropertyPages)
     
    294694                                        _Z_EXCEPTION();
    295695                                }
     696                                #pragma endregion
    296697                        }
    297698                        m_TreeView.Expand(FiltersItem);
    298699                        m_FiltersItem.m_hTreeItem = FiltersItem;
    299700                        m_FiltersItem.m_pTreeView = &m_TreeView;
    300                         // TODO: Email Item
     701                        #pragma endregion
     702                        CTreeItem EmailItem = m_TreeView.InsertItem(NULL, FiltersItem, CData(CData::TYPE_EMAIL), _T("Email"));
     703                        m_EmailItem.m_hTreeItem = EmailItem;
     704                        m_EmailItem.m_pTreeView = &m_TreeView;
    301705                }
    302706                VOID HideCurrentSite()
     
    367771                                m_CancelButton = GetDlgItem(IDCANCEL);
    368772                                m_ApplyButton = GetDlgItem(IDC_FILTERGRAPHHELPER_PROPERTYFRAME_APPLY);
     773                                __E(m_EmailDialog.Create(m_hWnd, (LPARAM) this));
    369774                                DlgResize_Init(TRUE);
    370775                                UpdateTree();
     
    413818                        {
    414819                                CData& Data = m_TreeView.GetItemData(TreeItem);
     820                                if(Data.m_Type != CData::TYPE_EMAIL)
     821                                        m_EmailDialog.ShowWindow(SW_HIDE);
     822                                #pragma endregion
    415823                                if(Data.m_pBaseFilter)
    416824                                {
     
    512920                                        CWaitCursor WaitCursor;
    513921                                        HideCurrentSite();
    514                                         m_TextEdit.ShowWindow(SW_SHOW);
    515                                         m_TextEdit.SetValue(m_Owner.GetText());
     922                                        switch(Data.m_Type)
     923                                        {
     924                                        #pragma region TYPE_EMAIL
     925                                        case CData::TYPE_EMAIL:
     926                                                m_TextEdit.ShowWindow(SW_HIDE);
     927                                                _W(m_EmailDialog.SetWindowPos(NULL, GetTextEditPosition(), SWP_NOZORDER | SWP_SHOWWINDOW));
     928                                                break;
     929                                        #pragma endregion
     930                                        default:
     931                                                m_TextEdit.ShowWindow(SW_SHOW);
     932                                                m_TextEdit.SetValue(m_Owner.GetText());
     933                                                m_EmailDialog.ShowWindow(SW_HIDE);
     934                                        }
    516935                                        m_ApplyButton.EnableWindow(FALSE);
    517936                                }
     
    520939                                HideCurrentSite();
    521940                                m_TextEdit.ShowWindow(SW_HIDE);
     941                                m_EmailDialog.ShowWindow(SW_HIDE);
    522942                                m_ApplyButton.EnableWindow(FALSE);
    523943                        }
     
    6781098                sText = _T("``");
    6791099                sText.Insert(1, AtlFormatString(pszFormat, nValue));
     1100                return sText;
     1101        }
     1102        static CString FormatIdentifier(const VOID* pvValue, LPCTSTR pszFormat = _T("0x%p"))
     1103        {
     1104                CString sText;
     1105                sText = _T("``");
     1106                sText.Insert(1, AtlFormatString(pszFormat, pvValue));
    6801107                return sText;
    6811108        }
     
    12591686                m_pFilterGraph = pFilterGraph;
    12601687        }
     1688        BOOL SetFilterGraph(IUnknown* pFilterGraphUnknown)
     1689        {
     1690                CComQIPtr<IFilterGraph> pFilterGraph;
     1691                if(pFilterGraphUnknown)
     1692                {
     1693                        pFilterGraph = pFilterGraphUnknown;
     1694                        if(!pFilterGraph)
     1695                        {
     1696                                const CComQIPtr<IBaseFilter> pBaseFilter = pFilterGraphUnknown;
     1697                                if(!pBaseFilter)
     1698                                {
     1699                                        const CComQIPtr<IPin> pPin = pFilterGraphUnknown;
     1700                                        if(pPin)
     1701                                                pFilterGraph = _FilterGraphHelper::GetFilterGraph(_FilterGraphHelper::GetPinFilter(pPin));
     1702                                } else
     1703                                        pFilterGraph = _FilterGraphHelper::GetFilterGraph(pBaseFilter);
     1704                        }
     1705                }
     1706                CRoCriticalSectionLock DataLock(m_DataCriticalSection);
     1707                m_pFilterGraph = pFilterGraph;
     1708                return m_pFilterGraph != NULL;
     1709        }
    12611710        CString GetText() const
    12621711        {
     
    12851734                _ATLTRY
    12861735                {
    1287                         const CComQIPtr<IFilterGraph> pFilterGraph = pFilterGraphUnknown;
    1288                         __D(!pFilterGraphUnknown || pFilterGraph, E_INVALIDARG);
    1289                         SetFilterGraph(pFilterGraph);
     1736                        if(!SetFilterGraph(pFilterGraphUnknown))
     1737                                return S_FALSE;
    12901738                }
    12911739                _ATLCATCH(Exception)
  • trunk/DirectShowSpy/resource.h

    r231 r233  
    55#define IDI_MODULE                      10
    66#define IDR_MODULE                      11
     7#define IDR_EMAILTOOLS                  20
    78#define IDI_PRIVATE_INFORMATION         70
    89#define IDI_PRIVATE_WARNING             71
     
    1011#define IDI_LISTVIEW_FAILURE            81
    1112#define IDS_PROJNAME                    100
     13#define IDC_MAIN_EMAIL_METHOD           101
    1214#define IDR_FILTERGRAPHSPY              200
    1315#define IDR_NOTHREADFILTERGRAPHSPY      201
    1416#define IDR_FILTERMAPPERSPY             202
    1517#define IDR_SYSTEMDEVICEENUMERATORSPY   203
    16 #define IDC_BUTTON1                     218
    17 #define IDR_FILTERGRAPHHELPER           300
     18#define IDR_FILTERGRAPHHELPER           250
    1819#define IDS_REGISTRATION_PROPERTYSHEETCAPTION 900
    1920#define IDD_REGISTRATION_REGISTRATION_PROPERTYPAGE 910
     
    7071#define IDC_FILTERGRAPHHELPER_PROPERTYFRAME_APPLY 1507
    7172#define IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TEXT 1508
     73#define IDD_FILTERGRAPHHELPER_EMAIL     1600
     74#define IDC_FILTERGRAPHHELPER_EMAIL_TITLE 1601
     75#define IDC_FILTERGRAPHHELPER_EMAIL_FROM 1602
     76#define IDC_FILTERGRAPHHELPER_EMAIL_TO  1603
     77#define IDC_FILTERGRAPHHELPER_EMAIL_METHOD 1604
     78#define IDC_FILTERGRAPHHELPER_EMAIL_HOST 1605
     79#define IDC_FILTERGRAPHHELPER_EMAIL_USERNAME 1606
     80#define IDC_FILTERGRAPHHELPER_EMAIL_PASSWORD 1607
     81#define IDC_FILTERGRAPHHELPER_EMAIL_BODY 1608
     82#define IDC_FILTERGRAPHHELPER_EMAIL_SEND 1609
    7283#define IDD_ABOUT                       29900
    7384#define IDC_ABOUT_ICON                  29901
     
    8899#define _APS_NEXT_RESOURCE_VALUE        209
    89100#define _APS_NEXT_COMMAND_VALUE         32768
    90 #define _APS_NEXT_CONTROL_VALUE         219
     101#define _APS_NEXT_CONTROL_VALUE         221
    91102#define _APS_NEXT_SYMED_VALUE           103
    92103#endif
Note: See TracChangeset for help on using the changeset viewer.