mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-27 15:44:12 +08:00
clip
This commit is contained in:
parent
b65f5a5994
commit
3e62d72c2e
@ -106,6 +106,7 @@ static void clipboard_callback_1(void (*callback)(const wchar_t *, bool), HANDLE
|
|||||||
callbackx(hWnd);
|
callbackx(hWnd);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
// 根据文档,这样做是正确的,且在win11下管用。但到xp上就读不到了。。
|
||||||
static HWND nextviewer;
|
static HWND nextviewer;
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
@ -157,7 +158,7 @@ static void clipboard_callback_1(void (*callback)(const wchar_t *, bool), HANDLE
|
|||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef WINXP
|
||||||
DECLARE_API HWND clipboard_callback(void (*callback)(const wchar_t *, bool))
|
DECLARE_API HWND clipboard_callback(void (*callback)(const wchar_t *, bool))
|
||||||
{
|
{
|
||||||
HANDLE hsema = CreateSemaphoreW(0, 0, 10, 0);
|
HANDLE hsema = CreateSemaphoreW(0, 0, 10, 0);
|
||||||
@ -167,23 +168,45 @@ DECLARE_API HWND clipboard_callback(void (*callback)(const wchar_t *, bool))
|
|||||||
|
|
||||||
WaitForSingleObject(hsema, INFINITE);
|
WaitForSingleObject(hsema, INFINITE);
|
||||||
CloseHandle(hsema);
|
CloseHandle(hsema);
|
||||||
#ifndef WINXP
|
|
||||||
if (AddClipboardFormatListener(hwnd))
|
if (AddClipboardFormatListener(hwnd))
|
||||||
return hwnd;
|
return hwnd;
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
#else
|
|
||||||
return hwnd;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static int running = false;
|
||||||
|
DECLARE_API HWND clipboard_callback(void (*callback)(const wchar_t *, bool))
|
||||||
|
{
|
||||||
|
running = true;
|
||||||
|
std::thread([=]()
|
||||||
|
{
|
||||||
|
std::wstring last;
|
||||||
|
while(running){
|
||||||
|
Sleep(100);
|
||||||
|
auto data = clipboard_get_internal();
|
||||||
|
if(data){
|
||||||
|
if(last==data.value())continue;
|
||||||
|
last=data.value();
|
||||||
|
auto ohwnd = GetClipboardOwner();
|
||||||
|
DWORD pid;
|
||||||
|
GetWindowThreadProcessId(ohwnd, &pid);
|
||||||
|
callback(data.value().c_str(), pid == GetCurrentProcessId());
|
||||||
|
}
|
||||||
|
} })
|
||||||
|
.detach();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
DECLARE_API void clipboard_callback_stop(HWND hwnd)
|
DECLARE_API void clipboard_callback_stop(HWND hwnd)
|
||||||
{
|
{
|
||||||
|
#ifndef WINXP
|
||||||
if (!hwnd)
|
if (!hwnd)
|
||||||
return;
|
return;
|
||||||
#ifndef WINXP
|
|
||||||
RemoveClipboardFormatListener(hwnd);
|
RemoveClipboardFormatListener(hwnd);
|
||||||
#endif
|
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
|
#else
|
||||||
|
running = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DECLARE_API bool clipboard_set_image(HWND hwnd, void *ptr, size_t size)
|
DECLARE_API bool clipboard_set_image(HWND hwnd, void *ptr, size_t size)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user