16,548
社区成员




//实现粘贴板,从内存复制某个可编辑。
BOOL CEvent::SetDataToClip(wcomm::Ctstring& strMsg)
{
LPTSTR pBuffer = NULL;
BOOL res = FALSE;
if (OpenClipboard(NULL))
{
EmptyClipboard();//清理粘贴板
HANDLE hGlobalMemory = GlobalAlloc(GMEM_MOVEABLE, strMsg.length() + 1);
if (hGlobalMemory)
{
LPSTR lpStr = (LPSTR)GlobalLock(hGlobalMemory);
memcpy(lpStr, strMsg.c_str(), strMsg.length());
lpStr[strMsg.length()] = 0;
GlobalUnlock(hGlobalMemory);
#ifdef _UNICODE
SetClipboardData(CF_UNICODETEXT, hGlobalMemory);
#else
SetClipboardData(CF_TEXT, hGlobalMemory);
#endif
CloseClipboard();
res = TRUE;
}
else
{
setErros(wcomm::GetErrMsg(GetLastError()));
}
CloseClipboard();
}
else
setErros(wcomm::GetErrMsg(GetLastError()));
return res;
}
BOOL CEvent::Cut(wcomm::Ctstring& strMsg)
{
if (SetDataToClip(strMsg))
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// 按下 "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// 按下 "V" key
ip.ki.wVk = 'V';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// 释放 "V" key
ip.ki.wVk = 'V';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// 释放 "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
return TRUE;
}
return FALSE;
}