sData中是html代码,全是英文的时候没有问题,有中文再粘贴出来就全是乱码   If CBool(OpenClipboard(0)) Then
   
      Dim hMemHandle As Long, lpData As Long
      
      hMemHandle = GlobalAlloc(0, Len(sData) + 10)
      
      If CBool(hMemHandle) Then
               
         lpData = GlobalLock(hMemHandle)
         If lpData <> 0 Then
            
            CopyMemory ByVal lpData, ByVal sData, Len(sData)
            GlobalUnlock hMemHandle
            EmptyClipboard
            SetClipboardData m_cfHTMLClipFormat, hMemHandle
                        
         End If
      
      End If
   
      Call CloseClipboard
   End If

解决方案 »

  1.   

    sData 是 String 吧,我再弄 Access 密码(剪切板输出)时也遇到过。大致原因是 VB 调用 API 时 String 自动装换编码,由 VB 的Unicode 转为系统本地编码,要阻止其胡乱转换,可以自己手工转换,以 Byte 数组的方式输出。
      

  2.   

    我只能在写入剪贴板时处理,输出是由用户按粘贴输出的
    我把string改为byte数组了,还是乱码,英文、数字正常
       
       Dim sData As String
       Dim bData() As Byte
       sData = "<a href=#>好123</a>"
       bData = StrConv(sData, vbFromUnicode)
       'Add the HTML code to the clipboard
       If CBool(OpenClipboard(0)) Then
       
          Dim hMemHandle As Long, lpData As Long
          
          hMemHandle = GlobalAlloc(0, UBound(bData) + 1)
          
          If CBool(hMemHandle) Then
                   
             lpData = GlobalLock(hMemHandle)
             If lpData <> 0 Then
                
                CopyMemory ByVal lpData, ByVal VarPtr(bData(0)), UBound(bData) + 1
                GlobalUnlock hMemHandle
                EmptyClipboard
                SetClipboardData m_cfHTMLClipFormat, hMemHandle
                            
             End If
          
          End If
       
          Call CloseClipboard
       End If
      

  3.   

    既然是在VB里编程,干嘛不使用VB封装好的clipbroad对象呢.如果功能都一样,你这样做除了自找麻烦没别的用处....
      

  4.   

    如果VB封装好的clipbroad 对象能工作,当然不需要这样麻烦了。
    楼主用WinHex 接收粘贴,多试试定能成功解决。
      

  5.   

    VB封装好的clipbroad 对象不一定能工作!中文操作系统可以,英文操作系统就不行了:
    随便新建一个standard exe工程,写入代码:
    Private Sub Command1_Click()
        Clipboard.Clear
        Clipboard.SetText "中文"
    End Sub
    在英文操作系统下运行,并点击按钮之后,再在其它地方ctrl+v,得到的是乱码哦
      

  6.   

    copytoclip(CString m_instr)
    {
    LPTSTR  lptstrCopy; 
    HGLOBAL hglbCopy; 
    //UpdateData(TRUE);
    HWND hwndMain=::GetDesktopWindow();;
    int cch=m_instr.GetLength();
      BSTR ppl=m_instr.AllocSysString();
       cch=SysStringByteLen(ppl);
    // TODO: Add your control notification handler code here
    hglbCopy = GlobalAlloc(GMEM_MOVEABLE, 
    (cch +3) * sizeof(TCHAR)); 
    ::OpenClipboard(NULL);
    if (hglbCopy == NULL) 

    CloseClipboard(); 
    return 1; 


    // Lock the handle and copy the text to the buffer. 

    lptstrCopy =(char*) GlobalLock(hglbCopy); 
    memcpy(lptstrCopy, ppl, //(LPCSTR)m_instr, 
    cch ); 
    lptstrCopy[cch] =lptstrCopy[cch+1]=lptstrCopy[cch+2]= (TCHAR) 0; 
    GlobalUnlock(hglbCopy); 

    // Place the handle on the clipboard. 
    EmptyClipboard();
    SetClipboardData(CF_UNICODETEXT, hglbCopy); 
    CloseClipboard();
    return 0;
    }
    要考虑语言的兼容性。 如果粘帖需要多采用几种格式。 用unicode就可以了。