Index: /trunk/DirectShowSpy/DirectShowSpy.idl
===================================================================
--- /trunk/DirectShowSpy/DirectShowSpy.idl (revision 241)
+++ /trunk/DirectShowSpy/DirectShowSpy.idl (revision 242)
@@ -17,4 +17,8 @@
interface ISpy : IDispatch
{
+ [id(1), propget] HRESULT MonikerDisplayName([out, retval] BSTR* psMonikerDisplayName);
+ [id(2), propget] HRESULT CreationTime([out, retval] DATE* pfTime);
+ [id(3), propget] HRESULT FriendlyName([out, retval] BSTR* psFriendlyName);
+ [id(3), propput] HRESULT FriendlyName([in] BSTR sFriendlyName);
};
[
Index: /trunk/DirectShowSpy/DirectShowSpy.rc
===================================================================
--- /trunk/DirectShowSpy/DirectShowSpy.rc (revision 241)
+++ /trunk/DirectShowSpy/DirectShowSpy.rc (revision 242)
@@ -59,5 +59,5 @@
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1, 0, 0, 1127
+ FILEVERSION 1, 0, 0, 1210
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
@@ -78,5 +78,5 @@
VALUE "CompanyName", "Roman Ryltsov"
VALUE "FileDescription", "Alax.Info DirectShow Spy Module"
- VALUE "FileVersion", "1, 0, 0, 1127\0"
+ VALUE "FileVersion", "1, 0, 0, 1210\0"
VALUE "InternalName", "DirectShowSpy.dll"
VALUE "LegalCopyright", "Copyright © Alax.Info, Roman Ryltsov, 2008-2014"
@@ -152,5 +152,5 @@
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
- LTEXT "Use controls below to review Intelligent Connect activity on recently created filter graphs.",IDC_GRAPHBUILDERCALLBACK_GRAPH_INTRODUCTION,6,6,215,18
+ LTEXT "Use controls below to review Intelligent Connect activity on recently created filter graphs.",IDC_GRAPHBUILDERCALLBACK_GRAPH_INTRODUCTION,6,6,215,18,0,WS_EX_TRANSPARENT
CONTROL "",IDC_GRAPHBUILDERCALLBACK_GRAPH_GRAPH,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,30,215,54
CONTROL "",IDC_GRAPHBUILDERCALLBACK_GRAPH_LOG,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,90,215,90
@@ -250,5 +250,5 @@
BEGIN
CONTROL "",IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TREE,
- "SysTreeView32",TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,6,6,156,222
+ "SysTreeView32",TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | TVS_INFOTIP | WS_BORDER | WS_HSCROLL | WS_TABSTOP,6,6,156,222
EDITTEXT IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TEXT,168,6,246,222,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL | WS_HSCROLL
DEFPUSHBUTTON "OK",IDOK,246,234,50,14
@@ -279,4 +279,20 @@
END
+IDD_FILTERGRAPHHELPER_ACTION DIALOGEX 0, 0, 374, 206
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 400, 0, 0x0
+BEGIN
+ PUSHBUTTON "Save Filter Graph As...",IDC_FILTERGRAPHHELPER_ACTION_SAVEAS,6,30,120,14
+ LTEXT "Save DirectShow Filter Graph into .GRF file for further open in GraphEdit or GraphStudioNext software.",IDC_FILTERGRAPHHELPER_ACTION_SAVEASDESCRIPTION,138,30,204,24,0,WS_EX_TRANSPARENT
+ PUSHBUTTON "Open in GraphStudioNext (F7)",IDC_FILTERGRAPHHELPER_ACTION_OPENGSN,6,66,120,14
+ LTEXT "The DirectShow Filter Graph is known to be published on Running Object Table, and can be opened by GraphStudioNext for further interactive review.",IDC_FILTERGRAPHHELPER_ACTION_OPENGSNDESCRIPTION,138,66,204,24,0,WS_EX_TRANSPARENT
+ PUSHBUTTON "Open in GraphEdit (F8)",IDC_FILTERGRAPHHELPER_ACTION_OPENGE,6,102,120,14
+ LTEXT "Similarly to the above, open in Widnows SDK GraphEdit application.",IDC_FILTERGRAPHHELPER_ACTION_OPENGEDESCRIPTION,138,102,204,24,0,WS_EX_TRANSPARENT
+ LTEXT "DirectShow Filter Graph Actions",IDC_FILTERGRAPHHELPER_ACTION_TITLE,6,0,294,18
+ PUSHBUTTON "Open Filter Graph List (F2)",IDC_FILTERGRAPHHELPER_ACTION_OPENLIST,6,138,120,14
+ LTEXT "Open list of DirectShow Filter Graphs listed on Running Object Table.",IDC_FILTERGRAPHHELPER_ACTION_OPENLISTDESCRIPTION,138,138,204,24,0,WS_EX_TRANSPARENT
+END
+
/////////////////////////////////////////////////////////////////////////////
@@ -288,9 +304,27 @@
GUIDELINES DESIGNINFO
BEGIN
+ IDD_GRAPHBUILDERCALLBACK_GRAPH_PROPERTYPAGE, DIALOG
+ BEGIN
+ END
+
+ IDD_FILTERGRAPHLIST_LIST_PROPERTYPAGE, DIALOG
+ BEGIN
+ END
+
+ IDD_FILTERGRAPHHELPER_PROPERTYFRAME, DIALOG
+ BEGIN
+ END
+
IDD_FILTERGRAPHHELPER_EMAIL, DIALOG
BEGIN
- RIGHTMARGIN, 308
+ RIGHTMARGIN, 366
BOTTOMMARGIN, 248
END
+
+ IDD_FILTERGRAPHHELPER_ACTION, DIALOG
+ BEGIN
+ RIGHTMARGIN, 368
+ BOTTOMMARGIN, 200
+ END
END
#endif // APSTUDIO_INVOKED
@@ -303,4 +337,48 @@
IDR_EMAILTOOLS TYPELIB "..\\..\\Repository-Private\\Utilities\\EmailTools\\_Bin\\Win32\\Release\\EmailTools\\EmailTools.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDD_FILTERGRAPHHELPER_PROPERTYFRAME ACCELERATORS
+BEGIN
+ VK_F2, IDC_FILTERGRAPHHELPER_ACTION_OPENLIST, VIRTKEY, NOINVERT
+ VK_F7, IDC_FILTERGRAPHHELPER_ACTION_OPENGSN, VIRTKEY, NOINVERT
+ VK_F8, IDC_FILTERGRAPHHELPER_ACTION_OPENGE, VIRTKEY, NOINVERT
+END
+
+IDD_FILTERGRAPHLIST_LIST_PROPERTYPAGE ACCELERATORS
+BEGIN
+ VK_F6, IDC_FILTERGRAPHLIST_LIST_CHECKALL, VIRTKEY, NOINVERT
+ VK_F7, IDC_FILTERGRAPHLIST_LIST_OPENGSN, VIRTKEY, NOINVERT
+ VK_F8, IDC_FILTERGRAPHLIST_LIST_OPENGE, VIRTKEY, NOINVERT
+ VK_F5, IDC_FILTERGRAPHLIST_LIST_REFRESH, VIRTKEY, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDD_FILTERGRAPHLIST_LIST_PROPERTYPAGE MENU
+BEGIN
+ POPUP "(item)"
+ BEGIN
+ MENUITEM "&Check", IDC_FILTERGRAPHLIST_LIST_CHECK
+ MENUITEM "Check All\tF6", IDC_FILTERGRAPHLIST_LIST_CHECKALL
+ MENUITEM "C&opy", IDC_FILTERGRAPHLIST_LIST_COPYTOCLIPBOARD
+ MENUITEM SEPARATOR
+ MENUITEM "Open with &GraphStudioNext\tF7", IDC_FILTERGRAPHLIST_LIST_OPENGSN
+ MENUITEM "Open with Graph&Edit\tF8", IDC_FILTERGRAPHLIST_LIST_OPENGE
+ MENUITEM SEPARATOR
+ MENUITEM "&Refresh\tF5", IDC_FILTERGRAPHLIST_LIST_REFRESH
+ MENUITEM SEPARATOR
+ MENUITEM "&Properties...", IDC_FILTERGRAPHLIST_LIST_PROPERTIES
+ END
+END
+
/////////////////////////////////////////////////////////////////////////////
@@ -380,5 +458,5 @@
IDD_FILTERGRAPHLIST_LIST_PROPERTYPAGE "Filter Graphs"
IDC_FILTERGRAPHLIST_LIST_GRAPH
- "v, 1\nx, 0x420, 0x420\nc, ""Process, Instance"", 150, -1\nc, Process Name, 120, 1\nc, Creation Time, 90, 2\nc, Filters, 60, 3\nc, State, 60, 4\nc, Process Image Directory, 420, 5\n"
+ "v, 1\nx, 0x420, 0x420\nc, ""Process, Instance"", 150, -1\nc, Process Name, 120, 1\nc, Creation Time, 90, 2\nc, Friendly Name, 120, 3\nc, Filters, 60, 4\nc, State, 60, 5\nc, Process Image Directory, 420, 6\n"
END
Index: /trunk/DirectShowSpy/DirectShowSpy_i.c
===================================================================
--- /trunk/DirectShowSpy/DirectShowSpy_i.c (revision 241)
+++ /trunk/DirectShowSpy/DirectShowSpy_i.c (revision 242)
@@ -7,5 +7,5 @@
/* File created by MIDL compiler version 7.00.0555 */
-/* at Fri Jan 10 11:37:20 2014
+/* at Sat Jan 11 18:11:25 2014
*/
/* Compiler settings for DirectShowSpy.idl:
Index: /trunk/DirectShowSpy/DirectShowSpy_i.h
===================================================================
--- /trunk/DirectShowSpy/DirectShowSpy_i.h (revision 241)
+++ /trunk/DirectShowSpy/DirectShowSpy_i.h (revision 242)
@@ -5,5 +5,5 @@
/* File created by MIDL compiler version 7.00.0555 */
-/* at Fri Jan 10 11:37:20 2014
+/* at Sat Jan 11 18:11:25 2014
*/
/* Compiler settings for DirectShowSpy.idl:
@@ -172,4 +172,16 @@
{
public:
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_MonikerDisplayName(
+ /* [retval][out] */ BSTR *psMonikerDisplayName) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_CreationTime(
+ /* [retval][out] */ DATE *pfTime) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_FriendlyName(
+ /* [retval][out] */ BSTR *psFriendlyName) = 0;
+
+ virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_FriendlyName(
+ /* [in] */ BSTR sFriendlyName) = 0;
+
};
@@ -221,4 +233,20 @@
/* [out] */ UINT *puArgErr);
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_MonikerDisplayName )(
+ ISpy * This,
+ /* [retval][out] */ BSTR *psMonikerDisplayName);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CreationTime )(
+ ISpy * This,
+ /* [retval][out] */ DATE *pfTime);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_FriendlyName )(
+ ISpy * This,
+ /* [retval][out] */ BSTR *psFriendlyName);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_FriendlyName )(
+ ISpy * This,
+ /* [in] */ BSTR sFriendlyName);
+
END_INTERFACE
} ISpyVtbl;
@@ -256,4 +284,16 @@
( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
+
+#define ISpy_get_MonikerDisplayName(This,psMonikerDisplayName) \
+ ( (This)->lpVtbl -> get_MonikerDisplayName(This,psMonikerDisplayName) )
+
+#define ISpy_get_CreationTime(This,pfTime) \
+ ( (This)->lpVtbl -> get_CreationTime(This,pfTime) )
+
+#define ISpy_get_FriendlyName(This,psFriendlyName) \
+ ( (This)->lpVtbl -> get_FriendlyName(This,psFriendlyName) )
+
+#define ISpy_put_FriendlyName(This,sFriendlyName) \
+ ( (This)->lpVtbl -> put_FriendlyName(This,sFriendlyName) )
#endif /* COBJMACROS */
Index: /trunk/DirectShowSpy/DirectShowSpy_p.c
===================================================================
--- /trunk/DirectShowSpy/DirectShowSpy_p.c (revision 241)
+++ /trunk/DirectShowSpy/DirectShowSpy_p.c (revision 242)
@@ -5,5 +5,5 @@
/* File created by MIDL compiler version 7.00.0555 */
-/* at Fri Jan 10 11:37:20 2014
+/* at Sat Jan 11 18:11:25 2014
*/
/* Compiler settings for DirectShowSpy.idl:
@@ -50,6 +50,6 @@
#include "DirectShowSpy_i.h"
-#define TYPE_FORMAT_STRING_SIZE 65
-#define PROC_FORMAT_STRING_SIZE 145
+#define TYPE_FORMAT_STRING_SIZE 83
+#define PROC_FORMAT_STRING_SIZE 253
#define EXPR_FORMAT_STRING_SIZE 1
#define TRANSMIT_AS_TABLE_SIZE 0
@@ -131,5 +131,5 @@
{
- /* Procedure get_FilterGraph */
+ /* Procedure get_MonikerDisplayName */
0x33, /* FC_AUTO_HANDLE */
@@ -143,14 +143,14 @@
0x2, /* 2 */
/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 18 */ NdrFcShort( 0x1 ), /* 1 */
/* 20 */ NdrFcShort( 0x0 ), /* 0 */
/* 22 */ NdrFcShort( 0x0 ), /* 0 */
- /* Parameter ppFilterGraphUnknown */
-
-/* 24 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+ /* Parameter psMonikerDisplayName */
+
+/* 24 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
+/* 28 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
/* Return value */
@@ -161,5 +161,5 @@
0x0, /* 0 */
- /* Procedure put_FilterGraph */
+ /* Procedure get_CreationTime */
/* 36 */ 0x33, /* FC_AUTO_HANDLE */
@@ -169,6 +169,6 @@
/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
/* 46 */ NdrFcShort( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+/* 48 */ NdrFcShort( 0x2c ), /* 44 */
+/* 50 */ 0x44, /* Oi2 Flags: has return, has ext, */
0x2, /* 2 */
/* 52 */ 0x8, /* 8 */
@@ -178,9 +178,10 @@
/* 58 */ NdrFcShort( 0x0 ), /* 0 */
- /* Parameter pFilterGraphUnknown */
-
-/* 60 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
+ /* Parameter pfTime */
+
+/* 60 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
+/* 64 */ 0xc, /* FC_DOUBLE */
+ 0x0, /* 0 */
/* Return value */
@@ -192,4 +193,7 @@
/* Procedure get_Text */
+
+
+ /* Procedure get_FriendlyName */
/* 72 */ 0x33, /* FC_AUTO_HANDLE */
@@ -210,7 +214,13 @@
/* Parameter psText */
+
+ /* Parameter psFriendlyName */
+
/* 96 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 100 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
+/* 100 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
/* Return value */
@@ -221,5 +231,5 @@
0x0, /* 0 */
- /* Procedure DoPropertyFrameModal */
+ /* Procedure put_FriendlyName */
/* 108 */ 0x33, /* FC_AUTO_HANDLE */
@@ -228,20 +238,19 @@
/* 114 */ NdrFcShort( 0xa ), /* 10 */
/* 116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 118 */ NdrFcShort( 0x8 ), /* 8 */
+/* 118 */ NdrFcShort( 0x0 ), /* 0 */
/* 120 */ NdrFcShort( 0x8 ), /* 8 */
-/* 122 */ 0x44, /* Oi2 Flags: has return, has ext, */
+/* 122 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
0x2, /* 2 */
/* 124 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
/* 126 */ NdrFcShort( 0x0 ), /* 0 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
+/* 128 */ NdrFcShort( 0x1 ), /* 1 */
/* 130 */ NdrFcShort( 0x0 ), /* 0 */
- /* Parameter nParentWindowHandle */
-
-/* 132 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+ /* Parameter sFriendlyName */
+
+/* 132 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 136 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
+/* 136 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
/* Return value */
@@ -250,4 +259,95 @@
/* 140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
/* 142 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_FilterGraph */
+
+/* 144 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 146 */ NdrFcLong( 0x0 ), /* 0 */
+/* 150 */ NdrFcShort( 0x7 ), /* 7 */
+/* 152 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 154 */ NdrFcShort( 0x0 ), /* 0 */
+/* 156 */ NdrFcShort( 0x8 ), /* 8 */
+/* 158 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 160 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 162 */ NdrFcShort( 0x0 ), /* 0 */
+/* 164 */ NdrFcShort( 0x0 ), /* 0 */
+/* 166 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter ppFilterGraphUnknown */
+
+/* 168 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 170 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 172 */ NdrFcShort( 0x3c ), /* Type Offset=60 */
+
+ /* Return value */
+
+/* 174 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 176 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 178 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure put_FilterGraph */
+
+/* 180 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 182 */ NdrFcLong( 0x0 ), /* 0 */
+/* 186 */ NdrFcShort( 0x8 ), /* 8 */
+/* 188 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 190 */ NdrFcShort( 0x0 ), /* 0 */
+/* 192 */ NdrFcShort( 0x8 ), /* 8 */
+/* 194 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 196 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 198 */ NdrFcShort( 0x0 ), /* 0 */
+/* 200 */ NdrFcShort( 0x0 ), /* 0 */
+/* 202 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter pFilterGraphUnknown */
+
+/* 204 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */
+/* 206 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 208 */ NdrFcShort( 0x40 ), /* Type Offset=64 */
+
+ /* Return value */
+
+/* 210 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 212 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 214 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure DoPropertyFrameModal */
+
+/* 216 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 218 */ NdrFcLong( 0x0 ), /* 0 */
+/* 222 */ NdrFcShort( 0xa ), /* 10 */
+/* 224 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 226 */ NdrFcShort( 0x8 ), /* 8 */
+/* 228 */ NdrFcShort( 0x8 ), /* 8 */
+/* 230 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 232 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 234 */ NdrFcShort( 0x0 ), /* 0 */
+/* 236 */ NdrFcShort( 0x0 ), /* 0 */
+/* 238 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nParentWindowHandle */
+
+/* 240 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 242 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 244 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 246 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 248 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 250 */ 0x8, /* FC_LONG */
0x0, /* 0 */
@@ -262,51 +362,64 @@
NdrFcShort( 0x0 ), /* 0 */
/* 2 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
+/* 6 */
+ 0x13, 0x0, /* FC_OP */
+/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
+/* 10 */
+ 0x1b, /* FC_CARRAY */
+ 0x1, /* 1 */
+/* 12 */ NdrFcShort( 0x2 ), /* 2 */
+/* 14 */ 0x9, /* Corr desc: FC_ULONG */
+ 0x0, /* */
+/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
+/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 20 */ 0x6, /* FC_SHORT */
+ 0x5b, /* FC_END */
+/* 22 */
+ 0x17, /* FC_CSTRUCT */
+ 0x3, /* 3 */
+/* 24 */ NdrFcShort( 0x8 ), /* 8 */
+/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
+/* 28 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 30 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 32 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 34 */ NdrFcShort( 0x0 ), /* 0 */
+/* 36 */ NdrFcShort( 0x4 ), /* 4 */
+/* 38 */ NdrFcShort( 0x0 ), /* 0 */
+/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
+/* 42 */
+ 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 44 */ 0xc, /* FC_DOUBLE */
+ 0x5c, /* FC_PAD */
+/* 46 */
+ 0x12, 0x0, /* FC_UP */
+/* 48 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (22) */
+/* 50 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 52 */ NdrFcShort( 0x0 ), /* 0 */
+/* 54 */ NdrFcShort( 0x4 ), /* 4 */
+/* 56 */ NdrFcShort( 0x0 ), /* 0 */
+/* 58 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (46) */
+/* 60 */
0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
-/* 6 */
+/* 62 */ NdrFcShort( 0x2 ), /* Offset= 2 (64) */
+/* 64 */
0x2f, /* FC_IP */
0x5a, /* FC_CONSTANT_IID */
-/* 8 */ NdrFcLong( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x0 ), /* 0 */
-/* 14 */ NdrFcShort( 0x0 ), /* 0 */
-/* 16 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 18 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 20 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 22 */ 0x0, /* 0 */
+/* 66 */ NdrFcLong( 0x0 ), /* 0 */
+/* 70 */ NdrFcShort( 0x0 ), /* 0 */
+/* 72 */ NdrFcShort( 0x0 ), /* 0 */
+/* 74 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 76 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 78 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 80 */ 0x0, /* 0 */
0x46, /* 70 */
-/* 24 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 26 */ NdrFcShort( 0x1c ), /* Offset= 28 (54) */
-/* 28 */
- 0x13, 0x0, /* FC_OP */
-/* 30 */ NdrFcShort( 0xe ), /* Offset= 14 (44) */
-/* 32 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 34 */ NdrFcShort( 0x2 ), /* 2 */
-/* 36 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 38 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 40 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 42 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 44 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (32) */
-/* 50 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x4 ), /* 4 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0xffde ), /* Offset= -34 (28) */
0x0
@@ -346,5 +459,8 @@
(unsigned short) -1,
(unsigned short) -1,
- 0
+ 0,
+ 36,
+ 72,
+ 108
};
@@ -370,7 +486,7 @@
0,
0};
-CINTERFACE_PROXY_VTABLE(7) _ISpyProxyVtbl =
-{
- 0,
+CINTERFACE_PROXY_VTABLE(11) _ISpyProxyVtbl =
+{
+ &ISpy_ProxyInfo,
&IID_ISpy,
IUnknown_QueryInterface_Proxy,
@@ -380,5 +496,9 @@
0 /* IDispatch::GetTypeInfo */ ,
0 /* IDispatch::GetIDsOfNames */ ,
- 0 /* IDispatch_Invoke_Proxy */
+ 0 /* IDispatch_Invoke_Proxy */ ,
+ (void *) (INT_PTR) -1 /* ISpy::get_MonikerDisplayName */ ,
+ (void *) (INT_PTR) -1 /* ISpy::get_CreationTime */ ,
+ (void *) (INT_PTR) -1 /* ISpy::get_FriendlyName */ ,
+ (void *) (INT_PTR) -1 /* ISpy::put_FriendlyName */
};
@@ -389,5 +509,9 @@
STUB_FORWARDING_FUNCTION,
STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION
+ STUB_FORWARDING_FUNCTION,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2
};
@@ -396,5 +520,5 @@
&IID_ISpy,
&ISpy_ServerInfo,
- 7,
+ 11,
&ISpy_table[-3],
CStdStubBuffer_DELEGATING_METHODS
@@ -544,8 +668,8 @@
(unsigned short) -1,
(unsigned short) -1,
- 0,
- 36,
+ 144,
+ 180,
72,
- 108
+ 216
};
Index: /trunk/DirectShowSpy/FilterGraphHelper.h
===================================================================
--- /trunk/DirectShowSpy/FilterGraphHelper.h (revision 241)
+++ /trunk/DirectShowSpy/FilterGraphHelper.h (revision 242)
@@ -11,4 +11,6 @@
#include "AboutDialog.h"
#include "..\..\Repository-Private\Utilities\EmailTools\Message.h"
+
+INT_PTR DoFilterGraphListPropertySheetModal(HWND hParentWindow);
////////////////////////////////////////////////////////////
@@ -51,5 +53,6 @@
class CPropertyFrameDialog :
public CDialogImpl,
- public CDialogResize
+ public CDialogResize,
+ public CDialogWithAcceleratorsT
{
public:
@@ -68,4 +71,7 @@
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_PROPERTYFRAME_APPLY, OnApply)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENGSN, OnActionCommand)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENGE, OnActionCommand)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENLIST, OnActionCommand)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
@@ -169,4 +175,152 @@
pMessage;
return E_NOTIMPL;
+ }
+ };
+
+ ////////////////////////////////////////////////////
+ // CActionDialog
+
+ class CActionDialog :
+ public CDialogImpl,
+ public CDialogResize
+ {
+ public:
+ enum { IDD = IDD_FILTERGRAPHHELPER_ACTION };
+
+ BEGIN_MSG_MAP_EX(CActionDialog)
+ //CHAIN_MSG_MAP(CDialogImpl)
+ CHAIN_MSG_MAP(CDialogResize)
+ MSG_WM_INITDIALOG(OnInitDialog)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_SAVEAS, OnSaveAs)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENGSN, OnOpenGsn)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENGE, OnOpenGe)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHHELPER_ACTION_OPENLIST, OnOpenList)
+ REFLECT_NOTIFICATIONS()
+ END_MSG_MAP()
+
+ BEGIN_DLGRESIZE_MAP(CActionDialog)
+ //DLGRESIZE_CONTROL(IDC_FILTERGRAPHHELPER_ACTION_, DLSZ_SIZE_X | DLSZ_SIZE_Y)
+ END_DLGRESIZE_MAP()
+
+ private:
+ CPropertyFrameDialog* m_pOwner;
+ BOOL m_bActivating;
+ CStatic m_TitleStatic;
+ CFont m_TitleFont;
+ CButton m_SaveAsButton;
+ CRoHyperStatic m_SaveAsDescriptionStatic;
+ CButton m_OpenGsnButton;
+ CRoHyperStatic m_OpenGsnDescriptionStatic;
+ CButton m_OpenGeButton;
+ CRoHyperStatic m_OpenGeDescriptionStatic;
+ CButton m_OpenListButton;
+ CRoHyperStatic m_OpenListDescriptionStatic;
+ CStringW m_sFilterGraphMonikerDisplayName;
+ CRoMapT m_ChangeMap;
+
+ public:
+ // CActionDialog
+
+ // Window Message Handler
+ LRESULT OnInitDialog(HWND, LPARAM lParam)
+ {
+ m_pOwner = (CPropertyFrameDialog*) lParam;
+ m_bActivating = TRUE;
+ _ATLTRY
+ {
+ CWaitCursor WaitCursor;
+ m_TitleStatic = GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_TITLE);
+ CreateTitleFont(m_TitleFont, m_TitleStatic);
+ m_SaveAsButton = GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_SAVEAS);
+ _W(m_SaveAsDescriptionStatic.SubclassWindow(GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_SAVEASDESCRIPTION)));
+ m_OpenGsnButton = GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENGSN);
+ _W(m_OpenGsnDescriptionStatic.SubclassWindow(GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENGSNDESCRIPTION)));
+ m_OpenGeButton = GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENGE);
+ _W(m_OpenGeDescriptionStatic.SubclassWindow(GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENGEDESCRIPTION)));
+ m_OpenListButton = GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENLIST);
+ _W(m_OpenListDescriptionStatic.SubclassWindow(GetDlgItem(IDC_FILTERGRAPHHELPER_ACTION_OPENLISTDESCRIPTION)));
+ //DlgResize_Init(FALSE, FALSE);
+ _ATLTRY
+ {
+ m_sFilterGraphMonikerDisplayName.Empty();
+ const CComQIPtr pSpy = m_pOwner->m_Owner.GetFilterGraph();
+ if(pSpy)
+ {
+ CComBSTR sFilterGraphMonikerDisplayName;
+ __C(pSpy->get_MonikerDisplayName(&sFilterGraphMonikerDisplayName));
+ m_sFilterGraphMonikerDisplayName = sFilterGraphMonikerDisplayName;
+ }
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
+ const BOOL bMonikerDisplayNameAvailable = !m_sFilterGraphMonikerDisplayName.IsEmpty();
+ m_OpenGsnButton.EnableWindow(bMonikerDisplayNameAvailable);
+ m_OpenGeButton.EnableWindow(bMonikerDisplayNameAvailable);
+ m_bActivating = FALSE;
+ }
+ _ATLCATCH(Exception)
+ {
+ for(CWindow Window = GetWindow(GW_CHILD); Window; Window = Window.GetWindow(GW_HWNDNEXT))
+ Window.EnableWindow(FALSE);
+ AtlExceptionMessageBox(m_hWnd, Exception);
+ }
+ return TRUE;
+ }
+ LRESULT OnSaveAs(UINT, INT, HWND)
+ {
+ CPath sPath;
+ static const COMDLG_FILTERSPEC g_pFilter[] =
+ {
+ { _T("GraphEdit Files"), _T("*.grf") },
+ { _T("All Files"), _T("*.*") },
+ };
+ if(GetOsVersion() >= GetWinVistaOsVersion())
+ {
+ CShellFileSaveDialog Dialog(NULL, FOS_OVERWRITEPROMPT | FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST, _T("grf"), g_pFilter, DIM(g_pFilter));
+ if(Dialog.DoModal(m_hWnd) != IDOK)
+ return 0;
+ CString sPathString;
+ __C(Dialog.GetFilePath(sPathString));
+ sPath = (LPCTSTR) sPathString;
+ } else
+ {
+ CString sFilter;
+ CFileDialog Dialog(FALSE, _T("grf"), NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING, GetLegacyFilter(g_pFilter, sFilter));
+ if(Dialog.DoModal(m_hWnd) != IDOK)
+ return 0;
+ sPath = Dialog.m_szFileName;
+ }
+ #pragma region Save
+ // NOTE: See http://msdn.microsoft.com/en-us/library/windows/desktop/dd377551
+ const CComQIPtr pPersistStream = m_pOwner->m_Owner.GetFilterGraph();
+ __D(pPersistStream, E_NOINTERFACE);
+ CComPtr pStorage;
+ {
+ __C(StgCreateDocfile(CStringW(sPath), STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, &pStorage));
+ CComPtr pStream;
+ __C(pStorage->CreateStream(L"ActiveMovieGraph", STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, 0, 0, &pStream));
+ __C(pPersistStream->Save(pStream, TRUE));
+ }
+ __C(pStorage->Commit(STGC_DEFAULT));
+ #pragma endregion
+ MessageBeep(MB_OK);
+ return 0;
+ }
+ LRESULT OnOpenGsn(UINT, INT, HWND)
+ {
+ OpenMonikerWithGsn(m_sFilterGraphMonikerDisplayName, m_hWnd);
+ return 0;
+ }
+ LRESULT OnOpenGe(UINT, INT, HWND)
+ {
+ OpenMonikerWithGe(m_sFilterGraphMonikerDisplayName, m_hWnd);
+ return 0;
+ }
+ LRESULT OnOpenList(UINT, INT, HWND)
+ {
+ DoFilterGraphListPropertySheetModal(m_hWnd);
+ return 0;
}
};
@@ -426,10 +580,5 @@
CWaitCursor WaitCursor;
m_TitleStatic = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_TITLE);
- CLogFont LogFont;
- LogFont.SetHeight(12, CClientDC(m_hWnd));
- LogFont.lfWeight = FW_BOLD;
- _tcsncpy_s(LogFont.lfFaceName, _T("Verdana"), _TRUNCATE);
- _W(m_TitleFont.CreateFontIndirect(&LogFont));
- m_TitleStatic.SetFont(m_TitleFont);
+ CreateTitleFont(m_TitleFont, m_TitleStatic);
m_FromEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_FROM);
m_ToEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_EMAIL_TO);
@@ -561,4 +710,5 @@
TYPE_FILTER,
TYPE_FILTERPROPERTYPAGE,
+ TYPE_ACTION,
TYPE_EMAIL,
} TYPE;
@@ -615,4 +765,5 @@
CRoTreeViewT m_TreeView;
CTreeItem m_FiltersItem;
+ CTreeItem m_ActionItem;
CTreeItem m_EmailItem;
CTabCtrl m_Tab;
@@ -624,5 +775,18 @@
CButton m_ApplyButton;
CObjectPtr m_pCurrentSite;
+ CActionDialog m_ActionDialog;
CEmailDialog m_EmailDialog;
+
+ static VOID CreateTitleFont(CFont& Font, HWND hStaticWindow = NULL)
+ {
+ _A(!Font);
+ CLogFont LogFont;
+ LogFont.SetHeight(12);
+ LogFont.lfWeight = FW_BOLD;
+ _tcsncpy_s(LogFont.lfFaceName, _T("Verdana"), _TRUNCATE);
+ _W(Font.CreateFontIndirect(&LogFont));
+ if(hStaticWindow)
+ CStatic(hStaticWindow).SetFont(Font);
+ }
public:
@@ -696,5 +860,8 @@
m_FiltersItem.m_pTreeView = &m_TreeView;
#pragma endregion
- CTreeItem EmailItem = m_TreeView.InsertItem(NULL, FiltersItem, CData(CData::TYPE_EMAIL), _T("Email"));
+ CTreeItem ActionItem = m_TreeView.InsertItem(NULL, FiltersItem, CData(CData::TYPE_ACTION), _T("Action"));
+ m_ActionItem.m_hTreeItem = ActionItem;
+ m_ActionItem.m_pTreeView = &m_TreeView;
+ CTreeItem EmailItem = m_TreeView.InsertItem(NULL, ActionItem, CData(CData::TYPE_EMAIL), _T("Email"));
m_EmailItem.m_hTreeItem = EmailItem;
m_EmailItem.m_pTreeView = &m_TreeView;
@@ -720,4 +887,8 @@
HandleStatusChange(m_pCurrentSite);
}
+ INT_PTR DoModal(HWND hParentWindow = GetActiveWindow())
+ {
+ return CDialogWithAccelerators::DoModal(hParentWindow);
+ }
// CDialogResize
@@ -728,4 +899,5 @@
if(m_pCurrentSite && m_pCurrentSite->m_pPropertyPage)
_V(m_pCurrentSite->m_pPropertyPage->Move(Position));
+ _W(m_ActionDialog.SetWindowPos(NULL, Position, SWP_NOZORDER | SWP_NOACTIVATE));
_W(m_EmailDialog.SetWindowPos(NULL, Position, SWP_NOZORDER | SWP_NOACTIVATE));
}
@@ -754,4 +926,8 @@
_W(Menu.AppendMenu(MF_STRING, ID_APP_ABOUT, _T("&About...")));
#pragma endregion
+ #pragma region Icon
+ SetIcon(AtlLoadIconImage(IDI_MODULE, LR_COLOR, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)), TRUE);
+ SetIcon(AtlLoadIconImage(IDI_MODULE, LR_COLOR, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)), FALSE);
+ #pragma endregion
m_TreeView.Initialize(GetDlgItem(IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TREE));
m_TextEdit = GetDlgItem(IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TEXT);
@@ -769,4 +945,5 @@
m_CancelButton = GetDlgItem(IDCANCEL);
m_ApplyButton = GetDlgItem(IDC_FILTERGRAPHHELPER_PROPERTYFRAME_APPLY);
+ __E(m_ActionDialog.Create(m_hWnd, (LPARAM) this));
__E(m_EmailDialog.Create(m_hWnd, (LPARAM) this));
DlgResize_Init(TRUE);
@@ -816,7 +993,8 @@
{
CData& Data = m_TreeView.GetItemData(TreeItem);
+ if(Data.m_Type != CData::TYPE_ACTION)
+ m_ActionDialog.ShowWindow(SW_HIDE);
if(Data.m_Type != CData::TYPE_EMAIL)
m_EmailDialog.ShowWindow(SW_HIDE);
- #pragma endregion
if(Data.m_pBaseFilter)
{
@@ -920,4 +1098,10 @@
switch(Data.m_Type)
{
+ #pragma region TYPE_ACTION
+ case CData::TYPE_ACTION:
+ m_TextEdit.ShowWindow(SW_HIDE);
+ _W(m_ActionDialog.SetWindowPos(NULL, GetTextEditPosition(), SWP_NOZORDER | SWP_SHOWWINDOW));
+ break;
+ #pragma endregion
#pragma region TYPE_EMAIL
case CData::TYPE_EMAIL:
@@ -929,4 +1113,5 @@
m_TextEdit.ShowWindow(SW_SHOW);
m_TextEdit.SetValue(m_Owner.GetText());
+ m_ActionDialog.ShowWindow(SW_HIDE);
m_EmailDialog.ShowWindow(SW_HIDE);
}
@@ -937,4 +1122,5 @@
HideCurrentSite();
m_TextEdit.ShowWindow(SW_HIDE);
+ m_ActionDialog.ShowWindow(SW_HIDE);
m_EmailDialog.ShowWindow(SW_HIDE);
m_ApplyButton.EnableWindow(FALSE);
@@ -1019,4 +1205,8 @@
}
return 0;
+ }
+ LRESULT OnActionCommand(UINT, INT nIdentifier, HWND)
+ {
+ return m_ActionDialog.SendMessage(WM_COMMAND, nIdentifier);
}
};
@@ -1711,4 +1901,147 @@
return GetText(m_pFilterGraph);
}
+ static LPCTSTR GetPlatformName()
+ {
+ #if defined(_WIN64)
+ return _T("x64");
+ #else
+ return _T("Win32");
+ #endif // defined(_WIN64)
+ }
+ template
+ static CString& GetLegacyFilter(const COMDLG_FILTERSPEC (&pItems)[t_nItemCount], CString& sFilter)
+ {
+ _A(sFilter.IsEmpty());
+ for(SIZE_T nIndex = 0; nIndex < t_nItemCount; nIndex++)
+ {
+ const COMDLG_FILTERSPEC& Item = pItems[nIndex];
+ sFilter += AtlFormatString(_T("%s (%s)|%s|"), Item.pszName, Item.pszSpec, Item.pszSpec);
+ }
+ sFilter.Replace(_T('|'), 0);
+ return sFilter;
+ }
+ static BOOL OpenMonikerWithGsn(LPCWSTR pszMonikerDisplayName, HWND hParentWindow = GetActiveWindow())
+ {
+ _A(pszMonikerDisplayName);
+ static const LPCTSTR g_pszValueName = _T("GraphStudioNext Path");
+ static const LPCTSTR g_pszFileName = _T("graphstudionext.exe");
+ const CString sValueName = AtlFormatString(_T("%s (%s)"), g_pszValueName, GetPlatformName());
+ CString sPath = _RegKeyHelper::QueryStringValue(HKEY_CURRENT_USER, REGISTRY_ROOT, sValueName);
+ if(!FileExists(sPath))
+ sPath.Empty();
+ #pragma region Current Directory
+ if(sPath.IsEmpty())
+ {
+ sPath = (LPCTSTR) Combine(GetPathDirectory(GetModulePath()), g_pszFileName);
+ if(!FileExists(sPath))
+ sPath.Empty();
+ }
+ #pragma endregion
+ #pragma region Application Registry
+ if(sPath.IsEmpty())
+ {
+ #if defined(_WIN64)
+ static const LPCTSTR g_pszValueName = _T("exeLocation64");
+ #else
+ static const LPCTSTR g_pszValueName = _T("exeLocation");
+ #endif // defined(_WIN64)
+ sPath = _RegKeyHelper::QueryStringValue(HKEY_CURRENT_USER, _T("Software\\MONOGRAM\\GraphStudioNext"), g_pszValueName);
+ if(!FileExists(sPath))
+ sPath.Empty();
+ }
+ #pragma endregion
+ if(sPath.IsEmpty())
+ {
+ #pragma region Prompt
+ static const COMDLG_FILTERSPEC g_pFilter[] =
+ {
+ { _T("Executable Files"), _T("*.exe") },
+ { _T("All Files"), _T("*.*") },
+ };
+ if(GetOsVersion() >= GetWinVistaOsVersion())
+ {
+ CShellFileOpenDialog Dialog(g_pszFileName, FOS_FORCEFILESYSTEM | FOS_FILEMUSTEXIST, _T("exe"), g_pFilter, DIM(g_pFilter));
+ if(Dialog.DoModal(hParentWindow) != IDOK)
+ return FALSE;
+ __C(Dialog.GetFilePath(sPath));
+ } else
+ {
+ CString sFilter;
+ CFileDialog Dialog(TRUE, _T("exe"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING, GetLegacyFilter(g_pFilter, sFilter));
+ if(Dialog.DoModal(hParentWindow) != IDOK)
+ return FALSE;
+ sPath = Dialog.m_szFileName;
+ }
+ #pragma endregion
+ _RegKeyHelper::SetStringValue(HKEY_CURRENT_USER, REGISTRY_ROOT, sValueName, sPath);
+ }
+ CWaitCursor WaitCursor;
+ CString sParameters = AtlFormatString(_T("-a \"%ls\""), pszMonikerDisplayName);
+ SHELLEXECUTEINFO Infomation;
+ ZeroMemory(&Infomation, sizeof Infomation);
+ Infomation.cbSize = sizeof Infomation;
+ Infomation.lpFile = sPath;
+ Infomation.lpParameters = sParameters;
+ Infomation.nShow = SW_SHOWNORMAL;
+ __E(ShellExecuteEx(&Infomation));
+ return TRUE;
+ }
+ static BOOL OpenMonikerWithGe(LPCWSTR pszMonikerDisplayName, HWND hParentWindow = GetActiveWindow())
+ {
+ static const LPCTSTR g_pszValueName = _T("GraphEdit Path");
+ static const LPCTSTR g_pszFileName = _T("graphedt.exe");
+ const CString sValueName = AtlFormatString(_T("%s (%s)"), g_pszValueName, GetPlatformName());
+ CString sPath = _RegKeyHelper::QueryStringValue(HKEY_CURRENT_USER, REGISTRY_ROOT, sValueName);
+ if(!FileExists(sPath))
+ sPath.Empty();
+ #pragma region Current Directory
+ if(sPath.IsEmpty())
+ {
+ sPath = (LPCTSTR) Combine(GetPathDirectory(GetModulePath()), g_pszFileName);
+ if(!FileExists(sPath))
+ sPath.Empty();
+ }
+ #pragma endregion
+ // SUGG: Look for Windows SDK
+ if(sPath.IsEmpty())
+ {
+ #pragma region Prompt
+ static const COMDLG_FILTERSPEC g_pFilter[] =
+ {
+ { _T("Executable Files"), _T("*.exe") },
+ { _T("All Files"), _T("*.*") },
+ };
+ if(GetOsVersion() >= GetWinVistaOsVersion())
+ {
+ CShellFileOpenDialog Dialog(g_pszFileName, FOS_FORCEFILESYSTEM | FOS_FILEMUSTEXIST, _T("exe"), g_pFilter, DIM(g_pFilter));
+ if(Dialog.DoModal(hParentWindow) != IDOK)
+ return FALSE;
+ __C(Dialog.GetFilePath(sPath));
+ } else
+ {
+ CString sFilter;
+ CFileDialog Dialog(TRUE, _T("exe"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING, GetLegacyFilter(g_pFilter, sFilter));
+ if(Dialog.DoModal(hParentWindow) != IDOK)
+ return FALSE;
+ sPath = Dialog.m_szFileName;
+ }
+ #pragma endregion
+ _RegKeyHelper::SetStringValue(HKEY_CURRENT_USER, REGISTRY_ROOT, sValueName, sPath);
+ }
+ CStringW sFilterGraphMonikerDisplayName = pszMonikerDisplayName;
+ const INT nSeparatorPosition = sFilterGraphMonikerDisplayName.Find(L';');
+ if(nSeparatorPosition >= 0)
+ sFilterGraphMonikerDisplayName = sFilterGraphMonikerDisplayName.Left(nSeparatorPosition);
+ CWaitCursor WaitCursor;
+ CString sParameters = AtlFormatString(_T("-a %ls"), sFilterGraphMonikerDisplayName);
+ SHELLEXECUTEINFO Infomation;
+ ZeroMemory(&Infomation, sizeof Infomation);
+ Infomation.cbSize = sizeof Infomation;
+ Infomation.lpFile = sPath;
+ Infomation.lpParameters = sParameters;
+ Infomation.nShow = SW_SHOWNORMAL;
+ __E(ShellExecuteEx(&Infomation));
+ return TRUE;
+ }
// IFilterGraphHelper
Index: /trunk/DirectShowSpy/FilterGraphList.h
===================================================================
--- /trunk/DirectShowSpy/FilterGraphList.h (revision 241)
+++ /trunk/DirectShowSpy/FilterGraphList.h (revision 242)
@@ -18,6 +18,9 @@
// CFilterGraphListPropertySheet
+INT_PTR DoFilterGraphListPropertySheetModal(HWND hParentWindow = GetActiveWindow());
+
class CFilterGraphListPropertySheet :
- public CSizablePropertySheetT
+ public CSizablePropertySheetT,
+ public CPropertySheetWithAcceleratorsT
{
public:
@@ -35,5 +38,6 @@
class CListPropertyPage :
public CPropertyPageT,
- public CDialogResize
+ public CDialogResize,
+ public CPropertyPageWithAcceleratorsT
{
public:
@@ -44,4 +48,5 @@
CHAIN_MSG_MAP(CPropertyPage)
CHAIN_MSG_MAP(CDialogResize)
+ CHAIN_MSG_MAP(CPropertyPageWithAccelerators)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_DESTROY(OnDestroy)
@@ -50,8 +55,12 @@
MSG_LVN_ITEMCHANGED(IDC_FILTERGRAPHLIST_LIST_GRAPH, OnGraphListViewItemChanged)
MSG_LVN_DBLCLK(IDC_FILTERGRAPHLIST_LIST_GRAPH, OnGraphListViewDblClk)
+ MSG_WM_CONTEXTMENU(OnContextMenu)
COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_REFRESH, OnRefresh)
COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_CHECK, OnCheck)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_CHECKALL, OnCheckAll)
COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_COPYTOCLIPBOARD, OnCopyToClipboard)
COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_PROPERTIES, OnProperties)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_OPENGSN, OnOpenGsn)
+ COMMAND_ID_HANDLER_EX(IDC_FILTERGRAPHLIST_LIST_OPENGE, OnOpenGe)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
@@ -81,4 +90,5 @@
CComPtr m_pFilterGraphUnknown;
CComPtr m_pFilterGraph;
+ CStringW m_sFriendlyName;
SIZE_T m_nFilterCount;
CString m_sState;
@@ -108,4 +118,18 @@
m_pFilterGraphUnknown = pUnknown;
m_pFilterGraph = pFilterGraph;
+ _ATLTRY
+ {
+ const CComQIPtr pSpy = pFilterGraph;
+ if(pSpy)
+ {
+ CComBSTR sFriendlyName;
+ __C(pSpy->get_FriendlyName(&sFriendlyName));
+ m_sFriendlyName = sFriendlyName;
+ }
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
m_nFilterCount = 0;
m_sState.Empty();
@@ -185,4 +209,5 @@
{
const UINT nSelectedCount = m_GraphListView.GetSelectedCount();
+ m_CheckButton.EnableWindow(nSelectedCount > 0);
m_CopyToClipboardButton.EnableWindow(nSelectedCount > 0);
m_PropertiesButton.EnableWindow(nSelectedCount == 1);
@@ -369,4 +394,8 @@
return 0;
}
+ LRESULT OnTranslateAccelerator(MSG* pMessage)
+ {
+ return TranslateAccelerator(m_hWnd, m_hAccelerators, pMessage) ? PSNRET_MESSAGEHANDLED : PSNRET_NOERROR;
+ }
LRESULT OnGraphListViewGetDispInfo(NMLVDISPINFO* pHeader)
{
@@ -383,13 +412,16 @@
sTextBuffer = Item.m_sTime;
break;
- case 3: // Filter Count
+ case 3: // Friendly Name
+ sTextBuffer = CString(Item.m_sFriendlyName);
+ break;
+ case 4: // Filter Count
if(Item.m_pFilterGraph)
sTextBuffer = AtlFormatString(_T("%d"), Item.m_nFilterCount);
break;
- case 4: // State
+ case 5: // State
if(Item.m_pFilterGraph)
sTextBuffer = Item.m_sState;
break;
- case 5: // Process Image Directory
+ case 6: // Process Image Directory
sTextBuffer = (LPCTSTR) GetPathDirectory(Item.m_sProcessImagePath);
break;
@@ -407,5 +439,7 @@
sTextBuffer.AppendFormat(_T("Process: %d (0x%X) %s\r\n"), Item.m_nProcessIdentifier, Item.m_nProcessIdentifier, CString(FindFileName(Item.m_sProcessImagePath)));
if(!Item.m_sTime.IsEmpty())
- sTextBuffer.AppendFormat(_T("CreationTime: %s\r\n"), Item.m_sTime);
+ sTextBuffer.AppendFormat(_T("Creation Time: %s\r\n"), Item.m_sTime);
+ if(!Item.m_sFriendlyName.IsEmpty())
+ sTextBuffer.AppendFormat(_T("Friendly Name: %ls\r\n"), Item.m_sFriendlyName);
if(Item.m_pFilterGraph)
{
@@ -452,4 +486,24 @@
return 0;
}
+ LRESULT OnContextMenu(CWindow Window, CPoint Position)
+ {
+ if(Window == m_GraphListView)
+ {
+ CMenu ContainerMenu = AtlLoadMenu(IDD);
+ CMenuHandle Menu = ContainerMenu.GetSubMenu(0);
+ const UINT nCount = m_GraphListView.GetItemCount();
+ const UINT nSelectedCount = m_GraphListView.GetSelectedCount();
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_CHECK, MF_BYCOMMAND | (m_CheckButton.IsWindowEnabled() ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_CHECKALL, MF_BYCOMMAND | ((nCount > 0) ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_COPYTOCLIPBOARD, MF_BYCOMMAND | (m_CopyToClipboardButton.IsWindowEnabled() ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_OPENGSN, MF_BYCOMMAND | ((nSelectedCount == 1) ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_OPENGE, MF_BYCOMMAND | ((nSelectedCount == 1) ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_REFRESH, MF_BYCOMMAND | (m_RefreshButton.IsWindowEnabled() ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.EnableMenuItem(IDC_FILTERGRAPHLIST_LIST_PROPERTIES, MF_BYCOMMAND | (m_PropertiesButton.IsWindowEnabled() ? MF_ENABLED : MF_GRAYED | MF_DISABLED));
+ Menu.SetMenuDefaultItem(IDC_FILTERGRAPHLIST_LIST_PROPERTIES);
+ Menu.TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN | TPM_TOPALIGN, Position.x, Position.y, m_hWnd);
+ }
+ return 0;
+ }
LRESULT OnRefresh(UINT, INT, HWND)
{
@@ -463,4 +517,16 @@
CWaitCursor WaitCursor;
for(INT nItem = m_GraphListView.GetNextItem(-1, LVNI_SELECTED); nItem >= 0; nItem = m_GraphListView.GetNextItem(nItem, LVNI_SELECTED))
+ {
+ CItem& Item = m_GraphListView.GetItemData(nItem);
+ if(Item.FilterGraphNeeded(m_pRunningObjectTable))
+ if(Item.Check())
+ m_GraphListView.RedrawItems(nItem, nItem);
+ }
+ return 0;
+ }
+ LRESULT OnCheckAll(UINT, INT, HWND)
+ {
+ CWaitCursor WaitCursor;
+ for(INT nItem = m_GraphListView.GetItemCount() - 1; nItem >= 0; nItem--)
{
CItem& Item = m_GraphListView.GetItemData(nItem);
@@ -493,4 +559,26 @@
pFilterGraphHelper->SetFilterGraph(Item.m_pFilterGraph);
_V(pFilterGraphHelper->DoPropertyFrameModal((LONG) (LONG_PTR) m_hWnd));
+ return 0;
+ }
+ LRESULT OnOpenGsn(UINT, INT, HWND)
+ {
+ const INT nItem = m_GraphListView.GetNextItem(-1, LVNI_SELECTED);
+ if(nItem < 0)
+ return 0;
+ CItem& Item = m_GraphListView.GetItemData(nItem);
+ if(!Item.FilterGraphNeeded(m_pRunningObjectTable))
+ return 0;
+ CFilterGraphHelper::OpenMonikerWithGsn(Item.m_sDisplayName, m_hWnd);
+ return 0;
+ }
+ LRESULT OnOpenGe(UINT, INT, HWND)
+ {
+ const INT nItem = m_GraphListView.GetNextItem(-1, LVNI_SELECTED);
+ if(nItem < 0)
+ return 0;
+ CItem& Item = m_GraphListView.GetItemData(nItem);
+ if(!Item.FilterGraphNeeded(m_pRunningObjectTable))
+ return 0;
+ CFilterGraphHelper::OpenMonikerWithGe(Item.m_sDisplayName, m_hWnd);
return 0;
}
@@ -532,4 +620,8 @@
return TRUE;
}
+ INT_PTR DoModal(HWND hParentWindow)
+ {
+ return CPropertySheetWithAccelerators::DoModal(hParentWindow);
+ }
// Window message handelrs
@@ -551,2 +643,7 @@
};
+inline INT_PTR DoFilterGraphListPropertySheetModal(HWND hParentWindow)
+{
+ CFilterGraphListPropertySheet PropertySheet;
+ return PropertySheet.DoModal(hParentWindow);
+}
Index: /trunk/DirectShowSpy/FilterGraphSpy.h
===================================================================
--- /trunk/DirectShowSpy/FilterGraphSpy.h (revision 241)
+++ /trunk/DirectShowSpy/FilterGraphSpy.h (revision 242)
@@ -85,5 +85,5 @@
T* m_pSpy;
- CObjectPtr GetSpy() const throw()
+ CObjectPtr GetSpy() const
{
CRoCriticalSectionLock DataLock(m_DataCriticalSection);
@@ -93,14 +93,14 @@
public:
// CAmGraphBuilderCallback
- CAmGraphBuilderCallback() throw() :
+ CAmGraphBuilderCallback() :
m_pSpy(NULL)
{
_Z5(atlTraceRefcount, 5, _T("this 0x%p\n"), this);
}
- ~CAmGraphBuilderCallback() throw()
+ ~CAmGraphBuilderCallback()
{
_Z4(atlTraceRefcount, 4, _T("this 0x%p\n"), this);
}
- VOID Initialize(T* pSpy) throw()
+ VOID Initialize(T* pSpy)
{
_A(pSpy);
@@ -110,10 +110,10 @@
m_pSpy = pSpy;
}
- VOID Terminate() throw()
+ VOID Terminate()
{
CRoCriticalSectionLock DataLock(m_DataCriticalSection);
m_pSpy = NULL;
}
- BOOL SetGraphBuilder(const CComQIPtr pObjectWithSite) throw()
+ BOOL SetGraphBuilder(const CComQIPtr pObjectWithSite)
{
if(!pObjectWithSite)
@@ -125,5 +125,5 @@
return FALSE;
}
- BOOL SetGraphBuilder(IUnknown* pObjectWithSiteUnknown) throw()
+ BOOL SetGraphBuilder(IUnknown* pObjectWithSiteUnknown)
{
return SetGraphBuilder(CComQIPtr(pObjectWithSiteUnknown));
@@ -131,5 +131,5 @@
// IAMGraphBuilderCallback
- STDMETHOD(SelectedFilter)(IMoniker* pMoniker) throw()
+ STDMETHOD(SelectedFilter)(IMoniker* pMoniker)
{
_Z4(atlTraceCOM, 4, _T("this 0x%p, pMoniker %ls\n"), this, _FilterGraphHelper::GetMonikerDisplayName(pMoniker));
@@ -152,5 +152,5 @@
return S_OK;
}
- STDMETHOD(CreatedFilter)(IBaseFilter* pBaseFilter) throw()
+ STDMETHOD(CreatedFilter)(IBaseFilter* pBaseFilter)
{
_Z4(atlTraceCOM, 4, _T("this 0x%p, pBaseFilter 0x%p %ls \"%ls\"\n"), this, pBaseFilter, _FilterGraphHelper::GetFilterClassIdentifierString(pBaseFilter), _FilterGraphHelper::GetFilterName(pBaseFilter));
@@ -186,14 +186,17 @@
_FilterGraphHelper::CRotRunningFilterGraph m_RunningFilterGraph;
INT m_nRunningFilterGraphReference;
+ SYSTEMTIME m_Time;
+ CStringW m_sMonikerDisplayName;
CComPtr m_pTemporaryUnknown;
CObjectPtr m_pPrivateAmGraphBuilderCallback;
mutable CRoCriticalSection m_DataCriticalSection;
CComPtr m_pSite;
-
- BOOL IsAggregated() const throw()
+ CStringW m_sFriendlyName;
+
+ BOOL IsAggregated() const
{
return (ULONG) m_dwRef >= 0x00001000;
}
- VOID ReleaseTemporaryUnknown() throw()
+ VOID ReleaseTemporaryUnknown()
{
CComPtr pUnknown;
@@ -210,4 +213,7 @@
CInterlockedLong& nReferenceCount = reinterpret_cast(m_dwRef);
const LONG nBeforeReferenceCount = m_dwRef;
+ SYSTEMTIME Time;
+ GetLocalTime(&Time);
+ CStringW sMonikerDisplayName;
static CConstIntegerRegistryValue g_nEnableRotMonikerItemNameSuffix(_T("Enable ROT Moniker Item Name Suffix")); // 0 Default (Enabled), 1 Disabled, 2 Enabled
if(g_nEnableRotMonikerItemNameSuffix != 1)
@@ -216,11 +222,14 @@
_W(GetModuleFileName(NULL, pszPath, DIM(pszPath)));
LPCTSTR pszName = FindFileName(pszPath);
- SYSTEMTIME Time;
- GetLocalTime(&Time);
CString sItemName = AtlFormatString(_T("%s; process: %s, time: %02d-%02d-%02d"), m_RunningFilterGraph.GetDefaultMonikerItemName(GetControllingUnknown()), pszName, Time.wHour, Time.wMinute, Time.wSecond);
- m_RunningFilterGraph.SetFilterGraph(GetControllingUnknown(), CStringW(sItemName));
+ m_RunningFilterGraph.SetFilterGraph(GetControllingUnknown(), CStringW(sItemName), &sMonikerDisplayName);
} else
- m_RunningFilterGraph.SetFilterGraph(GetControllingUnknown());
- _Z4(atlTraceRefcount, 4, _T("this 0x%p, m_bIsAggregated %d, m_dwRef %d\n"), this, m_bIsAggregated, m_dwRef);
+ m_RunningFilterGraph.SetFilterGraph(GetControllingUnknown(), &sMonikerDisplayName);
+ _Z4(atlTraceRefcount, 4, _T("this 0x%p, m_bIsAggregated %d, m_dwRef %d, sMonikerDisplayName \"%ls\"\n"), this, m_bIsAggregated, m_dwRef, sMonikerDisplayName);
+ {
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ m_Time = Time;
+ m_sMonikerDisplayName = sMonikerDisplayName;
+ }
if(!m_bIsAggregated)
{
@@ -236,5 +245,5 @@
Release();
}
- VOID ResetRunningFilterGraph() throw()
+ VOID ResetRunningFilterGraph()
{
if(!m_RunningFilterGraph.GetCookie())
@@ -244,7 +253,11 @@
_Z4(atlTraceRefcount, 4, _T("this 0x%p, m_dwRef 0x%x\n"), this, m_dwRef);
m_RunningFilterGraph.SetFilterGraph(NULL);
+ {
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ m_sMonikerDisplayName.Empty();
+ }
_Z4(atlTraceRefcount, 4, _T("this 0x%p, m_dwRef 0x%x\n"), this, m_dwRef);
}
- HRESULT InternalQueryFilterGraph3Interface(REFIID InterfaceIdentifier, VOID** ppvObject) throw()
+ HRESULT InternalQueryFilterGraph3Interface(REFIID InterfaceIdentifier, VOID** ppvObject)
{
_A(InterfaceIdentifier == __uuidof(IFilterGraph3));
@@ -260,9 +273,9 @@
return S_OK;
}
- static HRESULT WINAPI QueryFilterGraph3Interface(VOID* pvThis, REFIID InterfaceIdentifier, VOID** ppvObject, DWORD_PTR) throw()
+ static HRESULT WINAPI QueryFilterGraph3Interface(VOID* pvThis, REFIID InterfaceIdentifier, VOID** ppvObject, DWORD_PTR)
{
return ((CSpy*) pvThis)->InternalQueryFilterGraph3Interface(InterfaceIdentifier, ppvObject);
}
- HRESULT HookMediaControlAddSourceFilter(BSTR sFileName, IBaseFilter** ppBaseFilter, BOOL* pbDefault) throw()
+ HRESULT HookMediaControlAddSourceFilter(BSTR sFileName, IBaseFilter** ppBaseFilter, BOOL* pbDefault)
{
_A(pbDefault);
@@ -276,5 +289,5 @@
public:
// CSpyT
- static LPCTSTR GetOriginalLibraryName() throw()
+ static LPCTSTR GetOriginalLibraryName()
{
return _T("quartz.dll");
@@ -284,5 +297,5 @@
return _StringHelper::GetLine(T::IDR, 2);
}
- static HRESULT WINAPI UpdateRegistry(BOOL bRegister) throw()
+ static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
_Z2(atlTraceRegistrar, 2, _T("bRegister %d\n"), bRegister);
@@ -297,14 +310,15 @@
return S_OK;
}
- CSpyT() throw() :
+ CSpyT() :
m_hQuartzModule(NULL)
{
_Z4(atlTraceRefcount, 4, _T("this 0x%p\n"), this);
- }
- ~CSpyT() throw()
+ ZeroMemory(&m_Time, sizeof m_Time);
+ }
+ ~CSpyT()
{
_Z4(atlTraceRefcount, 4, _T("this 0x%p\n"), this);
}
- HRESULT FinalConstruct() throw()
+ HRESULT FinalConstruct()
{
m_bIsAggregated = IsAggregated();
@@ -419,5 +433,5 @@
return S_OK;
}
- VOID FinalRelease() throw()
+ VOID FinalRelease()
{
_Z5(atlTraceRefcount, 5, _T("m_dwRef 0x%x\n"), m_dwRef);
@@ -479,5 +493,5 @@
#pragma endregion
}
- HRESULT QueryObjectWithSiteInterface(REFIID InterfaceIdentifier, LPVOID* ppvObject) throw()
+ HRESULT QueryObjectWithSiteInterface(REFIID InterfaceIdentifier, LPVOID* ppvObject)
{
_A(InterfaceIdentifier == __uuidof(IObjectWithSite));
@@ -491,9 +505,9 @@
return m_pInnerUnknown->QueryInterface(InterfaceIdentifier, ppvObject);
}
- static HRESULT WINAPI QueryObjectWithSiteInterface(VOID* pvInstance, REFIID InterfaceIdentifier, LPVOID* ppvObject, DWORD_PTR) throw()
+ static HRESULT WINAPI QueryObjectWithSiteInterface(VOID* pvInstance, REFIID InterfaceIdentifier, LPVOID* ppvObject, DWORD_PTR)
{
return ((CSpy*) pvInstance)->QueryObjectWithSiteInterface(InterfaceIdentifier, ppvObject);
}
- CComPtr GetSite() const throw()
+ CComPtr GetSite() const
{
CRoCriticalSectionLock DataLock(m_DataCriticalSection);
@@ -520,5 +534,5 @@
return FALSE;
}
- static BOOL LookupEventCodeName(LONG nEventCode, LPCSTR& pszName) throw()
+ static BOOL LookupEventCodeName(LONG nEventCode, LPCSTR& pszName)
{
// NOTE: See Windows SDK evcode.h
@@ -573,7 +587,71 @@
// ISpy
+ STDMETHOD(get_MonikerDisplayName)(BSTR* psMonikerDisplayName)
+ {
+ _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
+ _ATLTRY
+ {
+ __D(psMonikerDisplayName, E_POINTER);
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ *psMonikerDisplayName = CComBSTR(m_sMonikerDisplayName).Detach();
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
+ return S_OK;
+ }
+ STDMETHOD(get_CreationTime)(DATE* pfTime)
+ {
+ _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
+ _ATLTRY
+ {
+ __D(pfTime, E_POINTER);
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ FILETIME LocalFileTime, FileTime;
+ _W(SystemTimeToFileTime(&m_Time, &LocalFileTime));
+ _W(LocalFileTimeToFileTime(&LocalFileTime, &FileTime));
+ SYSTEMTIME Time;
+ _W(FileTimeToSystemTime(&FileTime, &Time));
+ _W(SystemTimeToVariantTime(&Time, pfTime));
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
+ return S_OK;
+ }
+ STDMETHOD(get_FriendlyName)(BSTR* psFriendlyName)
+ {
+ _Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
+ _ATLTRY
+ {
+ __D(psFriendlyName, E_POINTER);
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ *psFriendlyName = CComBSTR(m_sFriendlyName).Detach();
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
+ return S_OK;
+ }
+ STDMETHOD(put_FriendlyName)(BSTR sFriendlyName)
+ {
+ _Z4(atlTraceCOM, 4, _T("this 0x%p, sFriendlyName \"%s\"\n"), this, CString(sFriendlyName));
+ _ATLTRY
+ {
+ CRoCriticalSectionLock DataLock(m_DataCriticalSection);
+ m_sFriendlyName = sFriendlyName;
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
+ return S_OK;
+ }
// IFilterGraph
- STDMETHOD(AddFilter)(IBaseFilter* pBaseFilter, LPCWSTR pszName) throw()
+ STDMETHOD(AddFilter)(IBaseFilter* pBaseFilter, LPCWSTR pszName)
{
_Z4(atlTraceCOM, 4, _T("this 0x%p, pBaseFilter 0x%p %ls, pszName \"%s\"\n"), this, pBaseFilter, _FilterGraphHelper::GetFilterClassIdentifierString(pBaseFilter), CString(pszName));
@@ -595,5 +673,5 @@
return nResult;
}
- STDMETHOD(RemoveFilter)(IBaseFilter* pBaseFilter) throw()
+ STDMETHOD(RemoveFilter)(IBaseFilter* pBaseFilter)
{
_Z4(atlTraceCOM, 4, _T("this 0x%p, pBaseFilter 0x%p\n"), this, pBaseFilter);
@@ -613,15 +691,15 @@
return m_pInnerFilterGraph2->RemoveFilter(pBaseFilter);
}
- STDMETHOD(EnumFilters)(IEnumFilters** ppEnumFilters) throw()
+ STDMETHOD(EnumFilters)(IEnumFilters** ppEnumFilters)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
return m_pInnerFilterGraph2->EnumFilters(ppEnumFilters);
}
- STDMETHOD(FindFilterByName)(LPCWSTR pszName, IBaseFilter** ppFilter) throw()
+ STDMETHOD(FindFilterByName)(LPCWSTR pszName, IBaseFilter** ppFilter)
{
_Z4(atlTraceCOM, 4, _T("pszName \"%s\"\n"), CString(pszName));
return m_pInnerFilterGraph2->FindFilterByName(pszName, ppFilter);
}
- STDMETHOD(ConnectDirect)(IPin* pOutputPin, IPin* pInputPin, const AM_MEDIA_TYPE* pMediaType) throw()
+ STDMETHOD(ConnectDirect)(IPin* pOutputPin, IPin* pInputPin, const AM_MEDIA_TYPE* pMediaType)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -642,5 +720,5 @@
return m_pInnerFilterGraph2->ConnectDirect(pOutputPin, pInputPin, pMediaType);
}
- STDMETHOD(Reconnect)(IPin* pPin) throw()
+ STDMETHOD(Reconnect)(IPin* pPin)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -650,5 +728,5 @@
return m_pInnerFilterGraph2->Reconnect(pPin);
}
- STDMETHOD(Disconnect)(IPin* pPin) throw()
+ STDMETHOD(Disconnect)(IPin* pPin)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -658,5 +736,5 @@
return m_pInnerFilterGraph2->Disconnect(pPin);
}
- STDMETHOD(SetDefaultSyncSource)() throw()
+ STDMETHOD(SetDefaultSyncSource)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -665,5 +743,5 @@
// IGraphBuilder
- STDMETHOD(Connect)(IPin* pOutputPin, IPin* pInputPin) throw()
+ STDMETHOD(Connect)(IPin* pOutputPin, IPin* pInputPin)
{
_Z4(atlTraceCOM, 4, _T("pOutputPin 0x%p, pInputPin 0x%p\n"), pOutputPin, pInputPin);
@@ -685,15 +763,15 @@
return m_pInnerFilterGraph2->Connect(pOutputPin, pInputPin);
}
- STDMETHOD(Render)(IPin* pOutputPin) throw()
+ STDMETHOD(Render)(IPin* pOutputPin)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
return m_pInnerFilterGraph2->Render(pOutputPin);
}
- STDMETHOD(RenderFile)(LPCWSTR pszFileName, LPCWSTR pszPlayListFileName) throw()
+ STDMETHOD(RenderFile)(LPCWSTR pszFileName, LPCWSTR pszPlayListFileName)
{
_Z4(atlTraceCOM, 4, _T("pszFileName \"%s\", pszPlayListFileName \"%s\"\n"), CString(pszFileName), CString(pszPlayListFileName));
return m_pInnerFilterGraph2->RenderFile(pszFileName, pszPlayListFileName);
}
- STDMETHOD(AddSourceFilter)(LPCWSTR pszFileName, LPCWSTR pszFilterName, IBaseFilter** ppBaseFilter) throw()
+ STDMETHOD(AddSourceFilter)(LPCWSTR pszFileName, LPCWSTR pszFilterName, IBaseFilter** ppBaseFilter)
{
_Z4(atlTraceCOM, 4, _T("pszFileName \"%s\", pszFilterName \"%s\"\n"), CString(pszFileName), CString(pszFilterName));
@@ -704,15 +782,15 @@
return m_pInnerFilterGraph2->AddSourceFilter(pszFileName, pszFilterName, ppBaseFilter);
}
- STDMETHOD(SetLogFile)(DWORD_PTR hFile) throw()
+ STDMETHOD(SetLogFile)(DWORD_PTR hFile)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
return m_pInnerFilterGraph2->SetLogFile(hFile);
}
- STDMETHOD(Abort)() throw()
+ STDMETHOD(Abort)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
return m_pInnerFilterGraph2->Abort();
}
- STDMETHOD(ShouldOperationContinue)() throw()
+ STDMETHOD(ShouldOperationContinue)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -721,5 +799,5 @@
// IFilterGraph2
- STDMETHOD(AddSourceFilterForMoniker)(IMoniker* pMoniker, IBindCtx* pBindCtx, LPCWSTR pszFilterName, IBaseFilter** ppBaseFilter) throw()
+ STDMETHOD(AddSourceFilterForMoniker)(IMoniker* pMoniker, IBindCtx* pBindCtx, LPCWSTR pszFilterName, IBaseFilter** ppBaseFilter)
{
_Z4(atlTraceCOM, 4, _T("pszFilterName \"%s\"\n"), CString(pszFilterName));
@@ -730,5 +808,5 @@
return m_pInnerFilterGraph2->AddSourceFilterForMoniker(pMoniker, pBindCtx, pszFilterName, ppBaseFilter);
}
- STDMETHOD(ReconnectEx)(IPin* pPin, const AM_MEDIA_TYPE* pMediaType) throw()
+ STDMETHOD(ReconnectEx)(IPin* pPin, const AM_MEDIA_TYPE* pMediaType)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -738,5 +816,5 @@
return m_pInnerFilterGraph2->ReconnectEx(pPin, pMediaType);
}
- STDMETHOD(RenderEx)(IPin* pOutputPin, DWORD nFlags, DWORD* pnContext) throw()
+ STDMETHOD(RenderEx)(IPin* pOutputPin, DWORD nFlags, DWORD* pnContext)
{
_Z4(atlTraceCOM, 4, _T("nFlags 0x%x\n"), nFlags);
@@ -745,5 +823,5 @@
// IFilterGraph3
- STDMETHOD(SetSyncSourceEx)(IReferenceClock* pFilterGraphReferenceClock, IReferenceClock* pFilterReferenceClock, IBaseFilter* pBaseFilter) throw()
+ STDMETHOD(SetSyncSourceEx)(IReferenceClock* pFilterGraphReferenceClock, IReferenceClock* pFilterReferenceClock, IBaseFilter* pBaseFilter)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -753,5 +831,5 @@
// IMediaControl
- STDMETHOD(Run)() throw()
+ STDMETHOD(Run)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -773,5 +851,5 @@
return nRunResult;
}
- STDMETHOD(Pause)() throw()
+ STDMETHOD(Pause)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -791,5 +869,5 @@
return m_pInnerMediaControl->Pause();
}
- STDMETHOD(Stop)() throw()
+ STDMETHOD(Stop)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -799,15 +877,15 @@
return m_pInnerMediaControl->Stop();
}
- STDMETHOD(GetState)(LONG nTimeout, OAFilterState* pState) throw()
+ STDMETHOD(GetState)(LONG nTimeout, OAFilterState* pState)
{
_Z5(atlTraceCOM, 5, _T("nTimeout %d\n"), nTimeout);
return m_pInnerMediaControl->GetState(nTimeout, pState);
}
- STDMETHOD(RenderFile)(BSTR sFileName) throw()
+ STDMETHOD(RenderFile)(BSTR sFileName)
{
_Z4(atlTraceCOM, 4, _T("sFileName \"%s\"\n"), CString(sFileName));
return m_pInnerMediaControl->RenderFile(sFileName);
}
- STDMETHOD(AddSourceFilter)(BSTR sFileName, IDispatch** ppDispatch) throw()
+ STDMETHOD(AddSourceFilter)(BSTR sFileName, IDispatch** ppDispatch)
{
_Z4(atlTraceCOM, 4, _T("sFileName \"%s\"\n"), CString(sFileName));
@@ -837,5 +915,5 @@
return m_pInnerMediaControl->AddSourceFilter(sFileName, ppDispatch);
}
- STDMETHOD(get_FilterCollection)(IDispatch** ppDispatch) throw()
+ STDMETHOD(get_FilterCollection)(IDispatch** ppDispatch)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -843,5 +921,5 @@
return m_pInnerMediaControl->get_FilterCollection(ppDispatch);
}
- STDMETHOD(get_RegFilterCollection)(IDispatch** ppDispatch) throw()
+ STDMETHOD(get_RegFilterCollection)(IDispatch** ppDispatch)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -849,5 +927,5 @@
return m_pInnerMediaControl->get_RegFilterCollection(ppDispatch);
}
- STDMETHOD(StopWhenReady)() throw()
+ STDMETHOD(StopWhenReady)()
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -856,5 +934,5 @@
// IMediaEventSink
- STDMETHOD(Notify)(LONG nEventCode, LONG_PTR nParameter1, LONG_PTR nParameter2) throw()
+ STDMETHOD(Notify)(LONG nEventCode, LONG_PTR nParameter1, LONG_PTR nParameter2)
{
#if TRUE
@@ -881,10 +959,10 @@
// IMediaEvent
- STDMETHOD(GetEventHandle)(OAEVENT* pnEventHandle) throw()
+ STDMETHOD(GetEventHandle)(OAEVENT* pnEventHandle)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
return m_pInnerMediaEventEx->GetEventHandle(pnEventHandle);
}
- STDMETHOD(GetEvent)(LONG* pnEventCode, LONG_PTR* pnParameter1, LONG_PTR* pnParameter2, LONG nTimeout) throw()
+ STDMETHOD(GetEvent)(LONG* pnEventCode, LONG_PTR* pnParameter1, LONG_PTR* pnParameter2, LONG nTimeout)
{
_Z4(atlTraceCOM, nTimeout ? 4 : 5, _T("nTimeout %d\n"), nTimeout);
@@ -894,5 +972,5 @@
return nGetEventResult;
}
- STDMETHOD(WaitForCompletion)(LONG nTimeout, LONG* pnEventCode) throw()
+ STDMETHOD(WaitForCompletion)(LONG nTimeout, LONG* pnEventCode)
{
_Z4(atlTraceCOM, 4, _T("nTimeout %d\n"), nTimeout);
@@ -902,5 +980,5 @@
return nWaitForCompletionResult;
}
- STDMETHOD(CancelDefaultHandling)(LONG nEventCode) throw()
+ STDMETHOD(CancelDefaultHandling)(LONG nEventCode)
{
#if TRUE
@@ -914,5 +992,5 @@
return m_pInnerMediaEventEx->CancelDefaultHandling(nEventCode);
}
- STDMETHOD(RestoreDefaultHandling)(LONG nEventCode) throw()
+ STDMETHOD(RestoreDefaultHandling)(LONG nEventCode)
{
#if TRUE
@@ -926,5 +1004,5 @@
return m_pInnerMediaEventEx->RestoreDefaultHandling(nEventCode);
}
- STDMETHOD(FreeEventParams)(LONG nEventCode, LONG_PTR nParameter1, LONG_PTR nParameter2) throw()
+ STDMETHOD(FreeEventParams)(LONG nEventCode, LONG_PTR nParameter1, LONG_PTR nParameter2)
{
_Z4(atlTraceCOM, 4, _T("nEventCode 0x%02X, nParameter1 0x%p, nParameter2 0x%p\n"), nEventCode, nParameter1, nParameter2);
@@ -933,15 +1011,15 @@
// IMediaEventEx
- STDMETHOD(SetNotifyWindow)(OAHWND nWindowHandle, LONG nMessage, LONG_PTR nParameter) throw()
+ STDMETHOD(SetNotifyWindow)(OAHWND nWindowHandle, LONG nMessage, LONG_PTR nParameter)
{
_Z4(atlTraceCOM, 4, _T("nWindowHandle 0x%08x, nMessage 0x%04x, nParameter %p\n"), nWindowHandle, nMessage, nParameter);
return m_pInnerMediaEventEx->SetNotifyWindow(nWindowHandle, nMessage, nParameter);
}
- STDMETHOD(SetNotifyFlags)(LONG nNotifyFlags) throw()
+ STDMETHOD(SetNotifyFlags)(LONG nNotifyFlags)
{
_Z4(atlTraceCOM, 4, _T("nNotifyFlags 0x%x\n"), nNotifyFlags);
return m_pInnerMediaEventEx->SetNotifyFlags(nNotifyFlags);
}
- STDMETHOD(GetNotifyFlags)(LONG* pnNotifyFlags) throw()
+ STDMETHOD(GetNotifyFlags)(LONG* pnNotifyFlags)
{
_Z4(atlTraceCOM, 4, _T("...\n"));
@@ -950,5 +1028,5 @@
// IObjectWithSite
- STDMETHOD(SetSite)(IUnknown* pSite) throw()
+ STDMETHOD(SetSite)(IUnknown* pSite)
{
_Z4(atlTraceCOM, 4, _T("pSite 0x%p\n"), pSite);
@@ -964,5 +1042,5 @@
return S_OK;
}
- STDMETHOD(GetSite)(REFIID InterfaceIdentifier, VOID** ppvSite) throw()
+ STDMETHOD(GetSite)(REFIID InterfaceIdentifier, VOID** ppvSite)
{
_Z4(atlTraceCOM, 4, _T("InterfaceIdentifier %ls\n"), _PersistHelper::StringFromInterfaceIdentifier(InterfaceIdentifier));
Index: /trunk/DirectShowSpy/GraphBuilderCallbackPropertySheet.h
===================================================================
--- /trunk/DirectShowSpy/GraphBuilderCallbackPropertySheet.h (revision 241)
+++ /trunk/DirectShowSpy/GraphBuilderCallbackPropertySheet.h (revision 242)
@@ -1375,3 +1375,2 @@
}
};
-
Index: /trunk/DirectShowSpy/Helper.cpp
===================================================================
--- /trunk/DirectShowSpy/Helper.cpp (revision 241)
+++ /trunk/DirectShowSpy/Helper.cpp (revision 242)
@@ -29,4 +29,14 @@
FilterGraph.CoCreateInstance();
__C(FilterGraph.m_pFilterGraph->RenderFile(_T("E:\\Media\\Robotica_1080.wmv"), NULL));
+ _ATLTRY
+ {
+ const CComQIPtr pSpy = FilterGraph.m_pFilterGraph;
+ if(pSpy)
+ __C(pSpy->put_FriendlyName(CComBSTR(_T("Test"))));
+ }
+ _ATLCATCHALL()
+ {
+ _Z_EXCEPTION();
+ }
CLocalObjectPtr pHelper;
pHelper->SetFilterGraph(FilterGraph.m_pFilterGraph);
Index: /trunk/DirectShowSpy/resource.h
===================================================================
--- /trunk/DirectShowSpy/resource.h (revision 241)
+++ /trunk/DirectShowSpy/resource.h (revision 242)
@@ -11,10 +11,4 @@
#define IDI_LISTVIEW_FAILURE 81
#define IDS_PROJNAME 100
-#define IDC_MAIN_EMAIL_METHOD 101
-#define IDR_FILTERGRAPHSPY 200
-#define IDR_NOTHREADFILTERGRAPHSPY 201
-#define IDR_FILTERMAPPERSPY 202
-#define IDR_SYSTEMDEVICEENUMERATORSPY 203
-#define IDR_FILTERGRAPHHELPER 250
#define IDS_REGISTRATION_PROPERTYSHEETCAPTION 900
#define IDD_REGISTRATION_REGISTRATION_PROPERTYPAGE 910
@@ -65,6 +59,9 @@
#define IDC_FILTERGRAPHLIST_LIST_REFRESH 1410
#define IDC_FILTERGRAPHLIST_LIST_CHECK 1411
-#define IDC_FILTERGRAPHLIST_LIST_COPYTOCLIPBOARD 1412
-#define IDC_FILTERGRAPHLIST_LIST_PROPERTIES 1413
+#define IDC_FILTERGRAPHLIST_LIST_CHECKALL 1412
+#define IDC_FILTERGRAPHLIST_LIST_COPYTOCLIPBOARD 1413
+#define IDC_FILTERGRAPHLIST_LIST_PROPERTIES 1414
+#define IDC_FILTERGRAPHLIST_LIST_OPENGSN 1420
+#define IDC_FILTERGRAPHLIST_LIST_OPENGE 1421
#define IDD_FILTERGRAPHHELPER_PROPERTYFRAME 1500
#define IDC_FILTERGRAPHHELPER_PROPERTYFRAME_TREE 1505
@@ -81,4 +78,19 @@
#define IDC_FILTERGRAPHHELPER_EMAIL_BODY 1608
#define IDC_FILTERGRAPHHELPER_EMAIL_SEND 1609
+#define IDD_FILTERGRAPHHELPER_ACTION 1700
+#define IDC_FILTERGRAPHHELPER_ACTION_TITLE 1701
+#define IDC_FILTERGRAPHHELPER_ACTION_SAVEAS 1705
+#define IDC_FILTERGRAPHHELPER_ACTION_SAVEASDESCRIPTION 1706
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENGSN 1707
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENGSNDESCRIPTION 1708
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENGE 1709
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENGEDESCRIPTION 1710
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENLIST 1711
+#define IDC_FILTERGRAPHHELPER_ACTION_OPENLISTDESCRIPTION 1712
+#define IDR_FILTERGRAPHSPY 25000
+#define IDR_NOTHREADFILTERGRAPHSPY 25001
+#define IDR_FILTERMAPPERSPY 25002
+#define IDR_SYSTEMDEVICEENUMERATORSPY 25003
+#define IDR_FILTERGRAPHHELPER 25050
#define IDD_ABOUT 29900
#define IDC_ABOUT_ICON 29901
@@ -97,7 +109,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 209
-#define _APS_NEXT_COMMAND_VALUE 32768
-#define _APS_NEXT_CONTROL_VALUE 221
+#define _APS_NEXT_RESOURCE_VALUE 211
+#define _APS_NEXT_COMMAND_VALUE 32781
+#define _APS_NEXT_CONTROL_VALUE 228
#define _APS_NEXT_SYMED_VALUE 103
#endif