SDK 實作VS2010複製中文亂碼修復

2021-05-23 14:15:22 字數 2785 閱讀 5967

當複製vs2010中帶有中文字元的**到office(word, excel, powerpoint, outlook)時,

在中文字元後面會被新增一到三個亂碼。比如複製"中文字元",貼上到word就會變成(中d文?字á?符¤?)。

通過黑暗執行緒的一篇文章提示,擷取剪貼簿中rtf(富文字格式)的資料流,並作出修復。該作者使用了 .net中的正規表示式類regex來達到修復目的。方法呼叫很簡單,感興趣的可以搜尋一下作者的部落格空間。

我這裡給出另乙個解決方法:同時擷取cf_unicodetext和rtf兩種剪貼簿資料,以cf_unicodetext中的正確資料為參照,對比剔除rtf中的亂碼。

寫這份**走了不少彎路,主要是一開始對rtf格式不熟悉,其中的中文接ascii碼處理著實讓我差點抓破了頭皮。

先給出亂碼修復截圖:

程式新增了全域性熱鍵 ctrl+q 和 監測狀態。右下角則是乙個動態文字logo,滑鼠移上去就會出現logo,

下面貼出程式的核心演算法:

函式引數說明:

ptstr        ptext     (rtf資料首位址指標,切勿傳遞剪貼簿記憶體,必須是程式拷貝剪貼簿的。)

uint          itext      (rtf資料大小。單位位元組)

lpwstr    ptextu   (cf_unicodetext資料首位址指標,同上,不可為剪貼簿記憶體。)

uint          itextu    (cf_unicodetext資料大小。單位字元)

返回值型別  uint      (修復完後rtf資料的大小。單位位元組)

/*-------------------------------

repair.cpp - 實作亂碼修正處理

-------------------------------*/

#include

#include

uint

clobalrepair (

ptstr

ptext

,uint

itext

,lpwstr

ptextu

,uint

itextu) }

// 中文接中文的處理

if (

ptextuw[0

]>

0x80)

// 文件尾的處理

if( ptextuw[0

]==null)

// 換行符、回車及水平製表

if (

ptextuw[0

]==0x0d ||

ptextuw[0

]==0x09)

// 中文接ascii的處理

if (

ptextuw[0

]<=

0x80

&&ptextuw[0

]>=

0x20)

else

}if (

strlen(

ansit)

<=3)

ansit[ir

]='//';

ptextw

=ptexts;

ptextw

=strstr(

ptexts

,ansit);

if(ptextw

==null) }

while(

true)

else}}

}ptextw=&

ptextw[-

1];}if (

ansit[2

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

if (

ansit[3

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

if (

ansit[4

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

if (

ansit[5

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

if (

ansit[6

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

if (

ansit[7

]!=null

&&bansi

!=true)

else}}

}ptextw=&

ptextw[-

1];}}

}ic=ptextw

-ptexts; i

=ptexts

-ptext; ir

=i+ic;

for ( i=

0; ir

<=

itext;

i++,ir

++)

ptexts[i

]=ptextw[i

];itext

-=ic;

continue; }

}return

itext; }

解決vs2010到word複製產生的中文亂碼

上篇文章提到,我成功的用word解決了 高亮與對齊的問題,現在新的問題出現了,如果程式中有中文,那麼,從vs2010到word複製過程中,會產生亂碼,如下所示 include stdio.h intmain 這又怎麼辦呢?我上網搜尋了一下,果然有高手解決了此問題,據說,這個問題是vs2010在每個中...

VS2010專案複製

好久沒寫日記了,忙的沒時間記錄,只埋頭編碼,不停下來思考和總結是不好滴啊!在做的乙個專案終於決定要分化出不同版本了,伺服器和客戶端。用乙個巨集來控制倆版本實在是不舒服,而且隱約覺得版本的區別將越來越大,如果繼續用巨集來控制,豈不是要把自己搞暈。從原有的專案 2 in 1,這是乙個使用巨集server...

C 程式在VS2010中複製窗體

1 乙個窗體有三個檔案,全部拷貝到新的專案檔案目錄中 2 在新專案中新增現有項,然後把這個窗體相關的三個檔案都新增到新的專案中 4 開啟窗體 修改public partial class old form 中的old為新窗體類名new.重要 窗體初始化模組中的old也相應的修改為new public...