ReactOS 0.4.17-dev-804-g023d8af
CexeDropHandler.cpp
Go to the documentation of this file.
1/*
2 * executable drop target handler
3 *
4 * Copyright 2014 Huw Campbell
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <precomp.h>
22
24
26{
27
28}
29
31{
33}
34
35// IDropTarget
37{
38 TRACE ("(%p)\n", this);
39 if (*pdwEffect == DROPEFFECT_NONE)
40 return S_OK;
41
42 m_grfKeyState = dwKeyState;
43 *pdwEffect = DROPEFFECT_COPY;
44 return S_OK;
45}
46
48{
49 TRACE ("(%p)\n", this);
50 m_grfKeyState = dwKeyState;
51 *pdwEffect = DROPEFFECT_COPY;
52 return S_OK;
53}
54
56{
57 TRACE ("(%p)\n", this);
58 return S_OK;
59}
60
61HRESULT WINAPI CExeDropHandler::Drop(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
62{
63 TRACE ("(%p)\n", this);
64 FORMATETC fmt;
65 STGMEDIUM medium;
66 LPWSTR pszSrcList;
67 InitFormatEtc (fmt, CF_HDROP, TYMED_HGLOBAL);
68 WCHAR wszBuf[MAX_PATH * 2 + 8], *pszEnd = wszBuf;
69 size_t cchRemaining = _countof(wszBuf);
70
72 {
74 if (!hmenu)
75 return E_OUTOFMEMORY;
85 if (!cmd)
86 return S_OK;
87 }
88
89 if (SUCCEEDED(pDataObject->GetData(&fmt, &medium)) /* && SUCCEEDED(pDataObject->GetData(&fmt2, &medium))*/)
90 {
91 LPDROPFILES lpdf = (LPDROPFILES) GlobalLock(medium.hGlobal);
92 if (!lpdf)
93 {
94 ERR("Error locking global\n");
95 ReleaseStgMedium(&medium);
96 return E_FAIL;
97 }
98 pszSrcList = (LPWSTR) (((byte*) lpdf) + lpdf->pFiles);
99 while (*pszSrcList)
100 {
101 if (StrChrW(pszSrcList, L' ') && cchRemaining > 3)
102 StringCchPrintfExW(pszEnd, cchRemaining, &pszEnd, &cchRemaining, 0, L"\"%ls\" ", pszSrcList);
103 else
104 StringCchPrintfExW(pszEnd, cchRemaining, &pszEnd, &cchRemaining, 0, L"%ls ", pszSrcList);
105
106 pszSrcList += wcslen(pszSrcList) + 1;
107 }
108
109 GlobalUnlock(medium.hGlobal);
110 ReleaseStgMedium(&medium);
111 }
112
114
115 return S_OK;
116}
117
118
119// IPersistFile
121{
122 FIXME ("(%p)\n", this);
123 return E_NOTIMPL;
124}
125
127{
128 FIXME ("(%p)\n", this);
129 return E_NOTIMPL;
130}
131
133{
135 m_PathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR));
136 if (!m_PathTarget)
137 return E_OUTOFMEMORY;
138 memcpy(m_PathTarget, pszFileName, (len + 1) * sizeof(WCHAR));
139 return S_OK;
140}
141
143{
144 FIXME ("(%p)\n", this);
145 return E_NOTIMPL;
146}
147
149{
150 FIXME ("(%p)\n", this);
151 return E_NOTIMPL;
152}
153
155{
156 TRACE ("(%p)\n", this);
157
158 if (!lpClassId)
159 return E_POINTER;
160
161 *lpClassId = CLSID_ExeDropHandler;
162
163 return S_OK;
164}
#define shell32_hInstance
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define CF_HDROP
Definition: constants.h:410
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
STDMETHOD() GetCurFile(LPOLESTR *ppszFileName) override
STDMETHOD() Drop(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() SaveCompleted(LPCOLESTR pszFileName) override
STDMETHOD() GetClassID(CLSID *lpClassId) override
STDMETHOD() DragLeave() override
STDMETHOD() Save(LPCOLESTR pszFileName, BOOL fRemember) override
STDMETHOD() Load(LPCOLESTR pszFileName, DWORD dwMode) override
STDMETHOD() IsDirty() override
STDMETHOD() DragEnter(IDataObject *pDataObject, DWORD dwKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() DragOver(DWORD dwKeyState, POINTL pt, DWORD *pdwEffect) override
static UINT TrackPopupMenu(HMENU hMenu, const POINTL &pt)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
#define MAX_PATH
Definition: compat.h:34
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:348
#define pt(x, y)
Definition: drawing.c:79
#define L(x)
Definition: resources.c:13
#define InitFormatEtc(fe, cf, med)
Definition: editor.h:32
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: sysinfo.c:13
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
const DWORD DROPEFFECT_COPY
Definition: oleidl.idl:930
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static HMENU hpopupmenu
Definition: msg.c:19998
static HMENU hmenu
Definition: win.c:78
short WCHAR
Definition: pedump.c:58
#define LoadStringW
Definition: utils.h:64
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2787
struct _DROPFILES * LPDROPFILES
#define IDM_DRAGFILE
Definition: shresdef.h:918
#define IDM_MOVEHERE
Definition: shresdef.h:920
#define IDM_LINKHERE
Definition: shresdef.h:921
#define IDS_OPEN_WITH
Definition: shresdef.h:134
#define IDM_COPYHERE
Definition: shresdef.h:919
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:585
DWORD pFiles
Definition: shlobj.h:2325
Definition: ftp_var.h:139
Definition: dsound.c:943
uint16_t * LPWSTR
Definition: typedefs.h:56
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
#define WINAPI
Definition: msvc.h:6
#define strlenW(s)
Definition: unicode.h:28
#define E_POINTER
Definition: winerror.h:3480
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define MK_RBUTTON
Definition: winuser.h:2404
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define MF_STRING
Definition: winuser.h:138
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define IDOK
Definition: winuser.h:841
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)