[DllImport("User32.dll")]
private extern static bool EmptyClipboard();
[DllImport("Kernel32.dll")]
private extern static int GetLastError();
[DllImport("User32.dll")]
private extern static bool OpenClipboard(IntPtr hWndNewOwner);
[DllImport("User32.dll")]
private extern static bool CloseClipboard();
[DllImport("User32.dll")]
private extern static bool IsClipboardFormatAvailable(uint format);
[DllImport("User32.dll")]
private extern static IntPtr SetClipboardData(uint uFormat,IntPtr hMem);
[DllImport("User32.dll")]
private extern static IntPtr GetClipboardData(uint uFormat);
private static bool SetClipBoardText( string Text)
{
try
{
uint uformat=1;
if (!IsClipboardFormatAvailable(uformat))
{
logger.ErrorFormat("不支持的剪切板格式,Format={0}", GetLastError());
return false;
}
if (!OpenClipboard(IntPtr.Zero))
{
logger.ErrorFormat("打开剪切板失败,Error={0}", GetLastError());
return false;
}
if (!EmptyClipboard())
{
logger.ErrorFormat("清空剪切板失败,Error={0}", GetLastError());
return false;
}
IntPtr r= SetClipboardData(uformat, Marshal.StringToCoTaskMemAnsi(Text));
if (r == IntPtr.Zero)
{
logger.ErrorFormat("剪切板操作失败,Error={0}", GetLastError());
return false;
}
return true;
}
catch (Exception ex)
{
logger.Error(ex);
return false;
}
finally
{
if (!CloseClipboard())
{
logger.ErrorFormat("关闭剪切板失败,Error={0}", GetLastError());
}
}
}
private static string GetClipBoardText()
{
try
{
if (!OpenClipboard(IntPtr.Zero))
{
logger.ErrorFormat("打开剪切板失败,Error={0}", GetLastError());
return string.Empty;
}
IntPtr ii = GetClipboardData(uformat);
if(ii==IntPtr.Zero)
{
logger.ErrorFormat("读取剪切板失败,Error={0}", GetLastError());
return string.Empty;
}
return Marshal.PtrToStringAnsi(ii);
}
catch (Exception ex)
{
logger.Error(ex);
return string.Empty;
}
finally
{
if (!CloseClipboard())
{
logger.ErrorFormat("关闭剪切板失败,Error={0}", GetLastError());
}
}
}