10
|
1 /* vi:set ts=8 sts=4 sw=4:
|
|
2 *
|
|
3 * VIM - Vi IMproved gvimext by Tianmiao Hu
|
|
4 *
|
|
5 * Do ":help uganda" in Vim to read copying and usage conditions.
|
|
6 * Do ":help credits" in Vim to see a list of people who contributed.
|
|
7 */
|
|
8
|
|
9 /*
|
|
10 * If you have any questions or any suggestions concerning gvimext, please
|
|
11 * contact Tianmiao Hu: tianmiao@acm.org.
|
|
12 */
|
|
13
|
|
14 #if !defined(AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_)
|
|
15 #define AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_
|
|
16
|
|
17 #if _MSC_VER > 1000
|
|
18 #pragma once
|
|
19 #endif // _MSC_VER > 1000
|
|
20
|
|
21 // Insert your headers here
|
|
22 // #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
|
23
|
|
24 //--------------------------------------------------------------
|
|
25 // common user interface routines
|
|
26 //
|
|
27 //
|
|
28 //--------------------------------------------------------------
|
|
29
|
|
30 #ifndef STRICT
|
842
|
31 # define STRICT
|
10
|
32 #endif
|
|
33
|
|
34 #define INC_OLE2 // WIN32, get ole2 from windows.h
|
|
35
|
714
|
36 /* Visual Studio 2005 has 'deprecated' many of the standard CRT functions */
|
|
37 #if _MSC_VER >= 1400
|
|
38 # define _CRT_SECURE_NO_DEPRECATE
|
|
39 # define _CRT_NONSTDC_NO_DEPRECATE
|
|
40 #endif
|
|
41
|
10
|
42 #include <windows.h>
|
|
43 #include <windowsx.h>
|
|
44 #include <shlobj.h>
|
|
45
|
835
|
46 /* Accommodate old versions of VC that don't have a modern Platform SDK */
|
|
47 #if _MSC_VER < 1300
|
842
|
48 # undef UINT_PTR
|
|
49 # define UINT_PTR UINT
|
835
|
50 #endif
|
|
51
|
10
|
52 #define ResultFromShort(i) ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
|
|
53
|
|
54 // Initialize GUIDs (should be done only and at-least once per DLL/EXE)
|
|
55 //
|
|
56 #pragma data_seg(".text")
|
|
57 #define INITGUID
|
|
58 #include <initguid.h>
|
|
59 #include <shlguid.h>
|
|
60
|
|
61 //
|
|
62 // The class ID of this Shell extension class.
|
|
63 //
|
|
64 // class id: {51EEE242-AD87-11d3-9C1E-0090278BBD99}
|
|
65 //
|
|
66 //
|
|
67 // NOTE!!! If you use this shell extension as a starting point,
|
|
68 // you MUST change the GUID below. Simply run UUIDGEN.EXE
|
|
69 // to generate a new GUID.
|
|
70 //
|
|
71
|
|
72 // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
|
|
73 // static const GUID <<name>> =
|
|
74 // { 0x51eee242, 0xad87, 0x11d3, { 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99 } };
|
|
75 //
|
|
76 //
|
|
77
|
|
78 // {51EEE242-AD87-11d3-9C1E-0090278BBD99}
|
|
79 // IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
|
|
80 // 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
|
|
81 //
|
|
82
|
|
83 // {51EEE242-AD87-11d3-9C1E-0090278BBD99} -- this is the registry format
|
|
84 DEFINE_GUID(CLSID_ShellExtension, 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
|
|
85
|
|
86 // this class factory object creates context menu handlers for windows 32 shell
|
|
87 class CShellExtClassFactory : public IClassFactory
|
|
88 {
|
|
89 protected:
|
|
90 ULONG m_cRef;
|
|
91
|
|
92 public:
|
|
93 CShellExtClassFactory();
|
|
94 ~CShellExtClassFactory();
|
|
95
|
|
96 //IUnknown members
|
|
97 STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
|
|
98 STDMETHODIMP_(ULONG) AddRef();
|
|
99 STDMETHODIMP_(ULONG) Release();
|
|
100
|
|
101 //IClassFactory members
|
|
102 STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
|
|
103 STDMETHODIMP LockServer(BOOL);
|
|
104
|
|
105 };
|
|
106 typedef CShellExtClassFactory *LPCSHELLEXTCLASSFACTORY;
|
|
107 #define MAX_HWND 100
|
|
108
|
|
109 // this is the actual OLE Shell context menu handler
|
|
110 class CShellExt : public IContextMenu,
|
|
111 IShellExtInit
|
|
112 {
|
|
113 protected:
|
|
114 ULONG m_cRef;
|
|
115 LPDATAOBJECT m_pDataObj;
|
|
116 UINT m_edit_existing_off;
|
|
117
|
|
118 // For some reason, this callback must be static
|
|
119 static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
|
|
120
|
|
121 STDMETHODIMP PushToWindow(HWND hParent,
|
|
122 LPCSTR pszWorkingDir,
|
|
123 LPCSTR pszCmd,
|
|
124 LPCSTR pszParam,
|
|
125 int iShowCmd,
|
|
126 int idHWnd);
|
|
127
|
|
128 STDMETHODIMP InvokeGvim(HWND hParent,
|
|
129 LPCSTR pszWorkingDir,
|
|
130 LPCSTR pszCmd,
|
|
131 LPCSTR pszParam,
|
|
132 int iShowCmd);
|
|
133
|
|
134 STDMETHODIMP InvokeSingleGvim(HWND hParent,
|
|
135 LPCSTR pszWorkingDir,
|
|
136 LPCSTR pszCmd,
|
|
137 LPCSTR pszParam,
|
|
138 int iShowCmd,
|
|
139 int useDiff);
|
|
140
|
|
141 public:
|
|
142 int m_cntOfHWnd;
|
|
143 HWND m_hWnd[MAX_HWND];
|
|
144 CShellExt();
|
|
145 ~CShellExt();
|
|
146
|
|
147 //IUnknown members
|
|
148 STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
|
|
149 STDMETHODIMP_(ULONG) AddRef();
|
|
150 STDMETHODIMP_(ULONG) Release();
|
|
151
|
|
152 //IShell members
|
|
153 STDMETHODIMP QueryContextMenu(HMENU hMenu,
|
|
154 UINT indexMenu,
|
|
155 UINT idCmdFirst,
|
|
156 UINT idCmdLast,
|
|
157 UINT uFlags);
|
|
158
|
|
159 STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
|
|
160
|
835
|
161 STDMETHODIMP GetCommandString(UINT_PTR idCmd,
|
10
|
162 UINT uFlags,
|
|
163 UINT FAR *reserved,
|
|
164 LPSTR pszName,
|
|
165 UINT cchMax);
|
|
166
|
|
167 //IShellExtInit methods
|
|
168 STDMETHODIMP Initialize(LPCITEMIDLIST pIDFolder,
|
|
169 LPDATAOBJECT pDataObj,
|
|
170 HKEY hKeyID);
|
|
171 };
|
|
172
|
|
173 typedef CShellExt *LPCSHELLEXT;
|
|
174 #pragma data_seg()
|
|
175
|
|
176 #endif
|