
$=
var clipboardData = Clipboard.GetDataObject();
string[] formats = clipboardData.GetFormats();
//在此处指定流读取时的默认编码,常用:Encoding.UTF8, Encoding.Default (系统ANSI/GBK), Encoding.GetEncoding("GB2312")
var streamEncoding = Encoding.UTF8;
// --- 优先尝试获取 Unicode 文本 (解决乱码的关键) ---
if (clipboardData.GetDataPresent("UnicodeText"))
{
string txt = (string)clipboardData.GetData("UnicodeText");
_context.SetVarValue("type", "text");
_context.SetVarValue("text", txt);
return txt;
}
// --- 其次尝试普通文本 ---
else if (clipboardData.GetDataPresent("Text"))
{
string txt = (string)clipboardData.GetData("Text");
_context.SetVarValue("type", "text"); // 这里可能获取到的是 ANSI 文本
_context.SetVarValue("text", txt);
return txt;
}
// --- 图片 ---
else if (clipboardData.GetDataPresent("Bitmap"))
{
_context.SetVarValue("type","img");
return (System.Drawing.Bitmap)clipboardData.GetData("Bitmap");
}
// --- Quicker 动作步骤 ---
else if (clipboardData.GetDataPresent("quicker-action-steps"))
{
_context.SetVarValue("type","qk-step");
string txt = (string)clipboardData.GetData("quicker-action-steps");
_context.SetVarValue("text", txt);
return txt;
}
// --- Quicker 子程序 ---
else if (clipboardData.GetDataPresent("quicker-subprogram-item"))
{
_context.SetVarValue("type","qk-sub");
string txt = (string)clipboardData.GetData("quicker-subprogram-item");
_context.SetVarValue("text", txt);
return txt;
}
// --- Quicker 轮盘动作 ---
else if (clipboardData.GetDataPresent("quicker-circle-menu-action"))
{
_context.SetVarValue("type","qk-circle");
// 注意:ToJson() 是扩展方法或Quicker内部方法,确保环境支持
var obj = clipboardData.GetData("quicker-circle-menu-action");
// _context.SetVarValue("text", obj.ToJson());
// return obj.ToJson();
return obj; // 建议直接返回对象或确认 ToJson 可用
}
// --- Quicker 轮盘配置 ---
else if (clipboardData.GetDataPresent("quicker-circle-menu-config"))
{
_context.SetVarValue("type","qk-circle-config");
string txt = (string)clipboardData.GetData("quicker-circle-menu-config");
_context.SetVarValue("text", txt);
return txt;
}
// --- 文件 ---
else if (clipboardData.GetDataPresent("FileDrop"))
{
_context.SetVarValue("type","file");
return (string[])clipboardData.GetData("FileDrop");
}
// --- 通用流处理 (MemoryStream) ---
else
{
// 尝试获取第一个格式的内容
string format = formats.FirstOrDefault();
if (format != null && clipboardData.GetData(format) is System.IO.MemoryStream)
{
_context.SetVarValue("type", format);
var memoryStream = (System.IO.MemoryStream)clipboardData.GetData(format);
memoryStream.Position = 0;
byte[] buffer = new byte[memoryStream.Length];
memoryStream.Read(buffer, 0, buffer.Length);
// 使用前面定义的编码进行转换
return streamEncoding.GetString(buffer);
}
else
{
_context.SetVarValue("type", "others");
return clipboardData;
}
}