马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 额外减小 于 2023-2-6 15:34 编辑
大家好,我今天分享的是"通过在行末添加乱码使得他人无法私自复制转载文章"的程序(自创)(仅在本论坛有效)SXv!sMW*
qD^3:rP;w|
实测:'{td
1
bR_K!
2
5vA\cJ~)
fT^
话不多说,直接上代码,注释给你写好了,如有不明白可在评论区交流。 <&`#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <math.h>
#include <time.h>
// 原理:乱码两侧加上 ...
char * make_str(int random,char * _Dest,int length); // 创建乱码字符串
char * add_text(int random,char * _Dest,const char * line_str); // 在行末添加乱码字符串
int CopyToClipboard(const char* pszData, const int nDataLen); // 将修改后的全文复制到剪贴板
void _clear(char * str,int len); // 将数组归零(防止先前的内容影响后面的内容)
char * make_str(int random,char * _Dest,int length)
{
time_t t;
time(&t);
srand(random);
for(int i=0;i<length-1;i++) // 在ASCII字符表的可显示字符部分(32~126)寻找组成乱码的字符
{
srand((unsigned)(t+(i+3154)*(i+314)+rand()*(i+2))); // 重置种子
_Dest[i]=abs(rand())%95+32;
}
return _Dest;
}
char * add_text(int random,char * _Dest,const char * line_str)
{
time_t t;
srand(random);
int length=abs(rand())%10+5; // 乱码长度(5~14字符)
char random_str[15]={'\0'};
strcpy(_Dest,line_str);
strcat(_Dest,"");
strcat(_Dest,make_str(random,random_str,length));
strcat(_Dest,"");
return _Dest;
}
int CopyToClipboard(const char* pszData, const int nDataLen)
{
if(OpenClipboard(NULL))
{
EmptyClipboard();
HGLOBAL clipbuffer;
char *buffer;
clipbuffer = GlobalAlloc(GMEM_DDESHARE, nDataLen+1);
buffer = (char *)GlobalLock(clipbuffer);
strcpy(buffer, pszData);
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT, clipbuffer);
CloseClipboard();
return 0;
}
return 1;
}
void _clear(char * str,int len)
{
for(int i=0;i<len;i++)
{
str[i]='\0'; // 重新初始化数组
}
}
int main(void)
{
char one_line[1000]={'\0'},temp[1000]={'\0'},whole_text[100000]={'\0'},ch; //数组长度:代表每行长度不超过1000字节,全文长度不超过100000字节
int Lcount=0,Tcount=0,random;
time_t t;
srand((unsigned)time(&t));
random=rand();
while((ch=getchar())!=EOF) // ctrl+Z
{
if(ch=='\n') // 将一行的内容加上换行符连接到全文字符串
{
strcat(whole_text,add_text(random,temp,one_line));
strcat(whole_text,"\n");
Lcount=0;
_clear(one_line,1000);
srand(random);
random+=rand(); //重置 random 数值
}
else
{
one_line[Lcount]=ch;
Lcount++;
}
Tcount++; // 统计全文字符数
}
CopyToClipboard(whole_text,100000);
system("cls");
printf("处理后的内容已经复制到剪贴板!\n\n感谢您的使用,再见!\n");
MessageBoxA(NULL,"处理后的内容已经复制到剪贴板!\n感谢您的使用,再见!","提示",MB_ICONINFORMATION);
return 0;
}
&nyrwVId05
]Vkl>O#Bx>kP1
注意事项%0(MBqve0
l;]G]pSb
B1H&<;7G}y'#B
更新:按小甲鱼老板的要求,我已改好了代码,主要增加了避开【code】标签的功能,从而更加方便。
不过改进后的程序如果接收到的"【code】标签与【/code】标签数目不同,则无法正常地将每一行都填上乱码。
所以奉劝一些不正经的用户好自为之(不是)
话不多说,上代码
对不起:因为代码中涉及到“code”标签的字符串,会被系统识别成代码段,所以我只好发文件模式了
防复制.zip
(1.63 KB, 下载次数: 1)
刚好150行,挺整的。
删去了一些不重要的代码。
Linux,Mac用户只需要把代码中的"CopyToClipboard"函数改为stdout或输出到文件即可正常编译运行。(不知道system函数要不要改,你看着办吧) |