mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-11-24 06:15:35 +08:00
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
|
#include"plugin.h"
|
||
|
|
||
|
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
|
||
|
|
||
|
extern "C" __declspec(dllexport) wchar_t* OnNewSentence(wchar_t* sentence, const InfoForExtension* sentenceInfo)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
std::wstring sentenceCopy(sentence);
|
||
|
int oldSize = sentenceCopy.size();
|
||
|
if (ProcessSentence(sentenceCopy, SentenceInfo{ sentenceInfo }))
|
||
|
{
|
||
|
if (sentenceCopy.size() > oldSize) sentence = (wchar_t*)HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sentence, (sentenceCopy.size() + 1) * sizeof(wchar_t));
|
||
|
wcscpy_s(sentence, sentenceCopy.size() + 1, sentenceCopy.c_str());
|
||
|
}
|
||
|
}
|
||
|
catch (std::exception &e)
|
||
|
{
|
||
|
*sentence = L'\0';
|
||
|
}
|
||
|
return sentence;
|
||
|
}
|
||
|
|
||
|
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
||
|
{
|
||
|
if (sentenceInfo["current select"] && sentenceInfo["process id"] != 0 &&sentenceInfo["toclipboard"])
|
||
|
{
|
||
|
if (!OpenClipboard((HWND)sentenceInfo["HostHWND"])) return false;
|
||
|
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (sentence.size() + 2) * sizeof(wchar_t));
|
||
|
memcpy(GlobalLock(hMem), sentence.c_str(), (sentence.size() + 2) * sizeof(wchar_t));
|
||
|
EmptyClipboard();
|
||
|
SetClipboardData(CF_UNICODETEXT, hMem);
|
||
|
GlobalUnlock(hMem);
|
||
|
CloseClipboard();
|
||
|
}
|
||
|
return false;
|
||
|
}
|