├── .gitattributes ├── .gitignore ├── MemoryWatchDLL ├── ExpListdlg.cpp ├── ExpListdlg.h ├── ExpressionDlg.cpp ├── ExpressionDlg.h ├── MemoryWatchDLL.cpp ├── MemoryWatchDLL.def ├── MemoryWatchDLL.h ├── MemoryWatchDLL.rc ├── MemoryWatchDLL.vcxproj ├── MemoryWatchDLL.vcxproj.filters ├── ReadMe.txt ├── res │ └── MemoryWatchDLL.rc2 ├── resource.h ├── stdafx.cpp ├── stdafx.h └── targetver.h ├── MemoryWatchTool.sln ├── MemoryWatchTool ├── Common │ ├── ExpressionAnalysis.cpp │ └── ExpressionAnalysis.h ├── Expdlg.cpp ├── Expdlg.h ├── MemoryWatchTool.cpp ├── MemoryWatchTool.h ├── MemoryWatchTool.rc ├── MemoryWatchTool.vcxproj ├── MemoryWatchTool.vcxproj.filters ├── MemoryWatchToolDlg.cpp ├── MemoryWatchToolDlg.h ├── ReadMe.txt ├── res │ ├── MemoryWatchTool.ico │ └── MemoryWatchTool.rc2 ├── resource.h ├── stdafx.cpp ├── stdafx.h └── targetver.h ├── Pic ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png └── 8.png └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | [Dd]ebug/ 11 | [Dd]ebugPublic/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | bld/ 16 | [Bb]in/ 17 | [Oo]bj/ 18 | 19 | # Roslyn cache directories 20 | *.ide/ 21 | 22 | # MSTest test Results 23 | [Tt]est[Rr]esult*/ 24 | [Bb]uild[Ll]og.* 25 | 26 | #NUNIT 27 | *.VisualState.xml 28 | TestResult.xml 29 | 30 | # Build Results of an ATL Project 31 | [Dd]ebugPS/ 32 | [Rr]eleasePS/ 33 | dlldata.c 34 | 35 | *_i.c 36 | *_p.c 37 | *_i.h 38 | *.ilk 39 | *.meta 40 | *.obj 41 | *.pch 42 | *.pdb 43 | *.pgc 44 | *.pgd 45 | *.rsp 46 | *.sbr 47 | *.tlb 48 | *.tli 49 | *.tlh 50 | *.tmp 51 | *.tmp_proj 52 | *.log 53 | *.vspscc 54 | *.vssscc 55 | .builds 56 | *.pidb 57 | *.svclog 58 | *.scc 59 | 60 | # Chutzpah Test files 61 | _Chutzpah* 62 | 63 | # Visual C++ cache files 64 | ipch/ 65 | *.aps 66 | *.ncb 67 | *.opensdf 68 | *.sdf 69 | *.cachefile 70 | 71 | # Visual Studio profiler 72 | *.psess 73 | *.vsp 74 | *.vspx 75 | 76 | # TFS 2012 Local Workspace 77 | $tf/ 78 | 79 | # Guidance Automation Toolkit 80 | *.gpState 81 | 82 | # ReSharper is a .NET coding add-in 83 | _ReSharper*/ 84 | *.[Rr]e[Ss]harper 85 | *.DotSettings.user 86 | 87 | # JustCode is a .NET coding addin-in 88 | .JustCode 89 | 90 | # TeamCity is a build add-in 91 | _TeamCity* 92 | 93 | # DotCover is a Code Coverage Tool 94 | *.dotCover 95 | 96 | # NCrunch 97 | _NCrunch_* 98 | .*crunch*.local.xml 99 | 100 | # MightyMoose 101 | *.mm.* 102 | AutoTest.Net/ 103 | 104 | # Web workbench (sass) 105 | .sass-cache/ 106 | 107 | # Installshield output folder 108 | [Ee]xpress/ 109 | 110 | # DocProject is a documentation generator add-in 111 | DocProject/buildhelp/ 112 | DocProject/Help/*.HxT 113 | DocProject/Help/*.HxC 114 | DocProject/Help/*.hhc 115 | DocProject/Help/*.hhk 116 | DocProject/Help/*.hhp 117 | DocProject/Help/Html2 118 | DocProject/Help/html 119 | 120 | # Click-Once directory 121 | publish/ 122 | 123 | # Publish Web Output 124 | *.[Pp]ublish.xml 125 | *.azurePubxml 126 | ## TODO: Comment the next line if you want to checkin your 127 | ## web deploy settings but do note that will include unencrypted 128 | ## passwords 129 | #*.pubxml 130 | 131 | # NuGet Packages Directory 132 | packages/* 133 | ## TODO: If the tool you use requires repositories.config 134 | ## uncomment the next line 135 | #!packages/repositories.config 136 | 137 | # Enable "build/" folder in the NuGet Packages folder since 138 | # NuGet packages use it for MSBuild targets. 139 | # This line needs to be after the ignore of the build folder 140 | # (and the packages folder if the line above has been uncommented) 141 | !packages/build/ 142 | 143 | # Windows Azure Build Output 144 | csx/ 145 | *.build.csdef 146 | 147 | # Windows Store app package directory 148 | AppPackages/ 149 | 150 | # Others 151 | sql/ 152 | *.Cache 153 | ClientBin/ 154 | [Ss]tyle[Cc]op.* 155 | ~$* 156 | *~ 157 | *.dbmdl 158 | *.dbproj.schemaview 159 | *.pfx 160 | *.publishsettings 161 | node_modules/ 162 | 163 | # RIA/Silverlight projects 164 | Generated_Code/ 165 | 166 | # Backup & report files from converting an old project file 167 | # to a newer Visual Studio version. Backup files are not needed, 168 | # because we have git ;-) 169 | _UpgradeReport_Files/ 170 | Backup*/ 171 | UpgradeLog*.XML 172 | UpgradeLog*.htm 173 | 174 | # SQL Server files 175 | *.mdf 176 | *.ldf 177 | 178 | # Business Intelligence projects 179 | *.rdl.data 180 | *.bim.layout 181 | *.bim_*.settings 182 | 183 | # Microsoft Fakes 184 | FakesAssemblies/ 185 | 186 | # LightSwitch generated files 187 | GeneratedArtifacts/ 188 | _Pvt_Extensions/ 189 | ModelManifest.xml -------------------------------------------------------------------------------- /MemoryWatchDLL/ExpListdlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchDLL/ExpListdlg.cpp -------------------------------------------------------------------------------- /MemoryWatchDLL/ExpListdlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "../MemoryWatchTool/Common/ExpressionAnalysis.h" 3 | 4 | // CExpListdlg dialog 5 | 6 | class CExpListdlg : public CDialogEx 7 | { 8 | DECLARE_DYNAMIC(CExpListdlg) 9 | 10 | public: 11 | CExpListdlg(CWnd* pParent = NULL); // standard constructor 12 | virtual ~CExpListdlg(); 13 | 14 | // Dialog Data 15 | enum { IDD = IDD_DIALOG2 }; 16 | 17 | protected: 18 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 19 | virtual BOOL OnInitDialog(); 20 | DECLARE_MESSAGE_MAP() 21 | virtual void OnOK(); 22 | void release(); 23 | void RepaintEdit(_In_ CONST CRect& dlgRect); 24 | void ReapintListControl(_In_ CONST CRect& dlgRect); 25 | afx_msg void OnClose(); 26 | afx_msg void OnSize(UINT nType, int cx, int cy); 27 | private: 28 | CExpListdlg* pthis; 29 | CExpressionAnalysis ExpAnalysis; 30 | std::wstring wsExpressionText; 31 | public: 32 | void SetExpressionText(_In_ cwstring& wsText); 33 | void SetDlgPtr(CExpListdlg* p); 34 | BOOL AnalysisExpression(_In_ cwstring& wsText); 35 | afx_msg void OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult); 36 | virtual BOOL PreTranslateMessage(MSG* pMsg); 37 | }; 38 | -------------------------------------------------------------------------------- /MemoryWatchDLL/ExpressionDlg.cpp: -------------------------------------------------------------------------------- 1 | // ExpressionDlg.cpp : implementation file 2 | // 3 | 4 | #include "stdafx.h" 5 | #include "MemoryWatchDLL.h" 6 | #include "ExpressionDlg.h" 7 | #include "afxdialogex.h" 8 | 9 | // CExpressionDlg dialog 10 | 11 | IMPLEMENT_DYNAMIC(CExpressionDlg, CDialogEx) 12 | 13 | CExpressionDlg::CExpressionDlg(CWnd* pParent /*=NULL*/) 14 | : CDialogEx(CExpressionDlg::IDD, pParent) 15 | { 16 | 17 | } 18 | 19 | CExpressionDlg::~CExpressionDlg() 20 | { 21 | } 22 | 23 | void CExpressionDlg::DoDataExchange(CDataExchange* pDX) 24 | { 25 | CDialogEx::DoDataExchange(pDX); 26 | } 27 | 28 | 29 | BEGIN_MESSAGE_MAP(CExpressionDlg, CDialogEx) 30 | ON_WM_SIZE() 31 | END_MESSAGE_MAP() 32 | 33 | BOOL CExpressionDlg::OnInitDialog() 34 | { 35 | return TRUE; 36 | } 37 | 38 | 39 | // CExpressionDlg message handlers 40 | 41 | 42 | void CExpressionDlg::OnSize(UINT nType, int cx, int cy) 43 | { 44 | CDialogEx::OnSize(nType, cx, cy); 45 | 46 | // TODO: Add your message handler code here 47 | CRect RectDlg; 48 | this->GetClientRect(&RectDlg); 49 | RepaintEdit(RectDlg); 50 | Invalidate(); 51 | } 52 | 53 | void CExpressionDlg::RepaintEdit(_In_ CONST CRect& dlgRect) 54 | { 55 | CEdit* pEdit = reinterpret_cast(this->GetDlgItem(IDC_EDIT_EXPRESSION)); 56 | if (pEdit == nullptr) 57 | return; 58 | 59 | CRect RectEdit; 60 | pEdit->GetWindowRect(&RectEdit); 61 | this->ScreenToClient(&RectEdit); 62 | 63 | RectEdit.right = dlgRect.right - 20; 64 | pEdit->MoveWindow(&RectEdit); 65 | } 66 | 67 | 68 | BOOL CExpressionDlg::PreTranslateMessage(MSG* pMsg) 69 | { 70 | // TODO: Add your specialized code here and/or call the base class 71 | if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) 72 | { 73 | WCHAR wszText[1024] = { 0 }; 74 | CEdit* pEdit = reinterpret_cast(this->GetDlgItem(IDC_EDIT_EXPRESSION)); 75 | pEdit->GetWindowTextW(wszText, _countof(wszText) - 1); 76 | 77 | CExpListdlg * dlg = new CExpListdlg; 78 | dlg->SetDlgPtr(dlg); 79 | dlg->SetExpressionText(wszText); 80 | dlg->Create(IDD_DIALOG2, this); 81 | dlg->ShowWindow(SW_SHOW); 82 | dlg->AnalysisExpression(cwstring(wszText)); 83 | 84 | } 85 | return CDialogEx::PreTranslateMessage(pMsg); 86 | } 87 | 88 | 89 | void CExpressionDlg::OnOK() 90 | { 91 | // TODO: Add your specialized code here and/or call the base class 92 | 93 | //CDialogEx::OnOK(); 94 | } 95 | -------------------------------------------------------------------------------- /MemoryWatchDLL/ExpressionDlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | #include "ExpListdlg.h" 5 | // CExpressionDlg dialog 6 | 7 | class CExpressionDlg : public CDialogEx 8 | { 9 | DECLARE_DYNAMIC(CExpressionDlg) 10 | 11 | public: 12 | CExpressionDlg(CWnd* pParent = NULL); // standard constructor 13 | virtual ~CExpressionDlg(); 14 | 15 | // Dialog Data 16 | enum { IDD = IDD_DIALOG1 }; 17 | 18 | protected: 19 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 20 | virtual BOOL OnInitDialog(); 21 | DECLARE_MESSAGE_MAP() 22 | public: 23 | afx_msg void OnSize(UINT nType, int cx, int cy); 24 | void RepaintEdit(_In_ CONST CRect& dlgRect); 25 | 26 | virtual BOOL PreTranslateMessage(MSG* pMsg); 27 | virtual void OnOK(); 28 | }; 29 | -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.cpp: -------------------------------------------------------------------------------- 1 | // MemoryWatchDLL.cpp : Defines the initialization routines for the DLL. 2 | // 3 | 4 | #include "stdafx.h" 5 | #include "MemoryWatchDLL.h" 6 | #include "ExpressionDlg.h" 7 | #ifdef _DEBUG 8 | #define new DEBUG_NEW 9 | #endif 10 | 11 | // 12 | //TODO: If this DLL is dynamically linked against the MFC DLLs, 13 | // any functions exported from this DLL which call into 14 | // MFC must have the AFX_MANAGE_STATE macro added at the 15 | // very beginning of the function. 16 | // 17 | // For example: 18 | // 19 | // extern "C" BOOL PASCAL EXPORT ExportedFunction() 20 | // { 21 | // AFX_MANAGE_STATE(AfxGetStaticModuleState()); 22 | // // normal function body here 23 | // } 24 | // 25 | // It is very important that this macro appear in each 26 | // function, prior to any calls into MFC. This means that 27 | // it must appear as the first statement within the 28 | // function, even before any object variable declarations 29 | // as their constructors may generate calls into the MFC 30 | // DLL. 31 | // 32 | // Please see MFC Technical Notes 33 and 58 for additional 33 | // details. 34 | // 35 | 36 | // CMemoryWatchDLLApp 37 | 38 | BEGIN_MESSAGE_MAP(CMemoryWatchDLLApp, CWinApp) 39 | END_MESSAGE_MAP() 40 | 41 | 42 | // CMemoryWatchDLLApp construction 43 | 44 | CMemoryWatchDLLApp::CMemoryWatchDLLApp() 45 | { 46 | // TODO: add construction code here, 47 | // Place all significant initialization in InitInstance 48 | } 49 | 50 | 51 | // The one and only CMemoryWatchDLLApp object 52 | 53 | CMemoryWatchDLLApp theApp; 54 | 55 | 56 | // CMemoryWatchDLLApp initialization 57 | DWORD WINAPI _ShowDlgThread(LPVOID lpParm) 58 | { 59 | AFX_MANAGE_STATE(AfxGetStaticModuleState()); 60 | CExpressionDlg dlg; 61 | dlg.DoModal(); 62 | return 0; 63 | } 64 | 65 | BOOL CMemoryWatchDLLApp::InitInstance() 66 | { 67 | CWinApp::InitInstance(); 68 | static HANDLE hThread = NULL; 69 | if (hThread == NULL) 70 | { 71 | hThread = cbBEGINTHREADEX(NULL, NULL, _ShowDlgThread, NULL, NULL, NULL); 72 | } 73 | return TRUE; 74 | } 75 | 76 | __declspec(dllexport) int WINAPI BBB() 77 | { 78 | return 0xF; 79 | } 80 | 81 | __declspec(dllexport) BOOL WINAPI ReleaseDLL() 82 | { 83 | return TRUE; 84 | } -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.def: -------------------------------------------------------------------------------- 1 | ; MemoryWatchDLL.def : Declares the module parameters for the DLL. 2 | 3 | LIBRARY 4 | 5 | EXPORTS 6 | BBB 7 | ReleaseDLL 8 | ; Explicit exports can go here 9 | -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.h: -------------------------------------------------------------------------------- 1 | // MemoryWatchDLL.h : main header file for the MemoryWatchDLL DLL 2 | // 3 | 4 | #pragma once 5 | 6 | #ifndef __AFXWIN_H__ 7 | #error "include 'stdafx.h' before including this file for PCH" 8 | #endif 9 | 10 | #include "resource.h" // main symbols 11 | 12 | 13 | // CMemoryWatchDLLApp 14 | // See MemoryWatchDLL.cpp for the implementation of this class 15 | // 16 | 17 | class CMemoryWatchDLLApp : public CWinApp 18 | { 19 | public: 20 | CMemoryWatchDLLApp(); 21 | 22 | // Overrides 23 | public: 24 | virtual BOOL InitInstance(); 25 | 26 | DECLARE_MESSAGE_MAP() 27 | }; 28 | -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchDLL/MemoryWatchDLL.rc -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {98CFF262-11B1-446F-84C7-0FEBE22E85B5} 15 | MemoryWatchDLL 16 | MFCDLLProj 17 | 18 | 19 | 20 | DynamicLibrary 21 | true 22 | v120 23 | Unicode 24 | Dynamic 25 | 26 | 27 | DynamicLibrary 28 | false 29 | v120 30 | true 31 | Unicode 32 | Dynamic 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | D:\Visual Studio 2010\Projects\MyTools;$(IncludePath) 47 | 48 | 49 | false 50 | 51 | 52 | 53 | Use 54 | Level3 55 | Disabled 56 | WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions) 57 | true 58 | 59 | 60 | Windows 61 | true 62 | .\MemoryWatchDLL.def 63 | 64 | 65 | false 66 | _DEBUG;%(PreprocessorDefinitions) 67 | 68 | 69 | 0x0409 70 | _DEBUG;%(PreprocessorDefinitions) 71 | $(IntDir);%(AdditionalIncludeDirectories) 72 | 73 | 74 | 75 | 76 | Level3 77 | Use 78 | MaxSpeed 79 | true 80 | true 81 | WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) 82 | true 83 | 84 | 85 | Windows 86 | true 87 | true 88 | true 89 | .\MemoryWatchDLL.def 90 | 91 | 92 | false 93 | NDEBUG;%(PreprocessorDefinitions) 94 | 95 | 96 | 0x0409 97 | NDEBUG;%(PreprocessorDefinitions) 98 | $(IntDir);%(AdditionalIncludeDirectories) 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | Create 129 | Create 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /MemoryWatchDLL/MemoryWatchDLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {af112788-dbfb-4e79-8c39-3b717e16ff99} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | Common 38 | 39 | 40 | Common 41 | 42 | 43 | Common 44 | 45 | 46 | Common 47 | 48 | 49 | Common 50 | 51 | 52 | Common 53 | 54 | 55 | Common 56 | 57 | 58 | Common 59 | 60 | 61 | Common 62 | 63 | 64 | Common 65 | 66 | 67 | Common 68 | 69 | 70 | Common 71 | 72 | 73 | Common 74 | 75 | 76 | Common 77 | 78 | 79 | Common 80 | 81 | 82 | Common 83 | 84 | 85 | Common 86 | 87 | 88 | Common 89 | 90 | 91 | Source Files 92 | 93 | 94 | 95 | 96 | Header Files 97 | 98 | 99 | Header Files 100 | 101 | 102 | Header Files 103 | 104 | 105 | Header Files 106 | 107 | 108 | Header Files 109 | 110 | 111 | Header Files 112 | 113 | 114 | Common 115 | 116 | 117 | Common 118 | 119 | 120 | Common 121 | 122 | 123 | Common 124 | 125 | 126 | Common 127 | 128 | 129 | Common 130 | 131 | 132 | Common 133 | 134 | 135 | Common 136 | 137 | 138 | Common 139 | 140 | 141 | Common 142 | 143 | 144 | Common 145 | 146 | 147 | Common 148 | 149 | 150 | Common 151 | 152 | 153 | Common 154 | 155 | 156 | Common 157 | 158 | 159 | Common 160 | 161 | 162 | Common 163 | 164 | 165 | Common 166 | 167 | 168 | Common 169 | 170 | 171 | Common 172 | 173 | 174 | Common 175 | 176 | 177 | Common 178 | 179 | 180 | Common 181 | 182 | 183 | Common 184 | 185 | 186 | Header Files 187 | 188 | 189 | 190 | 191 | Source Files 192 | 193 | 194 | Resource Files 195 | 196 | 197 | 198 | 199 | Resource Files 200 | 201 | 202 | -------------------------------------------------------------------------------- /MemoryWatchDLL/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ======================================================================== 2 | MICROSOFT FOUNDATION CLASS LIBRARY : MemoryWatchDLL Project Overview 3 | ======================================================================== 4 | 5 | 6 | AppWizard has created this MemoryWatchDLL DLL for you. This DLL not only 7 | demonstrates the basics of using the Microsoft Foundation classes but 8 | is also a starting point for writing your DLL. 9 | 10 | This file contains a summary of what you will find in each of the files that 11 | make up your MemoryWatchDLL DLL. 12 | 13 | MemoryWatchDLL.vcxproj 14 | This is the main project file for VC++ projects generated using an Application Wizard. 15 | It contains information about the version of Visual C++ that generated the file, and 16 | information about the platforms, configurations, and project features selected with the 17 | Application Wizard. 18 | 19 | MemoryWatchDLL.vcxproj.filters 20 | This is the filters file for VC++ projects generated using an Application Wizard. 21 | It contains information about the association between the files in your project 22 | and the filters. This association is used in the IDE to show grouping of files with 23 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 24 | "Source Files" filter). 25 | 26 | MemoryWatchDLL.h 27 | This is the main header file for the DLL. It declares the 28 | CMemoryWatchDLLApp class. 29 | 30 | MemoryWatchDLL.cpp 31 | This is the main DLL source file. It contains the class CMemoryWatchDLLApp. 32 | 33 | MemoryWatchDLL.rc 34 | This is a listing of all of the Microsoft Windows resources that the 35 | program uses. It includes the icons, bitmaps, and cursors that are stored 36 | in the RES subdirectory. This file can be directly edited in Microsoft 37 | Visual C++. 38 | 39 | res\MemoryWatchDLL.rc2 40 | This file contains resources that are not edited by Microsoft 41 | Visual C++. You should place all resources not editable by 42 | the resource editor in this file. 43 | 44 | MemoryWatchDLL.def 45 | This file contains information about the DLL that must be 46 | provided to run with Microsoft Windows. It defines parameters 47 | such as the name and description of the DLL. It also exports 48 | functions from the DLL. 49 | 50 | ///////////////////////////////////////////////////////////////////////////// 51 | Other standard files: 52 | 53 | StdAfx.h, StdAfx.cpp 54 | These files are used to build a precompiled header (PCH) file 55 | named MemoryWatchDLL.pch and a precompiled types file named StdAfx.obj. 56 | 57 | Resource.h 58 | This is the standard header file, which defines new resource IDs. 59 | Microsoft Visual C++ reads and updates this file. 60 | 61 | ///////////////////////////////////////////////////////////////////////////// 62 | Other notes: 63 | 64 | AppWizard uses "TODO:" to indicate parts of the source code you 65 | should add to or customize. 66 | 67 | ///////////////////////////////////////////////////////////////////////////// 68 | -------------------------------------------------------------------------------- /MemoryWatchDLL/res/MemoryWatchDLL.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchDLL/res/MemoryWatchDLL.rc2 -------------------------------------------------------------------------------- /MemoryWatchDLL/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchDLL/resource.h -------------------------------------------------------------------------------- /MemoryWatchDLL/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // MemoryWatchDLL.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | 8 | -------------------------------------------------------------------------------- /MemoryWatchDLL/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | 5 | #pragma once 6 | 7 | #ifndef VC_EXTRALEAN 8 | #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers 9 | #endif 10 | 11 | #include "targetver.h" 12 | 13 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit 14 | 15 | #include // MFC core and standard components 16 | #include // MFC extensions 17 | 18 | #ifndef _AFX_NO_OLE_SUPPORT 19 | #include // MFC OLE classes 20 | #include // MFC OLE dialog classes 21 | #include // MFC Automation classes 22 | #endif // _AFX_NO_OLE_SUPPORT 23 | 24 | #ifndef _AFX_NO_DB_SUPPORT 25 | #include // MFC ODBC database classes 26 | #endif // _AFX_NO_DB_SUPPORT 27 | 28 | #ifndef _AFX_NO_DAO_SUPPORT 29 | #include // MFC DAO database classes 30 | #endif // _AFX_NO_DAO_SUPPORT 31 | 32 | #ifndef _AFX_NO_OLE_SUPPORT 33 | #include // MFC support for Internet Explorer 4 Common Controls 34 | #endif 35 | #ifndef _AFX_NO_AFXCMN_SUPPORT 36 | #include // MFC support for Windows Common Controls 37 | #endif // _AFX_NO_AFXCMN_SUPPORT 38 | #include 39 | 40 | 41 | -------------------------------------------------------------------------------- /MemoryWatchDLL/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /MemoryWatchTool.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.40629.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MemoryWatchTool", "MemoryWatchTool\MemoryWatchTool.vcxproj", "{DEEC0F72-ED14-4030-BE86-FE16B84373A4}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MemoryWatchDLL", "MemoryWatchDLL\MemoryWatchDLL.vcxproj", "{98CFF262-11B1-446F-84C7-0FEBE22E85B5}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Release|Win32 = Release|Win32 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {DEEC0F72-ED14-4030-BE86-FE16B84373A4}.Debug|Win32.ActiveCfg = Debug|Win32 17 | {DEEC0F72-ED14-4030-BE86-FE16B84373A4}.Debug|Win32.Build.0 = Debug|Win32 18 | {DEEC0F72-ED14-4030-BE86-FE16B84373A4}.Release|Win32.ActiveCfg = Release|Win32 19 | {DEEC0F72-ED14-4030-BE86-FE16B84373A4}.Release|Win32.Build.0 = Release|Win32 20 | {98CFF262-11B1-446F-84C7-0FEBE22E85B5}.Debug|Win32.ActiveCfg = Debug|Win32 21 | {98CFF262-11B1-446F-84C7-0FEBE22E85B5}.Debug|Win32.Build.0 = Debug|Win32 22 | {98CFF262-11B1-446F-84C7-0FEBE22E85B5}.Release|Win32.ActiveCfg = Release|Win32 23 | {98CFF262-11B1-446F-84C7-0FEBE22E85B5}.Release|Win32.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /MemoryWatchTool/Common/ExpressionAnalysis.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/Common/ExpressionAnalysis.cpp -------------------------------------------------------------------------------- /MemoryWatchTool/Common/ExpressionAnalysis.h: -------------------------------------------------------------------------------- 1 | #ifndef __MEMORYWATCHTOOL_EXPRESSION_EXPRESSIONANALYSIS_H__ 2 | #define __MEMORYWATCHTOOL_EXPRESSION_EXPRESSIONANALYSIS_H__ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | class CExpressionAnalysis 12 | { 13 | private: 14 | enum em_Content_Type 15 | { 16 | em_Content_Type_None, 17 | // 1 18 | em_Content_Type_Number, 19 | // ( 20 | em_Content_Type_LeftBracket, 21 | // ) 22 | em_Content_Type_RightBracket, 23 | // [ 24 | em_Content_Type_LeftAddress, 25 | // ] 26 | em_Content_Type_RightAddress, 27 | // + 28 | em_Content_Type_Symbol_Add, 29 | // - 30 | em_Content_Type_Symbol_Sub, 31 | // * 32 | em_Content_Type_Symbol_Mul, 33 | // / 34 | em_Content_Type_Symbol_Div, 35 | // % 36 | em_Content_Type_Symbol_Mod, 37 | // ^ 38 | em_Content_Type_Symbol_ExOr, 39 | // | 40 | em_Content_Type_Symbol_InOr, 41 | // ~ 42 | em_Content_Type_Symbol_Comp, 43 | // & 44 | em_Content_Type_Symbol_And, 45 | // << 46 | em_Content_Type_Symbol_LeftShift, 47 | // >> 48 | em_Content_Type_Symbol_RightShift 49 | }; 50 | 51 | enum em_Text_Type 52 | { 53 | em_Text_Type_Invalid, 54 | em_Text_Type_Number, 55 | em_Text_Type_Symbol, 56 | em_Text_Type_Bracket, 57 | em_Text_Type_NULL 58 | }; 59 | 60 | enum em_Cmd_Type 61 | { 62 | em_Cmd_Type_Invalid, 63 | em_Cmd_Type_dd, 64 | em_Cmd_Type_Calc, 65 | em_Cmd_Type_Clear, 66 | em_Cmd_Type_Help, 67 | em_Cmd_Type_StopRecord 68 | }; 69 | 70 | struct ExpressionInfo 71 | { 72 | em_Content_Type emContentType; 73 | std::wstring wsText; 74 | DWORD GetHex() CONST 75 | { 76 | return wcstol(wsText.c_str(), nullptr, 16); 77 | } 78 | }; 79 | 80 | struct ExpressionLoopSize 81 | { 82 | UINT uMinIndex; 83 | UINT uMaxIndex; 84 | ExpressionLoopSize() : uMinIndex(NULL), uMaxIndex(NULL) {} 85 | }; 86 | 87 | struct ExpressionContent 88 | { 89 | em_Cmd_Type emCmdType; 90 | std::vector ExpressionVec; 91 | UINT uMemWatchCount; 92 | BOOL bRecord; 93 | BOOL bKeep; 94 | BOOL bDisablePrint; 95 | DWORD dwAddress; 96 | ExpressionContent() : emCmdType(em_Cmd_Type::em_Cmd_Type_Invalid), uMemWatchCount(NULL), bRecord(FALSE), bKeep(FALSE), dwAddress(NULL), bDisablePrint(FALSE) 97 | { 98 | 99 | } 100 | }; 101 | public: 102 | CExpressionAnalysis(); 103 | ~CExpressionAnalysis() = default; 104 | 105 | // Analysis Expression 106 | BOOL Analysis(_In_ cwstring& wsText) throw(); 107 | 108 | VOID SetPrinter(_In_ std::function fnPrinter) throw(); 109 | 110 | VOID SetColumner(_In_ std::function fnAddColumner) throw(); 111 | 112 | VOID SetRowText(_In_ std::function fnSetRowTexter) throw(); 113 | 114 | VOID SetCleaner(_In_ std::function fnCleaner) throw(); 115 | 116 | VOID StopRecord() throw(); 117 | private: 118 | // 119 | em_Cmd_Type GetCmdType(_In_ cwstring& wsText) throw(); 120 | 121 | // 122 | em_Text_Type GetTextType(_In_ CONST UINT& uIndex) throw(); 123 | 124 | // 125 | em_Content_Type GetContentType(_In_ cwstring& wsSymbolText, _In_ em_Text_Type emTextType) throw(); 126 | 127 | // 128 | BOOL GetSymbolText(_In_ _Out_ UINT& uIndex, _Out_ std::wstring& wsSymbolText) throw(); 129 | 130 | // 131 | BOOL GetExpression() throw(); 132 | 133 | // 134 | int GetPriority(_In_ em_Content_Type emContentType) throw(); 135 | 136 | // 137 | BOOL CompPrioity(_In_ em_Content_Type emTextType1, _In_ em_Content_Type emTextType2) throw(); 138 | 139 | // 140 | BOOL GetRpn() throw(); 141 | 142 | // 143 | DWORD CalcResult_By_Parm(_In_ DWORD dwNumberLeft, _In_ DWORD dwNumberRight, _In_ em_Content_Type emSymbolType) throw(); 144 | 145 | // 146 | BOOL CalcResult_By_Rpn(_Out_opt_ DWORD* pdwResult) throw(); 147 | 148 | // 149 | VOID SetErrText(_In_ LPCWSTR pwszFormatText, ...) throw(); 150 | 151 | // 152 | BOOL ReadMem_By_Rpn() throw(); 153 | 154 | // 155 | BOOL ReadMemoryData() throw(); 156 | 157 | // 158 | BOOL IsNumber(_In_ cwstring& wsText) CONST throw(); 159 | 160 | // 161 | VOID Clear() throw(); 162 | 163 | // 164 | VOID Help() CONST throw(); 165 | 166 | static DWORD WINAPI _WorkThread(LPVOID lpParm); 167 | private: 168 | std::stack Rpn; 169 | ExpressionContent ExpContent; 170 | std::wstring wsExpText; 171 | std::function Printer; 172 | std::function AddColumner; 173 | std::function SetRowTexter; 174 | std::function Cleaner; 175 | HANDLE hThread; 176 | BOOL bRunThread; 177 | }; 178 | 179 | 180 | 181 | #endif // !__MEMORYWATCHTOOL_EXPRESSION_EXPRESSIONANALYSIS_H__ 182 | -------------------------------------------------------------------------------- /MemoryWatchTool/Expdlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/Expdlg.cpp -------------------------------------------------------------------------------- /MemoryWatchTool/Expdlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Common/ExpressionAnalysis.h" 4 | 5 | // CExpdlg dialog 6 | 7 | class CExpdlg : public CDialogEx 8 | { 9 | DECLARE_DYNAMIC(CExpdlg) 10 | 11 | public: 12 | CExpdlg(CWnd* pParent = NULL); // standard constructor 13 | virtual ~CExpdlg(); 14 | 15 | // Dialog Data 16 | enum { IDD = IDD_DIALOG1 }; 17 | 18 | protected: 19 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 20 | 21 | DECLARE_MESSAGE_MAP() 22 | public: 23 | virtual BOOL OnInitDialog(); 24 | 25 | BOOL AnalysisExpression(_In_ cwstring& wsText); 26 | void RepaintEdit(_In_ CONST CRect& dlgRect); 27 | void ReapintListControl(_In_ CONST CRect& dlgRect); 28 | afx_msg void OnSize(UINT nType, int cx, int cy); 29 | virtual void OnOK(); 30 | 31 | void SetDlgPtr(CExpdlg* p); 32 | void SetExpressionText(_In_ cwstring& wsText); 33 | void release(); 34 | cwstring& GetErrText(); 35 | private: 36 | CExpdlg* pthis; 37 | CExpressionAnalysis ExpAnalysis; 38 | std::wstring wsExpression; 39 | public: 40 | afx_msg void OnClose(); 41 | afx_msg void OnNMCustomdrawList2(NMHDR *pNMHDR, LRESULT *pResult); 42 | virtual BOOL PreTranslateMessage(MSG* pMsg); 43 | }; 44 | -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchTool.cpp: -------------------------------------------------------------------------------- 1 | 2 | // MemoryWatchTool.cpp : Defines the class behaviors for the application. 3 | // 4 | 5 | #include "stdafx.h" 6 | #include "MemoryWatchTool.h" 7 | #include "MemoryWatchToolDlg.h" 8 | 9 | #ifdef _DEBUG 10 | #define new DEBUG_NEW 11 | #endif 12 | 13 | 14 | // CMemoryWatchToolApp 15 | 16 | BEGIN_MESSAGE_MAP(CMemoryWatchToolApp, CWinApp) 17 | ON_COMMAND(ID_HELP, &CWinApp::OnHelp) 18 | END_MESSAGE_MAP() 19 | 20 | 21 | // CMemoryWatchToolApp construction 22 | 23 | CMemoryWatchToolApp::CMemoryWatchToolApp() 24 | { 25 | // support Restart Manager 26 | m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; 27 | 28 | // TODO: add construction code here, 29 | // Place all significant initialization in InitInstance 30 | } 31 | 32 | 33 | // The one and only CMemoryWatchToolApp object 34 | 35 | CMemoryWatchToolApp theApp; 36 | 37 | 38 | // CMemoryWatchToolApp initialization 39 | 40 | BOOL CMemoryWatchToolApp::InitInstance() 41 | { 42 | // InitCommonControlsEx() is required on Windows XP if an application 43 | // manifest specifies use of ComCtl32.dll version 6 or later to enable 44 | // visual styles. Otherwise, any window creation will fail. 45 | INITCOMMONCONTROLSEX InitCtrls; 46 | InitCtrls.dwSize = sizeof(InitCtrls); 47 | // Set this to include all the common control classes you want to use 48 | // in your application. 49 | InitCtrls.dwICC = ICC_WIN95_CLASSES; 50 | InitCommonControlsEx(&InitCtrls); 51 | 52 | CWinApp::InitInstance(); 53 | 54 | 55 | AfxEnableControlContainer(); 56 | 57 | // Create the shell manager, in case the dialog contains 58 | // any shell tree view or shell list view controls. 59 | CShellManager *pShellManager = new CShellManager; 60 | 61 | // Activate "Windows Native" visual manager for enabling themes in MFC controls 62 | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 63 | 64 | // Standard initialization 65 | // If you are not using these features and wish to reduce the size 66 | // of your final executable, you should remove from the following 67 | // the specific initialization routines you do not need 68 | // Change the registry key under which our settings are stored 69 | // TODO: You should modify this string to be something appropriate 70 | // such as the name of your company or organization 71 | SetRegistryKey(_T("Local AppWizard-Generated Applications")); 72 | 73 | CMemoryWatchToolDlg dlg; 74 | m_pMainWnd = &dlg; 75 | INT_PTR nResponse = dlg.DoModal(); 76 | if (nResponse == IDOK) 77 | { 78 | // TODO: Place code here to handle when the dialog is 79 | // dismissed with OK 80 | } 81 | else if (nResponse == IDCANCEL) 82 | { 83 | // TODO: Place code here to handle when the dialog is 84 | // dismissed with Cancel 85 | } 86 | else if (nResponse == -1) 87 | { 88 | TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n"); 89 | TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog, you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n"); 90 | } 91 | 92 | // Delete the shell manager created above. 93 | if (pShellManager != NULL) 94 | { 95 | delete pShellManager; 96 | } 97 | 98 | // Since the dialog has been closed, return FALSE so that we exit the 99 | // application, rather than start the application's message pump. 100 | return FALSE; 101 | } 102 | 103 | -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchTool.h: -------------------------------------------------------------------------------- 1 | 2 | // MemoryWatchTool.h : main header file for the PROJECT_NAME application 3 | // 4 | 5 | #pragma once 6 | 7 | #ifndef __AFXWIN_H__ 8 | #error "include 'stdafx.h' before including this file for PCH" 9 | #endif 10 | 11 | #include "resource.h" // main symbols 12 | 13 | 14 | // CMemoryWatchToolApp: 15 | // See MemoryWatchTool.cpp for the implementation of this class 16 | // 17 | 18 | class CMemoryWatchToolApp : public CWinApp 19 | { 20 | public: 21 | CMemoryWatchToolApp(); 22 | 23 | // Overrides 24 | public: 25 | virtual BOOL InitInstance(); 26 | 27 | // Implementation 28 | 29 | DECLARE_MESSAGE_MAP() 30 | }; 31 | 32 | extern CMemoryWatchToolApp theApp; -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchTool.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/MemoryWatchTool.rc -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchTool.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {DEEC0F72-ED14-4030-BE86-FE16B84373A4} 15 | MemoryWatchTool 16 | MFCProj 17 | 18 | 19 | 20 | Application 21 | true 22 | v120 23 | Unicode 24 | Dynamic 25 | 26 | 27 | Application 28 | false 29 | v120 30 | true 31 | Unicode 32 | Dynamic 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | true 46 | D:\Visual Studio 2010\Projects\MyTools;$(IncludePath) 47 | 48 | 49 | false 50 | 51 | 52 | 53 | Use 54 | Level3 55 | Disabled 56 | WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 57 | 58 | 59 | Windows 60 | true 61 | 62 | 63 | false 64 | true 65 | _DEBUG;%(PreprocessorDefinitions) 66 | 67 | 68 | 0x0409 69 | _DEBUG;%(PreprocessorDefinitions) 70 | $(IntDir);%(AdditionalIncludeDirectories) 71 | 72 | 73 | 74 | 75 | Level3 76 | Use 77 | MaxSpeed 78 | true 79 | true 80 | WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 81 | 82 | 83 | Windows 84 | true 85 | true 86 | true 87 | 88 | 89 | false 90 | true 91 | NDEBUG;%(PreprocessorDefinitions) 92 | 93 | 94 | 0x0409 95 | NDEBUG;%(PreprocessorDefinitions) 96 | $(IntDir);%(AdditionalIncludeDirectories) 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | Create 160 | Create 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchTool.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {756258ec-67ac-4de3-80d9-9c46051651a2} 18 | 19 | 20 | {906e45db-ec16-494e-81c6-8c1540da02c5} 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Expression 47 | 48 | 49 | Common 50 | 51 | 52 | Common 53 | 54 | 55 | Common 56 | 57 | 58 | Common 59 | 60 | 61 | Common 62 | 63 | 64 | Common 65 | 66 | 67 | Common 68 | 69 | 70 | Common 71 | 72 | 73 | Common 74 | 75 | 76 | Common 77 | 78 | 79 | Common 80 | 81 | 82 | Common 83 | 84 | 85 | Common 86 | 87 | 88 | Common 89 | 90 | 91 | Common 92 | 93 | 94 | Common 95 | 96 | 97 | Common 98 | 99 | 100 | Common 101 | 102 | 103 | Common 104 | 105 | 106 | Common 107 | 108 | 109 | Common 110 | 111 | 112 | Common 113 | 114 | 115 | Header Files 116 | 117 | 118 | Common 119 | 120 | 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Expression 133 | 134 | 135 | Common 136 | 137 | 138 | Common 139 | 140 | 141 | Common 142 | 143 | 144 | Common 145 | 146 | 147 | Common 148 | 149 | 150 | Common 151 | 152 | 153 | Common 154 | 155 | 156 | Common 157 | 158 | 159 | Common 160 | 161 | 162 | Common 163 | 164 | 165 | Common 166 | 167 | 168 | Common 169 | 170 | 171 | Common 172 | 173 | 174 | Common 175 | 176 | 177 | Common 178 | 179 | 180 | Common 181 | 182 | 183 | Common 184 | 185 | 186 | Common 187 | 188 | 189 | Source Files 190 | 191 | 192 | 193 | 194 | Resource Files 195 | 196 | 197 | 198 | 199 | Resource Files 200 | 201 | 202 | 203 | 204 | Resource Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchToolDlg.cpp: -------------------------------------------------------------------------------- 1 | 2 | // MemoryWatchToolDlg.cpp : implementation file 3 | // 4 | 5 | #include "stdafx.h" 6 | #include "MemoryWatchTool.h" 7 | #include "MemoryWatchToolDlg.h" 8 | #include "afxdialogex.h" 9 | #include "Expdlg.h" 10 | #ifdef _DEBUG 11 | #define new DEBUG_NEW 12 | #endif 13 | 14 | 15 | // CAboutDlg dialog used for App About 16 | 17 | class CAboutDlg : public CDialogEx 18 | { 19 | public: 20 | CAboutDlg(); 21 | 22 | // Dialog Data 23 | enum { IDD = IDD_ABOUTBOX }; 24 | 25 | protected: 26 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 27 | 28 | // Implementation 29 | protected: 30 | DECLARE_MESSAGE_MAP() 31 | }; 32 | 33 | CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) 34 | { 35 | } 36 | 37 | void CAboutDlg::DoDataExchange(CDataExchange* pDX) 38 | { 39 | CDialogEx::DoDataExchange(pDX); 40 | } 41 | 42 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) 43 | END_MESSAGE_MAP() 44 | 45 | 46 | // CMemoryWatchToolDlg dialog 47 | 48 | 49 | 50 | CMemoryWatchToolDlg::CMemoryWatchToolDlg(CWnd* pParent /*=NULL*/) 51 | : CDialogEx(CMemoryWatchToolDlg::IDD, pParent) 52 | { 53 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 54 | } 55 | 56 | void CMemoryWatchToolDlg::DoDataExchange(CDataExchange* pDX) 57 | { 58 | CDialogEx::DoDataExchange(pDX); 59 | } 60 | 61 | BEGIN_MESSAGE_MAP(CMemoryWatchToolDlg, CDialogEx) 62 | ON_WM_SYSCOMMAND() 63 | ON_WM_PAINT() 64 | ON_WM_QUERYDRAGICON() 65 | ON_WM_SIZE() 66 | END_MESSAGE_MAP() 67 | 68 | 69 | // CMemoryWatchToolDlg message handlers 70 | 71 | BOOL CMemoryWatchToolDlg::OnInitDialog() 72 | { 73 | CDialogEx::OnInitDialog(); 74 | 75 | // Add "About..." menu item to system menu. 76 | 77 | // IDM_ABOUTBOX must be in the system command range. 78 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 79 | ASSERT(IDM_ABOUTBOX < 0xF000); 80 | 81 | CMenu* pSysMenu = GetSystemMenu(FALSE); 82 | if (pSysMenu != NULL) 83 | { 84 | BOOL bNameValid; 85 | CString strAboutMenu; 86 | bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); 87 | ASSERT(bNameValid); 88 | if (!strAboutMenu.IsEmpty()) 89 | { 90 | pSysMenu->AppendMenu(MF_SEPARATOR); 91 | pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 92 | } 93 | } 94 | 95 | // Set the icon for this dialog. The framework does this automatically 96 | // when the application's main window is not a dialog 97 | SetIcon(m_hIcon, TRUE); // Set big icon 98 | SetIcon(m_hIcon, FALSE); // Set small icon 99 | 100 | // TODO: Add extra initialization here 101 | 102 | return TRUE; // return TRUE unless you set the focus to a control 103 | } 104 | 105 | void CMemoryWatchToolDlg::OnSysCommand(UINT nID, LPARAM lParam) 106 | { 107 | if ((nID & 0xFFF0) == IDM_ABOUTBOX) 108 | { 109 | CAboutDlg dlgAbout; 110 | dlgAbout.DoModal(); 111 | } 112 | else 113 | { 114 | CDialogEx::OnSysCommand(nID, lParam); 115 | } 116 | } 117 | 118 | // If you add a minimize button to your dialog, you will need the code below 119 | // to draw the icon. For MFC applications using the document/view model, 120 | // this is automatically done for you by the framework. 121 | 122 | void CMemoryWatchToolDlg::OnPaint() 123 | { 124 | if (IsIconic()) 125 | { 126 | CPaintDC dc(this); // device context for painting 127 | 128 | SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); 129 | 130 | // Center icon in client rectangle 131 | int cxIcon = GetSystemMetrics(SM_CXICON); 132 | int cyIcon = GetSystemMetrics(SM_CYICON); 133 | CRect rect; 134 | GetClientRect(&rect); 135 | int x = (rect.Width() - cxIcon + 1) / 2; 136 | int y = (rect.Height() - cyIcon + 1) / 2; 137 | 138 | // Draw the icon 139 | dc.DrawIcon(x, y, m_hIcon); 140 | } 141 | else 142 | { 143 | CDialogEx::OnPaint(); 144 | } 145 | } 146 | 147 | // The system calls this function to obtain the cursor to display while the user drags 148 | // the minimized window. 149 | HCURSOR CMemoryWatchToolDlg::OnQueryDragIcon() 150 | { 151 | return static_cast(m_hIcon); 152 | } 153 | 154 | void CMemoryWatchToolDlg::OnSize(UINT nType, int cx, int cy) 155 | { 156 | CDialogEx::OnSize(nType, cx, cy); 157 | 158 | // TODO: Add your message handler code here 159 | CRect RectDlg; 160 | this->GetClientRect(&RectDlg); 161 | RepaintEdit(RectDlg); 162 | Invalidate(); 163 | } 164 | 165 | void CMemoryWatchToolDlg::RepaintEdit(_In_ CONST CRect& dlgRect) 166 | { 167 | CEdit* pEdit = reinterpret_cast(this->GetDlgItem(IDC_EDIT_EXPRESSION)); 168 | if (pEdit == nullptr) 169 | return; 170 | 171 | CRect RectEdit; 172 | pEdit->GetWindowRect(&RectEdit); 173 | this->ScreenToClient(&RectEdit); 174 | 175 | RectEdit.right = dlgRect.right - 20; 176 | pEdit->MoveWindow(&RectEdit); 177 | } 178 | 179 | BOOL CMemoryWatchToolDlg::PreTranslateMessage(MSG* pMsg) 180 | { 181 | // TODO: Add your specialized code here and/or call the base class 182 | if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) 183 | { 184 | WCHAR wszText[1024] = { 0 }; 185 | CEdit* pEdit = reinterpret_cast(this->GetDlgItem(IDC_EDIT_EXPRESSION)); 186 | pEdit->GetWindowTextW(wszText, _countof(wszText) - 1); 187 | 188 | CExpdlg * dlg = new CExpdlg; 189 | dlg->SetDlgPtr(dlg); 190 | dlg->SetExpressionText(wszText); 191 | dlg->Create(IDD_DIALOG1, this); 192 | dlg->ShowWindow(SW_SHOW); 193 | dlg->AnalysisExpression(cwstring(wszText)); 194 | 195 | } 196 | return CDialogEx::PreTranslateMessage(pMsg); 197 | } 198 | 199 | 200 | void CMemoryWatchToolDlg::OnOK() 201 | { 202 | // TODO: Add your specialized code here and/or call the base class 203 | 204 | //CDialogEx::OnOK(); 205 | } 206 | -------------------------------------------------------------------------------- /MemoryWatchTool/MemoryWatchToolDlg.h: -------------------------------------------------------------------------------- 1 | 2 | // MemoryWatchToolDlg.h : header file 3 | // 4 | 5 | #pragma once 6 | 7 | 8 | // CMemoryWatchToolDlg dialog 9 | class CMemoryWatchToolDlg : public CDialogEx 10 | { 11 | // Construction 12 | public: 13 | CMemoryWatchToolDlg(CWnd* pParent = NULL); // standard constructor 14 | 15 | // Dialog Data 16 | enum { IDD = IDD_MEMORYWATCHTOOL_DIALOG }; 17 | 18 | protected: 19 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 20 | 21 | 22 | // Implementation 23 | protected: 24 | HICON m_hIcon; 25 | 26 | // Generated message map functions 27 | virtual BOOL OnInitDialog(); 28 | afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 29 | afx_msg void OnPaint(); 30 | afx_msg HCURSOR OnQueryDragIcon(); 31 | DECLARE_MESSAGE_MAP() 32 | public: 33 | afx_msg void OnSize(UINT nType, int cx, int cy); 34 | void RepaintEdit(_In_ CONST CRect& dlgRect); 35 | virtual BOOL PreTranslateMessage(MSG* pMsg); 36 | virtual void OnOK(); 37 | }; 38 | -------------------------------------------------------------------------------- /MemoryWatchTool/ReadMe.txt: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | MICROSOFT FOUNDATION CLASS LIBRARY : MemoryWatchTool Project Overview 3 | =============================================================================== 4 | 5 | The application wizard has created this MemoryWatchTool application for 6 | you. This application not only demonstrates the basics of using the Microsoft 7 | Foundation Classes but is also a starting point for writing your application. 8 | 9 | This file contains a summary of what you will find in each of the files that 10 | make up your MemoryWatchTool application. 11 | 12 | MemoryWatchTool.vcxproj 13 | This is the main project file for VC++ projects generated using an application wizard. 14 | It contains information about the version of Visual C++ that generated the file, and 15 | information about the platforms, configurations, and project features selected with the 16 | application wizard. 17 | 18 | MemoryWatchTool.vcxproj.filters 19 | This is the filters file for VC++ projects generated using an Application Wizard. 20 | It contains information about the association between the files in your project 21 | and the filters. This association is used in the IDE to show grouping of files with 22 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the 23 | "Source Files" filter). 24 | 25 | MemoryWatchTool.h 26 | This is the main header file for the application. It includes other 27 | project specific headers (including Resource.h) and declares the 28 | CMemoryWatchToolApp application class. 29 | 30 | MemoryWatchTool.cpp 31 | This is the main application source file that contains the application 32 | class CMemoryWatchToolApp. 33 | 34 | MemoryWatchTool.rc 35 | This is a listing of all of the Microsoft Windows resources that the 36 | program uses. It includes the icons, bitmaps, and cursors that are stored 37 | in the RES subdirectory. This file can be directly edited in Microsoft 38 | Visual C++. Your project resources are in 1033. 39 | 40 | res\MemoryWatchTool.ico 41 | This is an icon file, which is used as the application's icon. This 42 | icon is included by the main resource file MemoryWatchTool.rc. 43 | 44 | res\MemoryWatchTool.rc2 45 | This file contains resources that are not edited by Microsoft 46 | Visual C++. You should place all resources not editable by 47 | the resource editor in this file. 48 | 49 | 50 | ///////////////////////////////////////////////////////////////////////////// 51 | 52 | The application wizard creates one dialog class: 53 | 54 | MemoryWatchToolDlg.h, MemoryWatchToolDlg.cpp - the dialog 55 | These files contain your CMemoryWatchToolDlg class. This class defines 56 | the behavior of your application's main dialog. The dialog's template is 57 | in MemoryWatchTool.rc, which can be edited in Microsoft Visual C++. 58 | 59 | ///////////////////////////////////////////////////////////////////////////// 60 | 61 | Other Features: 62 | 63 | ActiveX Controls 64 | The application includes support to use ActiveX controls. 65 | 66 | Printing and Print Preview support 67 | The application wizard has generated code to handle the print, print setup, and print preview 68 | commands by calling member functions in the CView class from the MFC library. 69 | 70 | ///////////////////////////////////////////////////////////////////////////// 71 | 72 | Other standard files: 73 | 74 | StdAfx.h, StdAfx.cpp 75 | These files are used to build a precompiled header (PCH) file 76 | named MemoryWatchTool.pch and a precompiled types file named StdAfx.obj. 77 | 78 | Resource.h 79 | This is the standard header file, which defines new resource IDs. 80 | Microsoft Visual C++ reads and updates this file. 81 | 82 | MemoryWatchTool.manifest 83 | Application manifest files are used by Windows XP to describe an applications 84 | dependency on specific versions of Side-by-Side assemblies. The loader uses this 85 | information to load the appropriate assembly from the assembly cache or private 86 | from the application. The Application manifest maybe included for redistribution 87 | as an external .manifest file that is installed in the same folder as the application 88 | executable or it may be included in the executable in the form of a resource. 89 | ///////////////////////////////////////////////////////////////////////////// 90 | 91 | Other notes: 92 | 93 | The application wizard uses "TODO:" to indicate parts of the source code you 94 | should add to or customize. 95 | 96 | If your application uses MFC in a shared DLL, you will need 97 | to redistribute the MFC DLLs. If your application is in a language 98 | other than the operating system's locale, you will also have to 99 | redistribute the corresponding localized resources mfc110XXX.DLL. 100 | For more information on both of these topics, please see the section on 101 | redistributing Visual C++ applications in MSDN documentation. 102 | 103 | ///////////////////////////////////////////////////////////////////////////// 104 | -------------------------------------------------------------------------------- /MemoryWatchTool/res/MemoryWatchTool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/res/MemoryWatchTool.ico -------------------------------------------------------------------------------- /MemoryWatchTool/res/MemoryWatchTool.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/res/MemoryWatchTool.rc2 -------------------------------------------------------------------------------- /MemoryWatchTool/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/MemoryWatchTool/resource.h -------------------------------------------------------------------------------- /MemoryWatchTool/stdafx.cpp: -------------------------------------------------------------------------------- 1 | 2 | // stdafx.cpp : source file that includes just the standard includes 3 | // MemoryWatchTool.pch will be the pre-compiled header 4 | // stdafx.obj will contain the pre-compiled type information 5 | 6 | #include "stdafx.h" 7 | 8 | 9 | -------------------------------------------------------------------------------- /MemoryWatchTool/stdafx.h: -------------------------------------------------------------------------------- 1 | 2 | // stdafx.h : include file for standard system include files, 3 | // or project specific include files that are used frequently, 4 | // but are changed infrequently 5 | 6 | #pragma once 7 | 8 | #ifndef VC_EXTRALEAN 9 | #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers 10 | #endif 11 | 12 | #include "targetver.h" 13 | 14 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit 15 | 16 | // turns off MFC's hiding of some common and often safely ignored warning messages 17 | #define _AFX_ALL_WARNINGS 18 | 19 | #include // MFC core and standard components 20 | #include // MFC extensions 21 | 22 | 23 | #include // MFC Automation classes 24 | 25 | 26 | 27 | #ifndef _AFX_NO_OLE_SUPPORT 28 | #include // MFC support for Internet Explorer 4 Common Controls 29 | #endif 30 | #ifndef _AFX_NO_AFXCMN_SUPPORT 31 | #include // MFC support for Windows Common Controls 32 | #endif // _AFX_NO_AFXCMN_SUPPORT 33 | 34 | #include // MFC support for ribbons and control bars 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | #ifdef _UNICODE 45 | #if defined _M_IX86 46 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 47 | #elif defined _M_X64 48 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 49 | #else 50 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 51 | #endif 52 | #endif 53 | 54 | 55 | -------------------------------------------------------------------------------- /MemoryWatchTool/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Including SDKDDKVer.h defines the highest available Windows platform. 4 | 5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and 6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. 7 | 8 | #include 9 | -------------------------------------------------------------------------------- /Pic/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/1.png -------------------------------------------------------------------------------- /Pic/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/2.png -------------------------------------------------------------------------------- /Pic/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/3.png -------------------------------------------------------------------------------- /Pic/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/4.png -------------------------------------------------------------------------------- /Pic/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/5.png -------------------------------------------------------------------------------- /Pic/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/6.png -------------------------------------------------------------------------------- /Pic/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/7.png -------------------------------------------------------------------------------- /Pic/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wyexe/MemoryWatchTool/7302579928f85cd9c39c42255376453726b191e5/Pic/8.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MemoryWatchTool 2 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/1.png)
3 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/2.png)
4 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/3.png)
5 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/4.png)
6 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/5.png)
7 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/6.png)
8 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/7.png)
9 | ![image](https://github.com/VideoCardGuy/MemoryWatchTool/raw/master/Pic/8.png)
10 | --------------------------------------------------------------------------------