Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SKSEScaleform_GetClipboardData : public GFxFunctionHandler
- {
- public:
- virtual void Invoke(Args * args)
- {
- if (! g_loadGameLock.TryEnter())
- return;
- if(OpenClipboard(NULL)) {
- HANDLE cbHandle = NULL;
- LPTSTR textData;
- if(IsClipboardFormatAvailable(CF_TEXT)) {
- cbHandle = GetClipboardData(CF_TEXT);
- if(!cbHandle) {
- CloseClipboard();
- g_loadGameLock.Leave();
- return;
- }
- textData = (LPTSTR)GlobalLock(cbHandle);
- if(!textData) {
- CloseClipboard();
- g_loadGameLock.Leave();
- return;
- }
- args->movie->CreateString(args->result, (const char*)textData);
- GlobalUnlock(cbHandle);
- }
- CloseClipboard();
- }
- g_loadGameLock.Leave();
- }
- };
- class SKSEScaleform_SetClipboardData : public GFxFunctionHandler
- {
- public:
- virtual void Invoke(Args * args)
- {
- if (! g_loadGameLock.TryEnter())
- return;
- if(OpenClipboard(NULL)) {
- ASSERT(args->numArgs >= 1);
- ASSERT(args->args[0].GetType() == GFxValue::kType_String);
- const char * clipboardData = args->args[0].GetString();
- UInt32 size = strlen(clipboardData) + 1;
- HANDLE handle = GlobalAlloc(GMEM_MOVEABLE, size);
- if(!handle) {
- CloseClipboard();
- g_loadGameLock.Leave();
- return;
- }
- LPTSTR textData = (LPTSTR)GlobalLock(handle);
- if(!textData) {
- GlobalFree(handle); // Global mem allocated but lock failed
- CloseClipboard();
- g_loadGameLock.Leave();
- return;
- }
- memcpy(textData, clipboardData, size);
- GlobalUnlock(handle);
- if(!SetClipboardData(CF_TEXT, handle)) {
- GlobalFree(handle); // Global mem allocated but not used
- CloseClipboard();
- g_loadGameLock.Leave();
- return;
- }
- CloseClipboard();
- }
- g_loadGameLock.Leave();
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement