额外减小 发表于 2023-2-3 23:20:54

文章防复制功能

本帖最后由 额外减小 于 2023-2-6 15:34 编辑

大家好,我今天分享的是"通过在行末添加乱码使得他人无法私自复制转载文章"的程序(自创)(仅在本论坛有效)SXv!sMW*
qD^3:rP;w|
实测:'{td
bR_K!
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=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={'\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='\0';//重新初始化数组
}
}

int main(void)
{
char one_line={'\0'},temp={'\0'},whole_text={'\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=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
**** Hidden Message *****B1H&<;7G}y'#B


更新:按小甲鱼老板的要求,我已改好了代码,主要增加了避开【code】标签的功能,从而更加方便。
不过改进后的程序如果接收到的"【code】标签与【/code】标签数目不同,则无法正常地将每一行都填上乱码。
所以奉劝一些不正经的用户好自为之(不是)
话不多说,上代码
对不起:因为代码中涉及到“code”标签的字符串,会被系统识别成代码段,所以我只好发文件模式了


刚好150行,挺整的。
删去了一些不重要的代码。
Linux,Mac用户只需要把代码中的"CopyToClipboard"函数改为stdout或输出到文件即可正常编译运行。(不知道system函数要不要改,你看着办吧)

额外减小 发表于 2023-2-3 23:38:05

@hveagle @Mike_python小 @sfqxx @liuhongrun2022 @高山

求支持哈{:10_254:}

isdkz 发表于 2023-2-4 00:37:48

{:7_146:}

额外减小 发表于 2023-2-4 00:39:49

isdkz 发表于 2023-2-4 00:37


谢谢支持!{:10_288:}

小甲鱼 发表于 2023-2-4 01:40:08

{:10_335:} 可以丫!

小甲鱼 发表于 2023-2-4 01:42:48

代码段是使用 code 标签包裹,可以添加代码让其避开 code 即可。

tiger20100907 发表于 2023-2-4 08:04:11

{:10_256:}牛

liuhongrun2022 发表于 2023-2-4 08:33:34

本帖最后由 liuhongrun2022 于 2023-2-4 08:36 编辑

{:5_106:}
但是就不能用背景了

学习编程中的Ben 发表于 2023-2-4 08:55:48

牛逼

元豪 发表于 2023-2-4 09:37:10

{:10_256:}

liuhongrun2022 发表于 2023-2-4 15:39:27

我试试
评分KA3
a@c!+N!!;H

额外减小 发表于 2023-2-4 18:50:53

测试#include <stdio.h>

int main()
{
    printf("hello?");
    return 0;
}

廿四桥 发表于 2023-2-5 09:39:53

学习,学习。

嘉岳呀 发表于 2023-2-5 14:45:34

注意事项第3、4条可修改的参数能注释一下吗?{:10_281:}

额外减小 发表于 2023-2-5 15:51:13

嘉岳呀 发表于 2023-2-5 14:45
注意事项第3、4条可修改的参数能注释一下吗?

可以

额外减小 发表于 2023-2-5 15:54:26

嘉岳呀 发表于 2023-2-5 14:45
注意事项第3、4条可修改的参数能注释一下吗?

第70行已注释

hziyan 发表于 2023-2-5 20:25:52

太强了,想起甲鱼的课后作业啥的都是有乱码的

额外减小 发表于 2023-2-5 23:40:57

hziyan 发表于 2023-2-5 20:25
太强了,想起甲鱼的课后作业啥的都是有乱码的

对,我就是受到这个启发做的。{:10_256:}

额外减小 发表于 2023-2-6 14:38:03

测试#include <windows.h>
#include <stdlib.h>
#pragma comment(lib,"....lib")

额外减小 发表于 2023-2-6 14:50:50

liuhongrun2022 发表于 2023-2-4 08:33
但是就不能用背景了

为什么
我觉得可以啊...
页: [1] 2
查看完整版本: 文章防复制功能