Kiln » TortoiseHg » TortoiseHg
Clone URL:  
ShellExt.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#ifndef _SHELL_EXT_H_ #define _SHELL_EXT_H_ #pragma data_seg(".text") #include <objbase.h> #define INITGUID #include <initguid.h> #include <shlobj.h> #include <shlguid.h> #include <vector> #include <string> #pragma data_seg() #define DLLREGUNREGNAME TEXT("DLL Registerer") enum TortoiseOLEClass { TORTOISE_OLE_INVALID, TORTOISE_OLE_ADDED, TORTOISE_OLE_MODIFIED, TORTOISE_OLE_UNCHANGED, TORTOISE_OLE_IGNORED, TORTOISE_OLE_NOTINREPO, }; // // Factory // class CDllRegSxClassFactory : public IClassFactory { protected: ULONG m_cRef; TortoiseOLEClass myclassToMake; public: CDllRegSxClassFactory(TortoiseOLEClass); ~CDllRegSxClassFactory(); public: STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *); STDMETHODIMP LockServer(BOOL); }; typedef CDllRegSxClassFactory *LPCSHELLEXTCLASSFACTORY; // // Shell extensions // class CShellExt : public IContextMenu3, IShellIconOverlayIdentifier, IShellExtInit { TortoiseOLEClass myTortoiseClass; protected: ULONG m_cRef; LPDATAOBJECT m_pDataObj; LPTSTR *m_ppszFileUserClickedOn; // [MAX_PATH] std::vector<std::string> myFiles; std::string myFolder; protected: void CShellExt::DoHgProc(const std::string &, bool=false, bool=false); public: // context menu actions STDMETHODIMP CM_Commit(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Status(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Log(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_About(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Serve(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Synch(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Update(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Recover(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Userconf(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); STDMETHODIMP CM_Repoconf(HWND hParent, LPCSTR pszWorkingDir, LPCSTR pszCmd, LPCSTR pszParam, int iShowCmd); public: CShellExt(TortoiseOLEClass); ~CShellExt(); // IUnknown STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR *ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IContextMenu3 STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); STDMETHODIMP GetCommandString(UINT idCmd, UINT uFlags, UINT FAR *reserved, LPSTR pszName, UINT cchMax); STDMETHODIMP HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam); STDMETHODIMP HandleMenuMsg2(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult); // IShellIconOverlayIdentifier STDMETHODIMP GetOverlayInfo(LPWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags); STDMETHODIMP GetPriority(int *pPriority); STDMETHODIMP IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib); // IShellExtInit STDMETHODIMP Initialize(LPCITEMIDLIST pIDFolder, LPDATAOBJECT pDataObj, HKEY hKeyID); }; typedef CShellExt *LPCSHELLEXT; #endif // _SHELL_EXT_H_