public static bool SetClipboard(string strUserData)
{
  if (!Win32ClipboardAPI.OpenClipboard(IntPtr.Zero))
    return false;
        
  Win32ClipboardAPI.EmptyClipboard();
  byte[] byteUserData = System.Text.ASCIIEncoding.Unicode.GetBytes(strUserData);
                
  IntPtr alloc = Win32MemoryAPI.GlobalAlloc(Win32MemoryAPI.GMEM_MOVEABLE  | Win32MemoryAPI.GMEM_DDESHARE, new UIntPtr(Convert.ToUInt32(byteUserData.Length)));
  IntPtr gLock = Win32MemoryAPI.GlobalLock(alloc);  if ( byteUserData.Length > 0)
  {
    Marshal.Copy(byteUserData,0,gLock,byteUserData.Length);
  }  Win32MemoryAPI.GlobalUnlock(alloc);
  //CF_Text = 1
  Win32ClipboardAPI.SetClipboardData(1, alloc);
  Win32ClipboardAPI.CloseClipboard();
  return true;
}