2025-04-27 07:49:33 -04:00

139 lines
3.6 KiB
C++

#include "cprt.h"
#include <stdio.h>
#include <shlobj.h> // for DROPFILES
#include <shpriv.h> // for IStorageInfo
#include "sfstr.h"
#define ARRAYSIZE(a) (sizeof((a))/sizeof((a)[0]))
// {8BA650B6-5F49-4894-BE7C-8253D75DACE7}
extern "C" const CLSID CLSID_CPrt =
{0x8ba650b6, 0x5f49, 0x4894,
{0xbe, 0x7c, 0x82, 0x53, 0xd7, 0x5d, 0xac, 0xe7}};
// {C1FB73D0-EC3A-4ba2-B512-8CDB9187B6D1}
extern "C" const CLSID IID_IHWEventHandler =
{0xC1FB73D0, 0xEC3A, 0x4ba2,
{0xB5, 0x12, 0x8C, 0xDB, 0x91, 0x87, 0xB6, 0xD1}};
STDMETHODIMP CPrtImpl::Initialize(LPCWSTR pszParams)
{
/* HRESULT hr = S_OK;
wprintf(L"=======================================================\n");
if (pszParams)
{
wprintf(L"Initilization: %s\n", pszParams);
}
else
{
wprintf(L"Initilization: <no params>\n");
}
return hr;*/
SafeStrCpyN(_szParams, pszParams, ARRAYSIZE(_szParams));
return S_OK;
}
STDMETHODIMP CPrtImpl::HandleEvent(LPCWSTR /*pszDeviceID*/, LPCWSTR /*pszDeviceIDAlt*/,
LPCWSTR /*pszEventType*/)
{
/* HRESULT hr = E_INVALIDARG;
if (pszDeviceID && pszEventType && *pszDeviceID && *pszEventType)
{
wprintf(L"-------------------------------------------------------\n");
wprintf(L"Device ID: %s\n", pszDeviceID);
if (pszDeviceIDAlt)
{
wprintf(L"Device ID Alt: %s\n", pszDeviceIDAlt);
}
else
{
wprintf(L"Device ID Alt: <NULL>\n");
}
wprintf(L"Event type: %s\n", pszEventType);
hr = S_OK;
}
return hr;*/
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
WCHAR sz[4096];
si.cb = sizeof(si);
ExpandEnvironmentStrings(_szParams, sz, ARRAYSIZE(sz));
CreateProcess(sz, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
return S_OK;
}
STDMETHODIMP CPrtImpl::HandleEventWithContent(LPCWSTR /*pszDeviceID*/,
LPCWSTR /*pszDeviceIDAlt*/, LPCWSTR /*pszEventType*/,
LPCWSTR /*pszContentTypeHandler*/, IDataObject* /*pdataobject*/)
{
/* HRESULT hr = E_INVALIDARG;
if (pszDeviceID && pszEventType && pszContentTypeHandler && *pszDeviceID &&
*pszEventType && *pszContentTypeHandler)
{
wprintf(L"-------------------------------------------------------\n");
wprintf(L"Device ID: %s\n", pszDeviceID);
if (pszDeviceIDAlt)
{
wprintf(L"Device ID Alt: %s\n", pszDeviceIDAlt);
}
else
{
wprintf(L"Device ID Alt: <NULL>\n");
}
wprintf(L"Event type: %s\n", pszEventType);
wprintf(L"Content Type Handler: %s\n", pszContentTypeHandler);
hr = S_OK;
}
STGMEDIUM medium = {0};
FORMATETC fmte = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (SUCCEEDED(pdataobject->QueryGetData(&fmte)))
{
if (SUCCEEDED(pdataobject->GetData(&fmte, &medium)))
{
DROPFILES* pdf = (DROPFILES*)GlobalLock(medium.hGlobal);
if (pdf)
{
LPWSTR pszFile = (LPWSTR)(pdf + 1);
if (pszFile)
{
while (*pszFile)
{
wprintf(L" %s\n", pszFile);
pszFile += lstrlen(pszFile) + 1;
}
}
GlobalUnlock(medium.hGlobal);
}
ReleaseStgMedium(&medium);
}
}
return hr;*/
return E_UNEXPECTED;
}