自动转换剪贴板中的字符串方便c#的$““符号输出
效果,剪贴板复制一个字符串,希望用c#的$""输出方便后续修改其中的某些变量。
比如字符串:
ksal;kgal;kglkda;kks;lfaks\\a\sa[d]asdsa\s][[[[]][[][][][{}{}{{}{}{}{[S"ADSa''aG'SA"G"sa"G"AS"G""asfgasfafs{}{}{}
希望得到的字符串:
$"ksal;kgal;kglkda;kks;lfaks\\a\sa[d]asdsa\s][[[[]][[][][][{{}}{{}}{{{{}}{{}}{{}}{{[S\"ADSa''aG'SA\"G\"sa\"G\"AS\"G\"\"asfgasfafs{{}}{{}}{{}}"
如果手工写比较麻烦,于是我写了这个小工具,使用MFC框架实现。
实现直接转换剪贴板中的字符串,方便c#代码输出。
直接上代码:
#include <windows.h>
#include <atlstr.h>CString ConvertStringForCsharpCode(CString& strPath)
{CString result;for (int i = 0; i < strPath.GetLength(); i++){TCHAR ch = strPath[i];switch (ch){case _T('"'): // 双引号转义为\"result += _T("\\\"");break;case _T('{'): // 左花括号转义为{{result += _T("{{");break;case _T('}'): // 右花括号转义为}}result += _T("}}");break;//case _T('\\'): // 反斜杠转义为\\(根据场景决定是否需要)// result += _T("\\\\");// break;default:result += ch;}}return "$\"" + result + "\"";
}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{char* buffer = nullptr;CString strFromClipboard;if (OpenClipboard(NULL)){HANDLE hData = GetClipboardData(CF_TEXT);char* buffer = (char*)GlobalLock(hData);strFromClipboard = buffer;int nLen = strFromClipboard.GetLength();if (nLen > 0){EmptyClipboard();strFromClipboard = ConvertStringForCsharpCode(strFromClipboard);size_t cbStr = (strFromClipboard.GetLength() + 1) * sizeof(TCHAR);HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);memcpy_s(GlobalLock(hData), cbStr, strFromClipboard.LockBuffer(), cbStr);strFromClipboard.UnlockBuffer();UINT nFormat = (sizeof(TCHAR) == sizeof(WCHAR) ? CF_UNICODETEXT : CF_TEXT);::SetClipboardData(nFormat, hData);}GlobalUnlock(hData);CloseClipboard();}return 0;
}
下面是隐藏黑窗口的方法:
要将命令行程序改为窗口程序并隐藏黑框,可以采用下面的方法:
使用WinMain入口点(推荐)
- 将main改为WinMain
- 在项目属性中设置子系统为Windows
- 添加/SUBSYSTEM:WINDOWS链接器选项