xref: /reactos/dll/win32/shell32/CShellLink.h (revision 321bcc05)
1 /*
2  *
3  *      Copyright 1997  Marcus Meissner
4  *      Copyright 1998  Juergen Schmied
5  *      Copyright 2005  Mike McCormack
6  *      Copyright 2009  Andrew Hill
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21  *
22  */
23 
24 #ifndef _SHELLLINK_H_
25 #define _SHELLLINK_H_
26 
27 class CShellLink :
28     public CComCoClass<CShellLink, &CLSID_ShellLink>,
29     public CComObjectRootEx<CComMultiThreadModelNoCS>,
30     public IShellLinkA,
31     public IShellLinkW,
32     public IPersistFile,
33     public IPersistStream,
34     public IShellLinkDataList,
35     public IShellExtInit,
36     public IContextMenu,
37     public IDropTarget,
38     public IObjectWithSite,
39     public IShellPropSheetExt
40 {
41 public:
42     /* link file formats */
43 
44     #include "pshpack1.h"
45 
46     struct volume_info
47     {
48         DWORD        type;
49         DWORD        serial;
50         WCHAR        label[12];  /* assume 8.3 */
51     };
52 
53     #include "poppack.h"
54 
55 private:
56     /* data structures according to the information in the link */
57     LPITEMIDLIST    pPidl;
58     WORD        wHotKey;
59     SYSTEMTIME    time1;
60     SYSTEMTIME    time2;
61     SYSTEMTIME    time3;
62 
63     DWORD         iShowCmd;
64     LPWSTR        sIcoPath;
65     INT           iIcoNdx;
66     LPWSTR        sPath;
67     LPWSTR        sArgs;
68     LPWSTR        sWorkDir;
69     LPWSTR        sDescription;
70     LPWSTR        sPathRel;
71     LPWSTR        sProduct;
72     LPWSTR        sComponent;
73     volume_info   volume;
74     LPWSTR        sLinkPath;
75     BOOL          bRunAs;
76     BOOL          bDirty;
77     INT           iIdOpen;  /* id of the "Open" entry in the context menu */
78     CComPtr<IUnknown>        site;
79     CComPtr<IDropTarget>   mDropTarget;
80 public:
81     CShellLink();
82     ~CShellLink();
83     LPWSTR ShellLink_GetAdvertisedArg(LPCWSTR str);
84     HRESULT ShellLink_SetAdvertiseInfo(LPCWSTR str);
85     static INT_PTR CALLBACK SH_ShellLinkDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
86 
87     // IPersistFile
88     virtual HRESULT WINAPI GetClassID(CLSID *pclsid);
89     virtual HRESULT WINAPI IsDirty();
90     virtual HRESULT WINAPI Load(LPCOLESTR pszFileName, DWORD dwMode);
91     virtual HRESULT WINAPI Save(LPCOLESTR pszFileName, BOOL fRemember);
92     virtual HRESULT WINAPI SaveCompleted(LPCOLESTR pszFileName);
93     virtual HRESULT WINAPI GetCurFile(LPOLESTR *ppszFileName);
94 
95     // IPersistStream
96     // virtual WINAPI HRESULT GetClassID(CLSID *pclsid);
97     // virtual HRESULT WINAPI IsDirty();
98     virtual HRESULT WINAPI Load(IStream *stm);
99     virtual HRESULT WINAPI Save(IStream *stm, BOOL fClearDirty);
100     virtual HRESULT WINAPI GetSizeMax(ULARGE_INTEGER *pcbSize);
101 
102     // IShellLinkA
103     virtual HRESULT WINAPI GetPath(LPSTR pszFile, INT cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags);
104     virtual HRESULT WINAPI GetIDList(LPITEMIDLIST * ppidl);
105     virtual HRESULT WINAPI SetIDList(LPCITEMIDLIST pidl);
106     virtual HRESULT WINAPI GetDescription(LPSTR pszName,INT cchMaxName);
107     virtual HRESULT WINAPI SetDescription(LPCSTR pszName);
108     virtual HRESULT WINAPI GetWorkingDirectory(LPSTR pszDir,INT cchMaxPath);
109     virtual HRESULT WINAPI SetWorkingDirectory(LPCSTR pszDir);
110     virtual HRESULT WINAPI GetArguments(LPSTR pszArgs,INT cchMaxPath);
111     virtual HRESULT WINAPI SetArguments(LPCSTR pszArgs);
112     virtual HRESULT WINAPI GetHotkey(WORD *pwHotkey);
113     virtual HRESULT WINAPI SetHotkey(WORD wHotkey);
114     virtual HRESULT WINAPI GetShowCmd(INT *piShowCmd);
115     virtual HRESULT WINAPI SetShowCmd(INT iShowCmd);
116     virtual HRESULT WINAPI GetIconLocation(LPSTR pszIconPath,INT cchIconPath,INT *piIcon);
117     virtual HRESULT WINAPI SetIconLocation(LPCSTR pszIconPath,INT iIcon);
118     virtual HRESULT WINAPI SetRelativePath(LPCSTR pszPathRel, DWORD dwReserved);
119     virtual HRESULT WINAPI Resolve(HWND hwnd, DWORD fFlags);
120     virtual HRESULT WINAPI SetPath(LPCSTR pszFile);
121 
122     // IShellLinkW
123     virtual HRESULT WINAPI GetPath(LPWSTR pszFile, INT cchMaxPath, WIN32_FIND_DATAW *pfd, DWORD fFlags);
124     // virtual HRESULT WINAPI GetIDList(LPITEMIDLIST *ppidl);
125     // virtual HRESULT WINAPI SetIDList(LPCITEMIDLIST pidl);
126     virtual HRESULT WINAPI GetDescription(LPWSTR pszName, INT cchMaxName);
127     virtual HRESULT WINAPI SetDescription(LPCWSTR pszName);
128     virtual HRESULT WINAPI GetWorkingDirectory(LPWSTR pszDir, INT cchMaxPath);
129     virtual HRESULT WINAPI SetWorkingDirectory(LPCWSTR pszDir);
130     virtual HRESULT WINAPI GetArguments(LPWSTR pszArgs,INT cchMaxPath);
131     virtual HRESULT WINAPI SetArguments(LPCWSTR pszArgs);
132     // virtual HRESULT WINAPI GetHotkey(WORD *pwHotkey);
133     // virtual HRESULT WINAPI SetHotkey(WORD wHotkey);
134     // virtual HRESULT WINAPI GetShowCmd(INT *piShowCmd);
135     // virtual HRESULT WINAPI SetShowCmd(INT iShowCmd);
136     virtual HRESULT WINAPI GetIconLocation(LPWSTR pszIconPath,INT cchIconPath,INT *piIcon);
137     virtual HRESULT WINAPI SetIconLocation(LPCWSTR pszIconPath,INT iIcon);
138     virtual HRESULT WINAPI SetRelativePath(LPCWSTR pszPathRel, DWORD dwReserved);
139     // virtual HRESULT WINAPI Resolve(HWND hwnd, DWORD fFlags);
140     virtual HRESULT WINAPI SetPath(LPCWSTR pszFile);
141 
142     // IShellLinkDataList
143     virtual HRESULT WINAPI AddDataBlock(void *pDataBlock);
144     virtual HRESULT WINAPI CopyDataBlock(DWORD dwSig, void **ppDataBlock);
145     virtual HRESULT WINAPI RemoveDataBlock(DWORD dwSig);
146     virtual HRESULT WINAPI GetFlags(DWORD *pdwFlags);
147     virtual HRESULT WINAPI SetFlags(DWORD dwFlags);
148 
149     // IShellExtInit
150     virtual HRESULT WINAPI Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID);
151 
152     // IContextMenu
153     virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
154     virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici);
155     virtual HRESULT WINAPI GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax);
156 
157     // IShellPropSheetExt
158     virtual HRESULT WINAPI AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam);
159     virtual HRESULT WINAPI ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam);
160 
161     // IObjectWithSite
162     virtual HRESULT WINAPI SetSite(IUnknown *punk);
163     virtual HRESULT WINAPI GetSite(REFIID iid, void **ppvSite);
164 
165     // IDropTarget
166     virtual HRESULT WINAPI DragEnter(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
167     virtual HRESULT WINAPI DragOver(DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
168     virtual HRESULT WINAPI DragLeave();
169     virtual HRESULT WINAPI Drop(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect);
170 
171 DECLARE_REGISTRY_RESOURCEID(IDR_SHELLLINK)
172 DECLARE_NOT_AGGREGATABLE(CShellLink)
173 
174 DECLARE_PROTECT_FINAL_CONSTRUCT()
175 
176 BEGIN_COM_MAP(CShellLink)
177     COM_INTERFACE_ENTRY2_IID(IID_IPersist, IPersist, IPersistFile)
178     COM_INTERFACE_ENTRY_IID(IID_IPersistFile, IPersistFile)
179     COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
180     COM_INTERFACE_ENTRY_IID(IID_IShellLinkA, IShellLinkA)
181     COM_INTERFACE_ENTRY_IID(IID_IShellLinkW, IShellLinkW)
182     COM_INTERFACE_ENTRY_IID(IID_IShellLinkDataList, IShellLinkDataList)
183     COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
184     COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
185     COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
186     COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt)
187     COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
188 END_COM_MAP()
189 };
190 
191 #endif /* _SHELLLINK_H_ */
192