mirror of https://github.com/vxunderground/VX-API
108 lines
2.1 KiB
C++
108 lines
2.1 KiB
C++
#include "Win32Helper.h"
|
|
|
|
DWORD OleGetClipboardDataA(_Inout_ PCHAR Buffer)
|
|
{
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
HRESULT Result = S_OK;
|
|
IDataObject* DataObject = NULL;
|
|
BOOL bFlag = FALSE;
|
|
|
|
FORMATETC Format = { CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
|
STGMEDIUM Medium;
|
|
LPCSTR Data = NULL;
|
|
|
|
Result = OleGetClipboard(&DataObject);
|
|
if (FAILED(Result))
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (!DataObject)
|
|
goto EXIT_ROUTINE;
|
|
|
|
Result = DataObject->GetData(&Format, &Medium);
|
|
if (FAILED(Result))
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (Medium.hGlobal == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
Data = (LPCSTR)GlobalLock(Medium.hGlobal);
|
|
if (Data == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
SecureStringCopyA(Buffer, Data, StringLengthA(Data));
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (!bFlag)
|
|
{
|
|
if (Result != S_OK)
|
|
dwError = Win32FromHResult(Result);
|
|
else
|
|
dwError = GetLastErrorFromTeb();
|
|
}
|
|
|
|
#pragma warning( push )
|
|
#pragma warning( disable : 6001)
|
|
if (Medium.hGlobal != NULL)
|
|
GlobalUnlock(Medium.hGlobal);
|
|
#pragma warning( pop )
|
|
|
|
if (DataObject)
|
|
DataObject->Release();
|
|
|
|
return dwError;
|
|
}
|
|
|
|
DWORD OleGetClipboardDataW(_Inout_ PWCHAR Buffer)
|
|
{
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
HRESULT Result = S_OK;
|
|
IDataObject* DataObject = NULL;
|
|
BOOL bFlag = FALSE;
|
|
|
|
FORMATETC Format = { CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
|
STGMEDIUM Medium;
|
|
LPCSTR Data = NULL;
|
|
|
|
Result = OleGetClipboard(&DataObject);
|
|
if (FAILED(Result))
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (!DataObject)
|
|
goto EXIT_ROUTINE;
|
|
|
|
Result = DataObject->GetData(&Format, &Medium);
|
|
if (FAILED(Result))
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (Medium.hGlobal == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
Data = (LPCSTR)GlobalLock(Medium.hGlobal);
|
|
if (Data == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (CharStringToWCharString(Buffer, (PCHAR)Data, StringLengthA(Data)) == 0)
|
|
goto EXIT_ROUTINE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (!bFlag)
|
|
{
|
|
if (Result != S_OK)
|
|
dwError = Win32FromHResult(Result);
|
|
else
|
|
dwError = GetLastErrorFromTeb();
|
|
}
|
|
|
|
#pragma warning( push )
|
|
#pragma warning( disable : 6001)
|
|
if (Medium.hGlobal != NULL)
|
|
GlobalUnlock(Medium.hGlobal);
|
|
#pragma warning( pop )
|
|
|
|
if (DataObject)
|
|
DataObject->Release();
|
|
|
|
return dwError;
|
|
} |