C++ 複製剪貼簿內容並寫入檔案 [寬字元處理方法]
這一篇是擷取剪貼簿內容,需要將文字複製到剪貼簿上(Ctrl+C)的請參考這一篇:
http://charlottehong.blogspot.com/2017/10/c_25.html
http://charlottehong.blogspot.com/2017/10/c_25.html
卡關卡很久的地方
- UTF-8原來是要檔頭的,一開始沒注意到嘗試超久,sublimetext開出來都一堆碼
- CStringW 如何轉型 char* 這個也弄很久
下面直接上幾個重要的函式
#include <windows.h>
#include <atlstr.h>
//獲取剪貼簿
CStringW getClipboard(){
/* 轉型(char*)(LPCSTR)(CStringA)
剪貼簿參考:https://goo.gl/bjzEeA
轉型參考:https://goo.gl/bEmvbU */
CStringW strData;
if (OpenClipboard(NULL)) {
HANDLE hClipboardData = GetClipboardData(CF_UNICODETEXT);
//DWORD dwLength = GlobalSize(hClipboardData);
if (hClipboardData) {
WCHAR *pchData = (WCHAR*)GlobalLock(hClipboardData);
if (pchData) {
strData = pchData;
GlobalUnlock(hClipboardData);
}
}
CloseClipboard();
}
return strData;
}
// 寫入文件
void WriteFiles(char* fileName, const CStringW& ClipStrW) {
ofstream file (fileName, ios::binary);
file.exceptions (ifstream::eofbit | ifstream::failbit | ifstream::badbit);
// CP_UTF8 檔頭
int UTF_8 = 0xBFBBEF;
file.write((char*)&UTF_8, 3);
// 寫入 CP_UTF8
wstring str = ClipStrW;
string result = std::string();
result.resize(WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, NULL, 0, 0, 0) - 1);
char* ptr = &result[0];
WideCharToMultiByte(CP_UTF8, 0, str.c_str(), -1, ptr, result.size(), 0, 0);
file << result;
}
main的操作方式如下
#include <windows.h>
#include <atlstr.h>
// 獲取剪貼簿內容 “salient”
CStringW ClipStrW = getClipboard();
const char* ClipStr = (LPCSTR)(CStringA)ClipStrW;
//cout << ClipStr << endl;
// 剪貼簿內容寫入文件
WriteFiles("Paper.txt", ClipStrW);
沒有留言:
張貼留言